sb的斜率優化筆記

參考資料


[HNOI2008]玩具裝箱

設 S[i] = Σ1≤i≤n (C[i] + 1), 設狀態 dp[i] 表示裝好前 i 個, 值爲最小花費, 則轉移爲:
dp[i] = min0≤j<i {dp[j] + (S[i]-S[j]-1-L)2} 。

化簡 (S[i]-S[j]-1-L)2 :將常量 L 加一, 變成 (S[i]-S[j]-L)2, 而後變成 S[i]2 + (S[j] + L)2 - 2S[i]S[j] - 2S[i]L。

最後方程化簡爲 :dp[i] = min0≤j<i {dp[j] + S[i]2 + (S[j] + L)2 - 2S[i]S[j] - 2S[i]L} , 是 dp[i] = min/max {a(i) + b(j) + c(i) × d(j)} 的形式。

看上去很 NB 的代數法

考慮 dp[i] 的兩個決策點 j1 < j2, 假設 j2 優於 j1, 可得:

(-2S[i]S[j2]) + (dp[j2] + (S[j2] + L)2) ≤ (-2S[i]S[j1]) + (dp[j1] + (S[j1] + L)2)

繼續化簡:

-2S[i] (S[j2] - S[j1]) ≤ (dp[j1] + (S[j1] + L)2) - (dp[j2] + (S[j2] + L)2)

由於 S[j2] > S[j1], 故可除:

2S[i] ≥ \(\dfrac{(dp[j_2]+(S[j_2]+L)^2) - (dp[j_1]+(S[j_1]+L)^2)}{S[j_2]-S[j_1]}\)

若有 j2 > j1, 就可以通過判斷這個東西是否成立來判斷 j2 這個決策點是不是優於 j1 這個決策點。

然後設 X(i) = S[i], Y(i) = dp[i] + (S[i] + L)2, 再設 P(i) = (X(i), Y(i)) (平面直角座標系上的一個點), 問題就是在平面直角座標系上的一個斜率判定問題。

考慮一個只有三個點的上凸包, 可知不論怎樣,用上面那個結論可觀測到的有效決策集合是原決策集合的下凸包。具體推理見參考資料

線性規劃法

複習下形式:dp[i] = min/max {a(i) + b(j) + c(i) × d(j)}

這種線性規劃法就是把某個決策點 j 的轉移,即 dp[i] = a(i) + b(j) + c(i) × d(j), 在某個來自西方的神祕二維結構(即平面直角座標系)上以某種方式展開, 然後轉化爲在這個二維結構上的最優化問題。

具體地, 先將除了 dp[i] 的東西以 ' 標示之, 記爲常量:

dp[i] = a(i)' + b(j) + c(i)' × d(j)

然後將式子化成:

b(j) = -c(i)' × d(j) - a(i)' + dp[i]

然後現在的問題就是將所有決策點看成 (d(j),b(j)), 然後把一個斜率爲 -c(i)' 的直線對齊每個點, 找出最小的截距。

發現上凸包是不存在的, 維護決策點的下凸包即可。

兩種方法的評價

線性規劃 >>> 代數法,降維打擊!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章