DP優化
斜率優化
求\(f(i)=max\{f(j)+(s(i)-s(j))^2\}\),\(n\leq 10^6\).
其中\(\,s(x)\,\)是只和\(\,x\,\)有關的單調減函數,可以快速計算
顯然我們不能\(\,\Theta(n^2)\,\)暴力計算,考慮減少決策數,化簡得:
由於考慮優化決策,把\(\,j\,\)單獨提出:
考慮兩個決策\(\,j,k\,\)何時是\(\,j\,\)更優:
令
則
不難發現\(\,F(j),F(k),s(j),s(k),s(i)\,\)都是定值
對於每個決策\(\,j\,\),使其對應一個定點\(\,(s(j),F(j))\,\),則\(\,\frac{F(j)-F(k)}{s(j)-s(k)}\,\)為\(\,j,k\,\)間斜率
考慮維護斜率,畫圖手玩不難發現(我懶得畫圖),其實就是維護一個上凸包,如果是小於等於則是下凸包,關於如何維護,我們等會再講,先考慮答案的處理
注意到,對於最優的\(\,j\,\),有
其中\(\,s^2(i)\,\)是常數,可以忽略,設
設\(\,y=kx+b\,\)過點\(\,(0,-K(i)s(j)+y(j)),(s(j),y(j))\,\),聯立得
解得
發現這是不受決策影響的,而答案就是\(\,b\),要最大化\(\,b\,\)就是在凸包上找一個點使得其截距最大,顯然可以三分
接下來考慮如何維護凸包
對於新插入的點,由於\(\,s(j)\,\)的單調性,一定是在結尾處插入,又因為有\(2s(j)\)的單調性,所以現在更劣的解一定不會在將來被選到,形式化地,我們有:
故而對於新插入的點,我們只需要依次遍歷它之前的點,只到一個不可被刪去的點,簡單代換即可,證明如下:
可以發現,一個點只會被掃到\(\,\Theta(1)\,\)次,而凸包上找答案的復雜度是\(\,\Theta(log)\,\),所以總復雜度就是\(\,\Theta(n\log n)\,\)的
四邊形不等式
用途
大概是可以把一些\(\,\Theta(n^3)\,\)時間填\(\,\Theta(n^2)\,\)的表的dp的時間優化到\(\,\Theta(n^2)\,\)
定義
如果
那么二元函數\(\,w\,\)被稱為滿足四邊形不等式的
如果
那\(\,w\,\)被稱為區間單調的
定義拓展
當且僅當
\(w\,\)滿足四邊形不等式
證明如下:
明天再證
優化方案
對於一個形如\(f_{i,j}=min\{f_{i,k}+f_{k,j}+w_{i,j}\}\),令\(\,p_{i,j}\,\)表示\(\,f_{i,j}\,\)最優的決策點
不難證得:若\(\,w\,\)滿足四邊形不等式,那么\(\,f\,\)也滿足四邊形不等式
那么
利用決策單調性即可將時間優化至\(\,\Theta(n^2)\,\)
單調性的證明等我學會了就寫
