小黑算法成长日记19:多机调度问题的局部最优解(贪心)

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:明天开始学习回溯算法,在家待着尽量也要学点儿东西!!
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值