1D/1D动态规划的三种优化方法
1D/1D1D/1D1D/1D動態規劃
形如dp[i]=min{dp[j]+w(j,i)}(Li≤j≤Ri)dp[i]=min\{dp[j]+w(j,i)\} (L_i\leq j\leq R_i)dp[i]=min{dp[j]+w(j,i)}(Li?≤j≤Ri?) 的dpdpdp方程被稱作1D/1D1D/1D1D/1D動態規劃,其中LiL_iLi?和RiR_iRi?單調遞增,w(j,i)w(j,i)w(j,i)決定著優化策略選擇。
(dp[i]=max{dp[j]+w(j,i)}dp[i]=max\{dp[j]+w(j,i)\}dp[i]=max{dp[j]+w(j,i)}與dp[i]=min{dp[j]+w(j,i)}dp[i]=min\{dp[j]+w(j,i)\}dp[i]=min{dp[j]+w(j,i)}類似,本文不贅述)
決策單調性優化DP
決策單調性
設j0[i]j_0[i]j0?[i]表示dp[i]dp[i]dp[i]轉移的最優決策點,那么決策單調性可描述為 ?i≤j,j0[i]≤j0[j]\forall i\leq j,j_0[i]\leq j_0[j]?i≤j,j0?[i]≤j0?[j]。也就是說隨著iii的增大,所找到的最優決策點是遞增態(非嚴格遞增)。
四邊形不等式
表述1:
w(x,y)w(x,y)w(x,y)為定義在整數集合上的一個二元函數,若 ?a≤b≤c≤d,w(a,c)+w(b,d)≤w(a,d)+w(b,c)\forall a\leq b\leq c\leq d,w(a,c)+w(b,d)\leq w(a,d)+w(b,c)?a≤b≤c≤d,w(a,c)+w(b,d)≤w(a,d)+w(b,c),那么函數www滿足四邊形不等式。
表述2:
w(x,y)w(x,y)w(x,y)為定義在整數集合上的一個二元函數,若 ?a<b,w(a,b)+w(a+1,b+1)≤w(a+1,b)+w(a,b+1)\forall a<b,w(a,b)+w(a+1,b+1)\leq w(a+1,b)+w(a,b+1)?a<b,w(a,b)+w(a+1,b+1)≤w(a+1,b)+w(a,b+1),那么函數www滿足四邊形不等式。
定理:
1D/1D1D/1D1D/1D動態規劃具有決策單調性當且僅當函數www滿足四邊形不等式 時成立。
實現
單調隊列優化DP
形如dp[i]=min{dp[j]+A(i)+B(j)}dp[i]=min\{dp[j]+A(i)+B(j)\}dp[i]=min{dp[j]+A(i)+B(j)}的dpdpdp方程均可嘗試使用單調隊列優化。
實現
斜率優化DP
形如dp[i]=min{A(i)×B(j)+C(i)+D(j)}dp[i]=min\{A(i)\times B(j)+C(i)+D(j)\}dp[i]=min{A(i)×B(j)+C(i)+D(j)}的dpdpdp方程可嘗試使用斜率優化。
1.0 B(j)B(j)B(j)嚴格單調遞增
法一:線性規劃
考慮把 dp[i]=A(i)×B(j)+C(i)+D(j)dp[i]=A(i)\times B(j)+C(i)+D(j)dp[i]=A(i)×B(j)+C(i)+D(j) 化成y=kx+by=kx+by=kx+b的形式,其中y,xy,xy,x只與jjj有關,k,bk,bk,b只與iii有關,且 xxx嚴格單調遞增。
則有:
D(j)=?A(i)×B(j)+dp[i]?C(i)D(j)=-A(i)\times B(j)+dp[i]-C(i)D(j)=?A(i)×B(j)+dp[i]?C(i)
其中y=D(j),k=?A(i),x=B(j),b=dp[i]?C(i)y=D(j),k=-A(i),x=B(j),b=dp[i]-C(i)y=D(j),k=?A(i),x=B(j),b=dp[i]?C(i)
在平面直角坐標系上把所有的(xj,yj)(x_j,y_j)(xj?,yj?)(即(B(j),D(j))(B(j),D(j))(B(j),D(j)))標出來。
要令dp[i]dp[i]dp[i]最小,則要令bbb最小,即是要找到某一點(xj,yj)(x_j,y_j)(xj?,yj?),使斜率為kkk的直線經過該點時算出來的bbb最小。
發現只有 在給出點的下凸殼上的點可能成為最優決策點。
法二:代數法+數形結合
設j1,j2j_1,j_2j1?,j2? (0≤j1<j2<i)(0\leq j_1<j_2<i)(0≤j1?<j2?<i) 為dp[i]dp[i]dp[i]的兩個決策點,且決策點j2j_2j2?優于j1j_1j1?,則有:
A(i)×B(j2)+C(i)+D(j2)≤A(i)×B(j1)+C(i)+D(j1)A(i)\times B(j_2)+C(i)+D(j_2)\leq A(i)\times B(j_1)+C(i)+D(j_1)A(i)×B(j2?)+C(i)+D(j2?)≤A(i)×B(j1?)+C(i)+D(j1?)
化簡式子,使不等號左邊只與iii有關,不等號右邊只與j1,j2j_1,j_2j1?,j2?有關:
A(i)≤?D(j2)?D(j1)B(j2)?B(j1)A(i)\leq -\frac{D(j_2)-D(j_1)}{B(j_2)-B(j_1)}A(i)≤?B(j2?)?B(j1?)D(j2?)?D(j1?)?
?A(i)≥D(j2)?D(j1)B(j2)?B(j1)-A(i)\geq \frac{D(j_2)-D(j_1)}{B(j_2)-B(j_1)}?A(i)≥B(j2?)?B(j1?)D(j2?)?D(j1?)?
設xj=B(j),yj=D(j)x_j=B(j),y_j=D(j)xj?=B(j),yj?=D(j),則D(j2)?D(j1)B(j2)?B(j1)\frac{D(j_2)-D(j_1)}{B(j_2)-B(j_1)}B(j2?)?B(j1?)D(j2?)?D(j1?)?可以看作Pj1(xj1,yj1)P_{j_1}(x_{j_1},y_{j_1})Pj1??(xj1??,yj1??),Pj2(xj2,yj2)P_{j_2}(x_{j_2},y_{j_2})Pj2??(xj2??,yj2??)兩點連線的斜率。
也就是說,如果存在兩個決策點j1,j2j_1,j_2j1?,j2?滿足0≤j1<j2<i0\leq j_1<j_2<i0≤j1?<j2?<i,使得Pj1P_{j_1}Pj1??,Pj2P_{j_2}Pj2??兩點連線的斜率≤?A(i)\leq -A(i)≤?A(i),那么決策點j2j_2j2?優于j1j_1j1?。
于是,對于這樣子的三個點,可證BBB一定不是最優決策點。
我們可以將BBB從候選決策點中踢出去(刪除),只留下AAA和CCC,刪后的情況如下圖所示:
最終,我們維護的候選決策點應該構成了一個下凸殼:
實現
進一步優化
若k0(i)=?A(i),B(j)k_0(i)=-A(i),B(j)k0?(i)=?A(i),B(j)均單調不減,則該dpdpdp方程必定有決策單調性。那么就不需要在凸殼上二分找最優決策點了。
總結
以上是生活随笔為你收集整理的1D/1D动态规划的三种优化方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图论复习汇总
- 下一篇: 发力5G平板市场,品网科技首发展锐5G平