基於交換論證的 Johnson 法則證明
問題描述
某工廠有 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=∑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,Bi−1)+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,Bi−1)+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, ai≥c,理論上來說總時間 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,則需要考慮其順序的後效性,或者說是排序條件的傳遞性
相關文章
- Johnson法則
- 洛必達法則的證明與可用條件
- 03-論證基礎:論證成分的辨識
- 04-論證基礎:論證結構的梳理
- 02-論證基礎:論證的定義及構成
- 關於素數定理的證明
- 數論裡的尤拉定理,試證明
- 為什麼說TRIZ理論是基於本體論、認識論和自然辯證法產生的?
- 基於 TrueLicense 的專案證書驗證
- Note - 高斯消元法(證明略)
- 關於https 證明公開金鑰正確性的證書HTTP
- 論HPUX系統交換與偽交換UX
- 工業交換機的特點及涉及的主要認證
- 幽默:證明真人的新驗證碼
- 【認證與授權】2、基於session的認證方式Session
- Kubernetes客戶端認證——基於CA證書的雙向認證方式客戶端
- js正則驗證身份證號JS
- Kubernetes客戶端認證(二)—— 基於ServiceAccount的JWTToken認證客戶端JWT
- 如何證明所有自然數的和等於-1/12?
- 卡特蘭數關於凸多邊形的證明
- 基於Java語言構建區塊鏈(二)—— 工作量證明Java區塊鏈
- 基於案例分析 MySQL 許可權認證中的具體優先原則MySql
- 基於並查集的六度分隔理論的驗證與實現並查集
- sin/cos(α+β) 的展開證明
- 證明PyPy比Python更快的5個效能基準 - codexPython
- Chapter 4 證明技巧APT
- laravel: 常用的驗證規則Laravel
- 如何利用PMC保證交期?
- 基於CFSSL工具建立CA證書,服務端證書,客戶端證書服務端客戶端
- node實現基於token的身份驗證
- 05-論證基礎:綜合運用
- 證明:ThreadLocal的get,set方法無法防止記憶體洩漏thread記憶體
- OI 數論中的上界估計與時間複雜度證明時間複雜度
- java基礎變數的交換Java變數
- 卡方分佈定理的證明
- ACCESS 關於表設計中,驗證規則的使用技巧
- 手機號碼驗證方法(正則驗證)
- Javascript使用正則驗證身份證號(簡單)JavaScript