问题描述
某工厂有 n n n 件物品需要进行加工,并且每件物品都需要先在 A A A 工厂加工 a i a_i ai 分钟,然后在 B B B 工厂加工 b i b_i bi分钟, A A A, B B B 工厂每次分别只能加工一件物品,问你最少需要多少时间能够加工完全部 n n n 件物品
交换论证
假设有 n n n 件待完成事件,当前完成了 k k k 件,所花时间为 T T T,设当前先完成 i i i 事件再完成 j j j 事件的总时间代价为 T + T i , j T + T_{i,j} T+Ti,j,先完成 j j j 事件再完成 i i i 事件的总时间代价为 T + T j , i T + T_{j,i} T+Tj,i,那么若能够找到关于 T i , j < T j , i T_{i,j} < T_{j,i} Ti,j<Tj,i 的满足条件,那么该条件即为贪心法则的完备条件
Johnson 法则
- 令 N 1 = { i ∣ a i < b i } N_1=\{i\ |\ a_i < b_i\} N1={ i ∣ ai<bi} , N 2 = { i ∣ a i ≥ b i } N_2=\{i\ |\ a_i \geq b_i\} N2={ i ∣ ai≥bi}
- 将 N 1 N_1 N1 中作业依照 a i a_i ai 增序排列, N 2 N_2 N2 中作业依 b i b_i bi 减序排列
- N 1 N_1 N1 中作业接 N 2 N_2 N2 中作业构成满足 Johnson 法则的最优调度
基于交换论证的 Johnson 法则证明
假设当前已完成了 k k k 件物品的加工,其序列如下:
a 1 , a 2 , a 3 , . . . a k a_1, a_2, a_3, ... a_k a1,a2,a3,...ak
b 1 , b 2 , b 3 , . . . b k b_1, b_2, b_3, ... b_k b1,b2,b3,...bk
定义 A i = ∑ i = 1 i a i A_{i} = \sum_{i=1}^ia_i Ai=∑i=1iai为工厂 A A A 加工完前 i i i 件物品所花时间, B i = m a x ( A i , B i − 1 ) + b i B_{i}=max(A_i,B_{i-1})+b_{i} Bi=max(Ai,Bi−1)+bi 为工厂 B B B 加工完成前 i i i 件物品所花时间,那么此时有 A k = ∑ i = 1 k a i A_{k}=\sum_{i=1}^{k}a_{i} Ak=