Johnson法则
2条的流水作业调度问题的贪心做法。
题目:有n个作业要在两台机器M1和M2组成的流水线上 完成加工。每个作业i都必须先花时间ai在Mi上加 工,然后花时间bi在M2上加工 确定n个作业的加工顺序,使得从作业1在机器M1 上加工开始到作业n在机器M2上加工为止所用的 总时间最短
做法:
(1)把所有作业按M1,M2的时间分为两组,a[i]≤b[i]对应组N1,a[i]>b[i]对应组N2N2。
(2)将N1的作业按a[i]递增排序,N2的作业按b[i]递减排序。
(3)按顺序先执行N1的作业,再执行N2的作业,得到的就是耗时最少的最优调度方案。
正确性:
t1=a1+a2+b1+b2-min(a2,b1)(先执行1,后执行2)
t2=a1+a2+b1+b2-min(a1,b2)(先执行2,后执行1)
所以当min(a2,b1)<min(a1,b2)时,先1后2,否则先2后1。
做法可以保证只要min(a2,b1)<min(a1,b2)就先1后2.
分类讨论
1.N1内部min(a2,b1)=a2,min(a1,b2)=a1,a1<a2.所以1该在2前面。
2.N1与N2中a1<=b1,b2<=a2,所以min(a2,b1)>min(a1,b2),所以1该在2前面
3.N2内部,a1>=b1,a2>=b2,b1>=b2,所以min(a2,b1)>min(a1,b2),所以1该在2面前。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具