【斜率优化】【决策单调】xjb讲课
大佬們要讓蒟蒻給他們講斜率優(yōu)化 …….(色色發(fā)抖
斜率優(yōu)化是什么呢,先看點(diǎn)沒用的東西。
考慮一類動(dòng)態(tài)規(guī)劃,滿足這樣的性質(zhì):
狀態(tài)數(shù)有n個(gè),一個(gè)狀態(tài)的決策數(shù)有n個(gè)
形似f[i]=♂i1f[j]定義♂為亂七八糟的運(yùn)算
這樣的dp有什么好的性質(zhì)呢???
首先考慮這樣一種 子類型
當(dāng)對(duì)于一個(gè)w[j,i]滿足四邊形不等式的時(shí)候,決策單調(diào)
那么我們首先來說什么叫四邊形不等式
w[i,j]+w[i+1,j+1]≤w[i+1,j]+w[i,j+1]
是不是一臉蒙蔽?
其實(shí)是網(wǎng)上的柿子非得撞壁,寫成這個(gè)13樣,不信你移個(gè)項(xiàng)
w[i+1,j+1]?w[i+1,j]≤w[i,j+1]?w[i,j]
就是這樣的,對(duì)于i+1狀態(tài)的決策集,j位置決策的增長(zhǎng)幅度不如在i位置的決策集中j+1位置的增長(zhǎng)幅度大
顯然這意味著,如果一個(gè)決策在i位置就已經(jīng)被淘汰,無論他怎么跑,都追不上其他在i+1位置的決策了,所以有這樣的性質(zhì)
對(duì)于狀態(tài)x的兩個(gè)決策位置 i≤j 如果i不如j優(yōu),則對(duì)x+1必然不選擇i
這有啥用啊?就是把你原來從1枚舉變成從x?1決策點(diǎn)枚舉了??
還是暴力,有個(gè)卵用?
那我們換一個(gè)角度思考,之前都是對(duì)狀態(tài)想決策,現(xiàn)在變成對(duì)決策想狀態(tài)。
對(duì)于一個(gè)決策j能決策的狀態(tài)區(qū)間是什么,一定是狀態(tài)集中的一段連續(xù)的區(qū)間
所以我們可以考慮這樣一個(gè)問題,(以下數(shù)字表示決策點(diǎn)位置編號(hào))
對(duì)于決策1有這樣的決策區(qū)間
1111111111
對(duì)于決策2來了,他一定決策這樣的區(qū)間
1111122222
以此類推
所以我們對(duì)每個(gè)決策點(diǎn)決策區(qū)間維護(hù)單調(diào)棧,每來一個(gè)決策,就在單調(diào)棧中二分決策點(diǎn)變化位置,彈掉后面的區(qū)間,拆開當(dāng)前區(qū)間即可
廢話說完了
斜率優(yōu)化是個(gè)啥???
考慮這樣另一種形式的子類型
美化以下柿子
f[i]=mini?1j=1(a[i]?x[j]+b[i]?y[j])
求 a?x+b?y的最值?
變成斜截式 y=?ba?x+Pb
現(xiàn)在一個(gè)決策點(diǎn)變成了一個(gè)數(shù)對(duì), (x,y)
問題轉(zhuǎn)化成了給定一些斜率固定的直線,以及二維平面上的點(diǎn)集
求一條直線在平面上穿過某一點(diǎn)使得與y軸截距最值
直線方程?線性規(guī)劃??
顯然是卡在凸包上的最優(yōu)啊
下面分情況討論
如果 x是遞增的,斜率也是遞增的
就相當(dāng)于一邊向后插點(diǎn)維護(hù)凸包,一邊在前面用直線卡掉不合法的點(diǎn)
顯然單調(diào)隊(duì)列,隊(duì)尾插點(diǎn),隊(duì)頭按直線彈掉,時(shí)間復(fù)雜度O(n)。
如果x遞增,斜率不遞增,就要正常維護(hù)凸包,在凸包上二分找到直線卡的點(diǎn)位置。
時(shí)間復(fù)雜度 O(n?log2n)
如果x和斜率都不遞增,用平衡樹維護(hù)凸包,動(dòng)態(tài)插點(diǎn),刪點(diǎn),反正我不會(huì)寫。
可寫的方法是cdq,對(duì)x進(jìn)行cdq,左右分別維護(hù)凸包, O(n)合并凸包。
時(shí)間復(fù)雜度 O(n?log2n)
總結(jié)
以上是生活随笔為你收集整理的【斜率优化】【决策单调】xjb讲课的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万向节锁--简单解释
- 下一篇: 如何快速解决Unity中万向节死锁(gi