四边形不等式小结

前言

我真的是愚不可及,为什么学这个东西,我本身又不强,而这个东西不但特别难,而且还特别冷门,我真的是白瞎了这么多时间了,现在我把我的辛苦展现出来,给各位强者铺个道路。

四边形不等式

(以下所有的自变量的讨论均在整数范围内,设w(a,b)为关于a,b的二元函数)

定义

若二元函数满足当abcd,w(a,d)+w(b,c)w(a,c)+w(b,d),则称二元函数满足四变形不等式。

四边形不等式判定定理

a<b,w(a,b+1)+w(a+1,b)w(a,b)+w(a+1,b+1),则二元函数w满足四变形不等式。

证明:

对于a<c,一定有

w(a,c+1)+w(a+1,c)w(a,c)+w(a+1,c+1)

假设a+k<c,会有

w(a+k,c+1)+w(a+k+1,c)w(a+k,c)+w(a+k+1,c+1)

同理a+k+1<c,有

w(a+k+1,c+1)+w(a+k+2,c)w(a+k+1,c)+w(a+k+2,c+1)

两式相加有

w(a+k,c+1)+w(a+k+2,c)w(a+k,c)+w(a+k+2,c+1)

于是由数学归纳法,加之a,b可以取等号,有

abc,w(a,c+1)+w(b,c)w(a,c)+w(b,c+1)

同理,对于

ab<c+k,有

w(a,c+k+1)+w(b,c+k)w(a,c+k)+w(b,c+k+1)

至于ab<c+k+1

w(a,c+k+2)+w(b,c+k+1)w(a,c+k+1)+w(b,c+k+2)

两式相加有

w(a,c+k+2)+w(b,c+k)w(a,c+k)+w(b,c+k+2)

由数学归纳法,加之c,d可以取等号,有

abcd,w(a,d)+w(b,c)w(a,c)+w(b,d)

得证

推论:

  1. 对于bal满足判定定理要求,那么对于abcd,当dal+1时满足四边形不等式,根据证明来证明。
  2. 判定定理的逆定理:满足四边形不等式的二元函数满足a<b,w(a+1,b)+w(a,b+1)w(a,b)+w(a+1,b+1),有兴趣可以自行证明。

一维线性递推优化

优化式

fi=min0j<i{fj+w(j,i)}

性质

一维线性递推决策递增定理

定义

方程fi=min0j<i{fj+w(j,i)}w满足四边形不等式,则决策点单调递增

证明

k,kfi的决策点并满足条件0k<k<i<i,其中k为i的最优决策点

不难得知

fi=fk+w(k,i)fk+w(k,i)

由四边形不等式得知

w(k,i)+w(k,i)w(k,i)+w(k,i)

两式相加有

fk+w(k,i)fk+w(k,i)

于是易知决策点kk更优,故得证。

推论:如果一个决策点a比它之前的一个决策点b优秀,则决策点b不可能成为以后的最优决策点(二分依据)。

实现

目前要求fi

  1. 单调队列维护三元组(l,r,p),表示flr的最优决策点目前最优是p
  2. 队头是否合法,即l<r,否则弹出
  3. 取队头l++,计算fl最优解
  4. 从队尾向前枚举,如果计算fk(k为队尾的l)的已有决策点不如现在的决策点l优秀,弹出
  5. 否则二分查找lr中第一个可以让决策点i更优秀的位置
  6. 更改队尾r,把新的三元组代表i的决策加入队列(注意,如果不能加入,一定要剔除)

二维递推优化

优化式

  1. f[l][r]=minlk<r{f[l][k]+f[k+1][r]+w[l][r]}(区间递推)
  2. f[i][j]=mini1k<j{f[i1][k]+w[k+1][j]}(序列划分)

包含单调

如果二元函数w满足abcd,w(a,d)w(b,c),则称二元函数w满足包含单调。

二维递推判定定理

定义

对于上述优化式,如果满足

  1. 二元函数w满足四边形不等式
  2. 二元函数w满足包含单调
  3. 边界w(i,i)=f[i][i]=0

则f满足四边形不等式。

证明

优化式1

对于ji=1而言,显然有f[i][j]=f[i][i]+f[j][j]+w[i][j]

根据判定定理来证明,i<j,要证明f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1]

f[i][j+1]+f[i+1][j]=f[i][j+1]


  • f[i][j+1]最优决策点在i

那么有f[i][j+1]=f[i][i]+f[i+1][j+1]+w[i][j+1]=f[i+1][j+1]+w[i][j+1]w[i][j]+f[i+1][j+1]

