扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

Python鎬庝箞瀹炵幇Johnson绠楁硶

扬州沐宇科技
2023-11-20 18:12:25
python

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>

扫码添加客服微信