M = 3 # 机器数
N = [2,14,4,16,6,5,3] # 对应作业的工作时间
def Greedy(M,N):
items = [(i,t) for i,t in enumerate(N)] # 将每个作业与编号相对应
items = sorted(items,key = lambda x:-x[1]) # 将作业按照作业时间降序排列,以便后面的贪心算法求解
machines = [0] * M # M个机器上的作业结束时间
result = [[] for i in range(M)] # 每个机器上的作业编号
for item in items: # 通过作业时间的降序顺序依次遍历每个作业
Min = machines[0] # 寻找一个结束时间最早的机器,以便加入新的作业
t = 0
for i in range(1,M):
if machines[i] < Min:
t = i
Min = machines[i]
machines[t] += item[1]
result[t].append(item[0])
print('每个机器分配的作业编号和运作顺序:')
for i,machine in enumerate(result):
print('机器',i,'加工作业次序:',end='')
[print(m,end = ' ') for m in machine]
print()
print('总耗时:',max(machines)) # 运行时间最长的机器决定最终时间
Greedy(M,N)
输出:
每个机器分配的作业编号和运作顺序:
机器 0 加工作业次序:3
机器 1 加工作业次序:1 6
机器 2 加工作业次序:4 5 2 0
总耗时: 17
ps:明天开始学习回溯算法,在家待着尽量也要学点儿东西!!