基於交換論證的 Johnson 法則證明

CUG_YZL發表於2021-01-02

問題描述

某工廠有 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 法則

  1. 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  aibi}
  2. N 1 N_1 N1 中作業依照 a i a_i ai 增序排列, N 2 N_2 N2 中作業依 b i b_i bi 減序排列
  3. 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,Bi1)+bi 為工廠 B B B 加工完成前 i i i 件物品所花時間,那麼此時有 A k = ∑ i = 1 k a i A_{k}=\sum_{i=1}^{k}a_{i} Ak=i=1kai B k = m a x ( A i , B i − 1 ) + b k B_{k}=max(A_{i},B_{i-1})+b_{k} Bk=max(Ai,Bi1)+bk

根據交換論證的步驟,接下來需要討論加工順序為 x , y x,y x,y y , x y, x y,x 所花時間的大小關係

設此時先加工第 x x x 件物品所花時間為 B x = m a x ( A k + a x , B k ) + b x B_{x} = max(A_{k}+a_{x},B_{k})+b_{x} Bx=max(Ak+ax,Bk)+bx,先加工第 y y y 件物品所花時間為 B y = m a x ( A k + a y , B k ) + b y B_{y} = max(A_{k}+a_{y},B_{k})+b_{y} By=max(Ak+ay,Bk)+by,則有:

B x , y = m a x ( A k + a x + a y , m a x ( A k + a x , B k ) + b x ) + b y B_{x,y}=max(A_{k}+a_{x}+a_{y},max(A_{k}+a_{x}, B_{k})+b_{x}) + b_{y} Bx,y=max(Ak+ax+ay,max(Ak+ax,Bk)+bx)+by
B y , x = m a x ( A k + a x + a y , m a x ( A k + a y , B k ) + b y ) + b x B_{y,x}=max(A_{k}+a_{x}+a_{y},max(A_{k}+a_{y}, B_{k})+b_{y}) + b_{x} By,x=max(Ak+ax+ay,max(Ak+ay,Bk)+by)+bx

將上式中的 b x b_x bx b y b_{y} by 移入 m a x max max 內部,得:

B x , y = m a x ( A k + a x + a y + b y , A k + a x + b x + b y , B k + b x + b y ) B_{x,y}=max(A_{k}+a_{x}+a_{y}+ b_{y},A_{k}+a_{x}+b_{x}+ b_{y}, B_{k}+b_{x}+ b_{y}) Bx,y=max(Ak+ax+ay+by,Ak+ax+bx+by,Bk+bx+by)
B y , x = m a x ( A k + a x + a y + b x , A k + a y + b x + b y , B k + b x + b y ) B_{y,x}=max(A_{k}+a_{x}+a_{y}+ b_{x},A_{k}+a_{y}+b_{x}+ b_{y}, B_{k}+b_{x}+ b_{y}) By,x=max(Ak+ax+ay+bx,Ak+ay+bx+by,Bk+bx+by)

顯然當 B k + b x + b y B_{k}+b_{x}+ b_{y} Bk+bx+by 為最大值時對答案沒有影響,故將其剔除

B x , y = m a x ( A k + a x + a y + b y , A k + a x + b x + b y ) = A k + a x + b y + m a x ( a y , b x ) B_{x,y}=max(A_{k}+a_{x}+a_{y}+ b_{y},A_{k}+a_{x}+b_{x}+ b_{y})=A_{k}+a_{x}+b_{y}+max(a_{y}, b_{x}) Bx,y=max(Ak+ax+ay+by,Ak+ax+bx+by)=Ak+ax+by+max(ay,bx)
B y , x = m a x ( A k + a x + a y + b x , A k + a y + b x + b y ) = A k + a y + b x + m a x ( a x , b y ) B_{y,x}=max(A_{k}+a_{x}+a_{y}+ b_{x},A_{k}+a_{y}+b_{x}+ b_{y})=A_{k}+a_{y}+b_{x}+max(a_{x}, b_{y}) By,x=max(Ak+ax+ay+bx,Ak+ay+bx+by)=Ak+ay+bx+max(ax,by)