=f[i][j]+f[i+1][j+1],即i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1]

  • f[i][j+1]最优决策点在i+1

那么有f[i][j+1]=f[i][i+1]+f[i+1][j]+w[i][j+1]=f[i][j]+w[i][j+1]f[i][j]+w[i+1][j+1]=

f[i][j]+f[i+1][j+1],即i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1]


总上所素,j-i=1时满足四边形不等式

至于ji=l,假设ji<l满足四边形不等式,则要证

i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1]

不妨设f[i][j+1]最优决策点为x,f[i+1][j]最优决策点为y


  • xy

f[i][j+1]+f[i+1][j]=f[i][x]+f[x+1][j+1]+w[i][j+1]+f[i+1][y]+f[y+1][j]+w[i+1][j]

f[i][j]+f[i+1][j+1]f[i][x]+f[x+1][j]+w[i][j]+f[i+1][y]+f[y+1][j+1]+w[i+1][j+1]

显然我们有i<j,w[i][j+1]+w[i+1][j]w[i][j]+w[i+1][j+1]

显然x+1y+1j<j+1,因此我们有

f[x+1][j+1]+f[y+1][j]f[x+1][j]+f[y+1][j+1]

于是不难得知i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1]

  • x>y

同理

f[i][j+1]+f[i+1][j]=f[i][x]+f[x+1][j+1]+w[i][j+1]+f[i+1][y]+f[y+1][j]+w[i+1][j]

f[i][j]+f[i+1][j+1]f[i][y]+f[y+1][j]+w[i][j]+f[i+1][x]+f[x+1][j+1]+w[i+1][j+1]

显然有i<j,w[i][j+1]+w[i+1][j]w[i][j]+w[i+1][j+1]

i<i+1y<x,f[i][x]+f[i+1][y]f[i][y]+f[i+1][x]

因此i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1]


总上所素,根据数学归纳法易知i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1],又有四边形不等式判定定理容易知道,f满足四边形不等式。

优化式2

对于ji=0

现在需要证明f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1],

即证f[i][i+1]+f[i+1][i]f[i][i]+f[i+1][i+1]

f[i][i+1]+f[i+1][i]0,不妨将非法决策定义为0,于是即证f[i][i+1]0,显然成立

至于ji=l,假设ji<l满足四边形不等式,那么要证

i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1]

f[i][j+1]最优决策点为x,f[i+1][j]最优决策点为y

易知f[i][j+1]+f[i+1][j]=f[i1][x]+w[x+1][j+1]+f[i][y]+w[y+1][j]


  • xyi1xy<j

显然f[i][j]+f[i+1][j+1]f[i1][x]+w[x+1][j]+f[i][y]+w[y+1][j+1]

x+1<y+1j<j+1,w[x+1][j+1]+w[y+1][j]w[x+1][j]+w[y+1][j+1]

i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1]

  • x>yiy<xj

显然f[i][j]+f[i+1][j+1]f[i1][y]+w[y+1][j]+f[i][x]+w[x+1][j+1]

i1<iy<x,f[i1][x]+f[i][y]f[i1][y]+f[i][x]

i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1]


所以由数学归纳法i<j,f[i][j+1]+f[i+1][j]f[i][j]+f[i+1][j+1],结合四边形不等式判定定理,不难得知原命题成立。

二维递推决策递增定理

定义

若上诉优化式满足判定定理,设p[i][j]f[i][j]的最优决策点,则有p[l][r1]p[l][r]p[l+1][r]

证明

优化式1

  • p[l][r1]p[l][r]

设左式最优决策点k,并设lk<k<r1,所以我们有

f[l][r1]=f[l][k]+f[k+1][r1]+w[l][r1]

f[l][k]+f[k+1][r1]+w[l][r1]

f[l][k]+f[k+1][r1]f[l][k]+f[k+1][r1].....1

由四边形不等式有

l<k+1<k+1r1<r

f[k+1][r]+f[k+1][r1]f[k+1][r1]+f[k+1][r].....2

1,2式相加,有

f[l][k]+f[k+1][r]f[l][k]+f[k+1][r]

f[l][k]+f[k+1][r]+w[l][r]f[l][k]+f[k+1][r]+w[l][r]

所以易知决策点k比k优秀,得证

  • p[l][r]p[l+1][r]

设右式的最优决策点为k,设lk<k<r

显然l<l+1k<k,f[l][k]+f[l+1][k]f[l][k]+f[l+1][k] ......1

f[l+1][r]=f[l+1][k]+f[k+1][r]+w[l+1][r]f[l+1][k]+f[k+1][r]+w[l+1][r]

