Johnson法則

storms11發表於2024-07-02

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

相關文章