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面前。

 

posted @   storms11  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示