Python鎬庝箞瀹炵幇Johnson绠楁硶
Johnson绠楁硶鏄竴绉嶇敤浜庢眰瑙d綔涓氳溅闂磋皟搴﹂棶棰樼殑鍚彂寮忕畻娉曘€備笅闈㈡槸涓€绉峆ython瀹炵幇Johnson绠楁硶鐨勪緥瀛愶細
def johnson(jobs):
# 璁$畻浣滀笟鏁板拰鏈哄櫒鏁?/span>
num_jobs = len(jobs)
num_machines = len(jobs[0])
# 鍒濆鍖栦綔涓氶『搴忓拰瀹屾垚鏃堕棿鐭╅樀
order = [0] * num_jobs
completion_time = [[0] * (num_machines + 1) for _ in range(num_jobs + 1)]
# 瀵规瘡涓綔涓氱殑鍔犲伐鏃堕棿杩涜鎺掑簭
sorted_jobs = sorted(enumerate(jobs), key=lambda x: min(x[1]))
# 鍒濆鍖栨満鍣ㄤ换鍔℃椂闂?/span>
time_a = [0] * (num_machines + 1)
time_b = [0] * (num_machines + 1)
# 鏍规嵁鎺掑簭鍚庣殑浣滀笟椤哄簭杩涜璋冨害
for i, job in sorted_jobs:
# 鏇存柊鏈哄櫒浠诲姟鏃堕棿
for machine in range(1, num_machines + 1):
time_a[machine] = max(time_a[machine - 1], time_b[machine]) + job[machine - 1]
time_b[num_machines - machine + 1] = max(time_b[num_machines - machine + 2], time_a[num_machines - machine + 1]) + job[num_machines - machine]
# 璁板綍瀹屾垚鏃堕棿
completion_time[i + 1] = time_a[:]
# 鏍规嵁瀹屾垚鏃堕棿鐭╅樀閫夋嫨鏈€浼樹綔涓氶『搴?/span>
for i in range(1, num_jobs + 1):
order[i - 1] = completion_time[i].index(min(completion_time[i]))
return order
涓婅堪浠g爜涓紝jobs
鏄竴涓簩缁村垪琛紝姣忚琛ㄧず涓€涓綔涓氱殑鍔犲伐鏃堕棿銆?code>johnson鍑芥暟杩斿洖涓€涓垪琛紝琛ㄧず鏈€浼樹綔涓氶『搴忋€?/p>
相关问答