f[l+1][k]+f[k+1][r]f[l+1][k]+f[k+1][r] ......2

1式+2式我们有
f[l][k]+f[k+1][r]f[l][k]+f[k+1][r],即

f[l][k]+f[k+1][r]+w[l][r]f[l][k]+f[k+1][r]+w[l][r]

  • 总上所素,有p[l][r1]p[l][r]p[l+1][r]

优化式2

  • p[l][r1]p[l][r]

l1k<k=p[l][r1]<r1

易知f[l][r1]=f[l1][k]+w[k+1][r1]f[l1][k]+w[k+1][r1]

由四边形不等式有k+1<k+1r1<r,w[k+1][r1]+w[k+1][r]w[k+1][r1]+w[k+1][r]

两式相加f[l1][k]+w[k+1][r]f[l1][k]+w[k+1][r],易知决策点k比k更优秀

  • p[l][r]p[l+1][r]

lk=p[l+1][r]<k<r,容易知道

f[l+1][r]=f[l][k]+w[k+1][r]f[l][k]+w[k+1][r]

由四边形不等式有l1<lk<k,f[l][k]+f[l1][k]f[l][k]+f[l1][k]

两式相加f[l1][k]+w[k+1][r]f[l1][k]+w[k+1][r],容易知道决策点kk更优秀

  • 总上所素p[l][r1]p[l][r]p[l+1][r]

时间复杂度

根据二维递推决策递增定理,我们知道时间复杂度应该为O(i=2nl=1ni+1(p[l+1][l+i1]p[l][l+i2]+1))=
O(i=2n(p[2][i]+p[3][i+1]+...+p[ni+2][n])(p[1][i1]+p[2][i]+...+p[ni+1][n1])+ni+1))
=O(i=2n(p[ni+2][n]p[1][i1]+ni+1))O(n2)

石子合并

问题

有n堆石子从左至右排成一排,第i堆石子重量w[i],每次可以选择相邻的两堆石子合并,新的石子重量为原来两堆之和,消耗体力值为新的石子的重量,询问最少消耗的体力之和。

首先注意到这是区间问题,于是可以设f[l][r]表示合并第l堆石子到第r堆石子消耗的最少体力值,于是有f[l][r]=mink=lr1{f[l][k]+f[k+1][r]+w[l][r]},时间复杂度O(n3)

考虑到区间递推可以四边形不等式优化,发现w满足四边形不等式,且取到等号,也满足包含递增关系,边界可以开为0,因此可以使用四边形不等式优化成O(n2)

梳理:4大定理三个推论

定理名称 式子 条件 结果
四边形不等式判定定理(2个推论) w(a,b+1)+w(a+1,b)w(a,b)+w(a+1,b+1) a<b w满足四边形不等式
一维线性递推决策递增定理(1个推论) fi=minj=0i1{fj+w(i,j)} w满足四边形不等式 f的最优决策点单调递增
二维递推判定定理 {f[l][r]=mink=lr1{f[l][k]+f[k+1][r]+w[l][r]}f[i][j]=mini1k<j{f[i1][k]+w[k+1][j]} w满足四边形不等式,包含递增,w[i][i]=f[i][i]=0 f满足四边形不等式
二维递推决策递增定理 {f[l][r]=mink=lr1{f[l][k]+f[k+1][r]+w[l][r]}f[i][j]=mini1k<j{f[i1][k]+w[k+1][j]} 优化式满足判定定理 最优决策点p[l][r1]p[l][r]p[l+1][r]

式子积累

  1. f(x)=|x+c|p|x|p单调递增,[NOI2009]诗人小G

  2. w(l,r)表示序列l,r中元素到其中位数的距离之和的最小值,满足四边形不等式和包含递增,Post Office

  3. w(l,r)=srsl(s表示序列前缀和),满足四边形不等式且取到等号和包含递增。(石子合并)

例题

神仙

有n座山,第i座山坐标xi,定义A[i][j]表示在前j座山修i间房子每座山到房子的距离之和的最小值,现在有两个神仙玩起了石子合并,有n堆石子,第i堆石子质量ai,定义合并两堆石子的代价为两堆石子质量之和+A[l][r](l,r为合并后的石子最小的编号和最大的编号),求合并成一堆石子最小的代价,n3000

后记

我想,当强者你看完这一切,觉得这些东西十分简单,而我的前言中又说这个东西很难,那么你大概知道了我的命运了,君当益AK,吾独AFO。

posted @   a1b3c7d9  阅读(2063)  评论(3编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示