zoukankan      html  css  js  c++  java
  • 四边形不等式与决策单调

    四边形不等式与决策单调

    四边形不等式

    定义

    存在二元函数(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的优化

    转移模型

    [f[i]=min_{0≤j<i}{f[j]+w(j,i)},w满足四边形不等式 ]

    证明:

    设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。

    1. 掐头,若(r=i-1),弹出,否则(l=i)

    2. 取队首计算

    3. 去尾,

      如果决策i在l处都比p优秀,则直接弹出p。

      如果决策i在r处都不如p优秀,则直接插入p。

      否则二分查找l~r中第一个可以让决策点i更优秀的位置

      更改队尾r,把新的三元组代表i的决策加入队列(注意有可能不能加入)

    可以实现(O(n^2) o O(nlog_n))

    二维区间递推优化

    转移模型

    [f[l][r]=min_{l≤k<r}{f[l][k]+f[k+1][r]+w[l][r]}\ f[i][j]=min_{0≤k<i}{f[i-1][k]+w(k+1,j)}\ …… ]

    定理:

    没有证明。。

    一:若对于上式中的w有

    ​ ①w满足四边形不等式

    ​ ②对于任意的(a,b,c,din I且a≤b≤c≤d) ,w满足(w(a,d)≥w(b,c))

    ​ 则f满足四边形不等式。

    二:若f满足四边形不等式,则:

    ​ 对于任意决策(i<j),都有下列二者之一:

    [p[i,j-1]≤p[i,j]≤p[i+1,j] (转移中i倒序枚举,j正序枚举)\ p[i-1,j]≤p[i,j]≤p[i,j+1j] (转移中i正序枚举,j倒序枚举)\ p为各个状态的最优决策 ]

    实现

    一般而言,都是直接把第三重循环的边界依情况改成上面的二式之一即可。

    可以实现(O(n^3) o O(n^2))

    对于此类优化,一般先大胆猜想,然后打表验证!!

  • 相关阅读:
    从开心网的奴隶安抚与折磨想到员工积极性与人力成本的问题
    悲剧的做网站的,我们都没有认真的前行
    如何做生意
    Android Market中产品图标设计原则
    控制UpdataPanel中的GridView模板列控件同步刷新
    DataTable筛选
    IE6,7,8,FF兼容总结
    DevPress Grid 设置行样式
    SQL分组查询
    DevexPress checkedit 多选解决方案(原创)
  • 原文地址:https://www.cnblogs.com/Bhllx/p/11006308.html
Copyright © 2011-2022 走看看