不妨設 B x , y < B y , x B_{x,y} < B_{y, x} Bx,y<By,x,則有:
A k + a x + b y + m a x ( a y , b x ) < A k + a y + b x + m a x ( a x , b y ) A_{k}+a_{x}+b_{y}+max(a_{y}, b_{x}) < A_{k}+a_{y}+b_{x}+max(a_{x}, b_{y}) Ak+ax+by+max(ay,bx)<Ak+ay+bx+max(ax,by)
a x + b y + m a x ( a y , b x ) < a y + b x + m a x ( a x , b y ) a_{x}+b_{y}+max(a_{y}, b_{x})<a_{y}+b_{x}+max(a_{x}, b_{y}) ax+by+max(ay,bx)<ay+bx+max(ax,by)
m a x ( − b x , − a y ) < m a x ( − b y , − a x ) max(-b_{x}, -a_{y})<max(-b_{y}, -a_{x}) max(bx,ay)<max(by,ax)
m i n ( b x , a y ) > m i n ( b y , a x ) min(b_{x}, a_{y})>min(b_{y}, a_{x}) min(bx,ay)>min(by,ax)

即當物品 x x x 和物品 y y y 滿足 m i n ( b x , a y ) > m i n ( b y , a x ) min(b_{x}, a_{y})>min(b_{y}, a_{x}) min(bx,ay)>min(by,ax) 條件時, B x , y < B y , x B_{x,y} < B_{y,x} Bx,y<By,x

但是該條件是不完備的,即該條件不滿足傳遞性,若此時 m i n ( b x , a y ) = m i n ( b y , a x ) min(b_{x}, a_{y})=min(b_{y}, a_{x}) min(bx,ay)=min(by,ax),則理論上 B x , y = B y , x B_{x,y}=B_{y,x} Bx,y=By,x,事實上也確實如此,但是由於 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,Bi1)+bi,所以 a i a_{i} ai 的字首和 A i A_{i} Ai 對於後續答案的統計是有影響的,出現這種情況的根源在於推導式子時正確的傳遞條件應當在 m i n ( b x , a y ) = m i n ( b y , a x ) min(b_{x}, a_{y})=min(b_{y}, a_{x}) min(bx,ay)=min(by,ax) 的條件下繼續判斷 a i a_{i} ai 的大小,以滿足排序條件的傳遞性

下面這組例子可以幫助理解:

3
2 100 3
1 1 1

這三件物品根據判斷條件來看是等價的,但是其加工順序不一樣會導致結果不一樣

再舉一個例子,假設此時 ∀ i ∈ [ 1 , n ] , b i = c ,   a i ≥ c \forall i \in [1, n],b_{i}=c,\ a_{i}\geq c i[1,n],bi=c, aic,理論上來說總時間 B n = A n + c B_{n}=A_{n}+c Bn=An+c 並且有 B i = A i + c B_{i}=A_{i}+c Bi=Ai+c,但若此時 a i a_{i} ai 為無窮大,則會導致 A A A 工廠流水線阻塞,為了避免這種情況或者說為了使得對於 ∀ i ∈ [ 1 , n ] , B i = A i + c \forall i \in [1, n],B_{i}=A_{i}+c i[1,n],Bi=Ai+c,我們顯然需要將 a i a_{i} ai 小的先行加工

那麼問題究竟出在了哪裡呢?

在上述推導中顯然我們只考慮了兩件物品的先後關係,若每兩件物品均滿足 B x , y < B y , x B_{x,y} < B_{y,x} Bx,y<By,x 的優先關係,稱任意兩件物品具有可比性,若 ∃ x , y , B x , y = B y , x \exists x,y,B_{x,y} = B_{y,x} x,y,Bx,y=By,x,則需要考慮其順序的後效性,或者說是排序條件的傳遞性

相關文章