DP优化
通常來說從決策數量上來優化Dp有以下幾種方法:
斜率優化
用于優化帶多項式的乘積項的狀態轉移方程,即f[i]=min/max{f[j]+(x[i]-x[j])^2} 這樣的,
我們把他展開可以得到f[i]=min/max{f[j]+x[i]^2+x[j]^2-2*x[i]*x[j]}?
根據動規方程狀態i從狀態j轉化而來,
我們可以化成類似f[i]=(f[j]+…)+(-i*f[i-1]*f[j])+(i+…)的形式?
其中藍色部分只與j有關,紅色部分與i,j有關,綠色部分只與i或常數有關?
我們可以固定i,故變形為?
f[i]-i-…=(f[j]+…)+(-i*f[i-1]*f[j])?
考慮幾何意義,?
令藍色部分為y,紅色部分中的i部分為導數k,紅色部分中j部分為x,綠色部分只是常數,在幾何意義上只是截距,與單調性無關,可以設為B?
故得y=kx-B?
這樣就可以利用線性規劃來做了,
容易發現無論一次函數的斜率怎么變,截距最小時取的點一定是那所有點求出的下凸殼上的某一個點。 因此我們只要每次在上邊尋找最優解,然后加點時維護這個下凸殼即可。 根據斜率和(x,y)的單調性不同有不同的維護方法。
四邊形不等式優化
下面我們通過四邊形不等式來優化上述方程,首先介紹什么是”區間包含的單調性“和”四邊形不等式“
(1)區間包含的單調性:如果對于i≤i'<j≤j',有w(i',j)≤w(i,j'),那么說明w具有區間包含的單調性。(可以形象理解為如果小區間包含于大區間中,那么小區間的w值不超過大區間的w值)
(2)四邊形不等式:如果對于i≤i'<j≤j',有w(i,j)+w(i',j')≤w(i',j)+w(i,j'),我們稱函數w滿足四邊形不等式。(可以形象理解為兩個交錯區間的w的和不超過小區間與大區間的w的和)
下面給出兩個定理
定理一:如果上述的w函數同時滿足區間包含單調性和四邊形不等式性質,那么函數m也滿足四邊形不等式性質。
?
我們再定義s(i,j)表示m(i,j)取得最優值時對應的下標(即i≤k≤j時,k處的w值最大,則s(i,j)=k)。此時有如下定理
定理二:假如m(i,j)滿足四邊形不等式,那么s(i,j)單調,即s(i,j)≤s(i,j+1)≤s(i+1,j+1)。
?
好了,有了上述的兩個定理后,我們發現如果w函數滿足區間包含單調性和四邊形不等式性質,那么有s(i,j-1)≤s(i,j)≤s(i+1,j)。即原來的狀態轉移方程可以改寫為下式:
m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)(s(i,j-1)≤k≤s(i+1,j))(min也可以改為max)
由于這個狀態轉移方程枚舉的是區間長度L=j-i,而s(i,j-1)和s(i+1,j)的長度為L-1,是之間已經計算過的,可以直接調用。不僅如此,區間的長度最多有n個,對于固定的長度L,不同的狀態也有n個,故時間復雜度為O(N^2),而原來的時間復雜度為O(N^3),實現了優化!今后只需要根據方程的形式以及w函數是否滿足兩條性質即可考慮使用四邊形不等式來優化了。
?
?
?
轉載于:https://www.cnblogs.com/2020pengxiyue/p/9348530.html
總結
- 上一篇: html布局(盒子)
- 下一篇: Linux之部署虚拟环境、安装系统