四边形不等式学习笔记

  四边形不等式是一种动态规划的优化方法,通常利用其来证明决策单调性,以优化动态规划的时间复杂度(减少枚举决策点的时间从而降一个时间维度)。  

  

一,四边形不等式:

前置说明:w(l,r)是区间[l,r]上的权值函数,可以理解为dp转移边上的边权,即转移一步的花费。

定义:

(1)区间包含单调性:若 llrrw(l,r)w(l,r),则称函数 w(l,r) 具备区间包含单调性。

(2)四边形不等式:若对任意的 l1l2r1r2w(l1,r1)+w(l2,r2)w(l1,r2)+w(l2,r1),则称函数 w(l,r) 满足四边形不等式。

四边形不等式判定定理:

  • 若对于任意 a<b 均有w(a,b)+w(a+1,b+1)w(a,b+1)+w(a+1,b),则函数 w(l,r) 满足四边形不等式。

证明(采用数学归纳法):

(1) 注意定义给出的条件a和a+1,b和b+1,说明:l1+1=l2r1+1=r2 成立时,函数 w 满足四边形不等式关系。

(2) 根据 (1) 来证明,当 l1+k=l2r1+1=r2 成立时,函数 w 仍满足四边形不等式关系。

 对于任意 a+1<cw(a,c)+w(a+1,c+1)w(a,c+1)+w(a+1,c)

 同时写出 w(a+1,c)+w(a+2,c+1)w(a+1,c+1)+w(a+2,c) ② 这里a+2=c都没关系了,一般w(i,i)都会设置为0或者其它特殊常数。

 ①+②得:w(a,c)+w(a+2,c+1)w(a,c+1)+w(a+2,c) 

 从而通过两个l1+1=l2的式子构建出l1+2=l2的式子,同理对于任意的正整数k,l1+k=l2都满足四边形不等式。

(3) 我们发现在上述构造过程中, l1+kl=l2r1+kr=r2 两个条件相互独立。所以通过(2)的证明,r1+k=r2也都满足四边形不等式。

最后,对于任意的 l1l2r1r2 都满足四边形不等式。

 

下面我们来探讨如何利用上面的四边形不等式来优化一些递推方程。 

 

二,一维线性DP优化

线性递推式:dpi=minj<i {dpj+w(j,i)} 注意w函数在min里面

  • 定理: w函数满足四边形不等式时,dp函数满足决策单调性。

一些假设:

 pidpi的决策点,pi1dpi1的决策点。

证明(采用反证法):

 pi是i的决策点,而pi1是i-1的决策点,我们要证明的是:pi1pi

 我们现在假设:pi<pi1<i1<i

 ① dppi+w(pi,i)dppi1+w(pi1,i) 因为pi是i的最小决策点。

 ② w(pi,i1)+w(pi1,i)w(pi,i)+w(pi1,i1) 这一步是根据w的四边形不等式。

 ①+②得:dppi+w(pi,i1)dppi1+w(pi,i1) 这说明 pi才是i-1的决策点,与假设相矛盾。

所以证明出如果pi1是i-1的决策点,pi是i的决策点,那么pi一定大于等于pi1

根据决策点的单调性,我们可以使用单调队列+二分快速得出决策点。

(1)例题:CF321E Ciel and Gondolas 使用wqs二分 + w函数四边形不等式的决策单调性 O(nlognlogW),W是值域。

(2)今天刷题刷到了一道:Teamwork LUOGUP5124 本来以为可以四边形不等式优化,结果G了,一开始以为转移一步的函数是满足四边形不等式的,结果写一下发现并不满足。。。就是:max[l,r](rl+1)+max[l+1,r+1](rl+1)max[l,r+1](rl+2)+max[l+1,r](rl)。在{1,1e9}这个数组里面就无法成立。。。。我是sb,还想了半天是不是笔记写错了。

(3)例题:H-Knapsack_2020ICPC·小米 网络选拔赛第二场 【题解】物品按w分类,分完类按v从大到小排序(假设数组为a),再做前缀和sum。使用多重背包的方式转移dp。然后w函数就是w(j,i)=sum[ij],显然有:w(j,i)+w(j+1,i+1)=2sum[ij]w(j,i+1)+w(j+1,i)=sum[ij+1]+sum[ij]a[ij]a[ij+1]。满足决策单调性。使用单调队列+二分的方式转移即可(或者使用分治)。【这道题有很多人直接先贪心再小范围01背包搞过去了,但是实际上是不对的-HACK

(4)例题:P5929 [POI1999]地图【这道题虽然可以暴力,但是仍然可以使用wqs二分+决策单调性解决】 提交记录

但是我还是想知道:为什么W(l,r)函数满足四边形不等式。可以想一下证明。 (我是暴力check出来的)

 

三,二维DP优化

类型一:区间递推DP Fl,r=minlk<r {Fl,k+Fk+1,r}+w(l,r) 

类型二:序列划分DP Fk,i=minj<i {Fk1,j+w(j,i)} k一般代表序列划分成k段 

首先直接给出2个定理:

  • 定理1:如果w函数满足1.区间包含单调性、2.四边形不等式,那么F函数满足四边形不等式
  • 定理2:如果F函数满足了四边形不等式,定义Pl,rF[l][r]的决策点,那么有: Pl,r1Pl,rPl+1,r

类型一的证明可以在OI-WIKI[参考资料(2)]找到,而且较详细,把关注点放在第二类。(参照文章底下[参考资料(1)]的证明过程)

类型二的四边形不等式感觉不如第一类那么直观,因为有一维表示划分了多少段,而另一维是序列[1:i]。(写到这里时,我还是不能直接理解)

先证明定理一:

假设函数w满足四边形不等式以及区间包含单调性,以及P[i][j]F[i][j]的最优决策点。

(1) 当i==j时,0+0=F[i][i]+F[i+1][i+1]F[i][i+1]+F[i+1][i]=F[i][i+1]+0(假设f[i][i]=0,且非法状态都是0)

(2) 当i<j时,设x=P[i][j+1],y=P[i+1][j],且分两种情况:

 第一种:i1xyjF[i][j]+F[i+1][j+1]F[i1][x]+W(x,j)+F[i][y]+W(y,j+1)F[i1][x]+W(x,j+1)+F[i][y]+W(y,j)=F[i][j+1]+F[i+1][j]

 第二种:iy<x<jF[i][j]+F[i+1][j+1]F[i1][y]+W(y,j)+F[i][x]+W(x,j+1)F[i1][y]+W(y,j+1)+F[i][x]+W(x,j)=F[i][j+1]+F[i+1][j]

 

 

参考资料:

(1)四边形不等式-a1b3c7d9 强推这篇,写得超级好

(2)OI-WIKI - 有较多的证明以及应用

(3)四边形不等式 Pedesis - 有些证明的思路较巧妙

(4)四边形不等式 罗勇军 

(5)四边形不等式学习笔记 - 学会打表验证

(6)赵爽的论文 

(7)四边形不等式讲解 

posted @   PigeonG  阅读(607)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示