四边形不等式与决策单调
四边形不等式
定义
存在二元函数(w(x,y)) ,其定义域为(I),
若对于任意(a,b,c,din I且a≤b≤c≤d),(w(a,d)+w(b,c)≥w(a,c)+w(b,d))恒成立
则称(w)满足四边形不等式。
判定定理
若对于任意(a,bin I且a<b),(w(a,b+1)+w(a+1,b)≥w(a,b)+w(a+1,b+1))恒成立
则w满足四边形不等式。
可以感性理解一下吧:(a<biff a<a+1≤b<b+1),只有等号问题并不影响。
一维线性DP的优化
转移模型
证明:
设k,k′为(f[i])的决策点并满足条件(0≤k′<k<i<i′)′
不难得知
(f[i]=f[k]+w(k,i)≤f[k′]+w(k′,i))
由四边形不等式得知
(w(k′,i′)+w(k,i)≥w(k′,i)+w(k,i′))
两式相加有
(f[k]+w(k,i′)≤f[k′]+w(k′,i′))
于是易知决策点k比k′更优,故得证。
实现
当前转移(f[i]),单调队列维护三元组((l,r,p)),表示l~r的最优决策点目前为p。
-
掐头,若(r=i-1),弹出,否则(l=i)
-
取队首计算
-
去尾,
如果决策i在l处都比p优秀,则直接弹出p。
如果决策i在r处都不如p优秀,则直接插入p。
否则二分查找l~r中第一个可以让决策点i更优秀的位置
更改队尾r,把新的三元组代表i的决策加入队列(注意有可能不能加入)
可以实现(O(n^2) o O(nlog_n)) 。
二维区间递推优化
转移模型
定理:
没有证明。。
一:若对于上式中的w有
①w满足四边形不等式
②对于任意的(a,b,c,din I且a≤b≤c≤d) ,w满足(w(a,d)≥w(b,c))
则f满足四边形不等式。
二:若f满足四边形不等式,则:
对于任意决策(i<j),都有下列二者之一:
实现
一般而言,都是直接把第三重循环的边界依情况改成上面的二式之一即可。
可以实现(O(n^3) o O(n^2)) 。
对于此类优化,一般先大胆猜想,然后打表验证!!