下面的证明的思想多数为数学归纳、分类讨论或反证法。
简述
定义 w(i,j) 为一个定义在 Z 上的二元函数,有如下定义:
定义 1:如果对于任意 ℓ1≤ℓ2≤r1≤r2,都有
w(ℓ1,r1)+w(ℓ2,r2)≤w(ℓ1,r2)+w(ℓ2,r1)
成立,那么称 w 满足四边形不等式(即“交叉小于包含”),如果等号始终成立,那么称 w 满足四边形恒等式。
定义 2:如果对于任意 ℓ≤ℓ′≤r′≤r,都有 w(ℓ,r)≥w(ℓ′,r′) 成立,那么则称 w 对于区间包含关系具有单调性。
定理 1:如果对于定义域上任意 ℓ<r,都有
w(ℓ,r)+w(ℓ+1,r+1)≤w(ℓ,r+1)+w(ℓ+1,r)
成立,那么 w(ℓ,r) 满足四边形不等式。
证明:先来证明对于任意 ℓ1≤ℓ2≤r1,都有
w(ℓ1,r1)+w(ℓ2,r1+1)≤w(ℓ1,r1+1)+w(ℓ2,r1).(1)
对于 i=ℓ2−ℓ1 进行归纳,显然当 i=0 时上式成立,下面证明对 i∈[1,r1−ℓ1] 成立。
首先根据归纳假设,有
w(ℓ1,r1)+w(ℓ1+i−1,r1+1)≤w(ℓ1,r1+1)+w(ℓ1+i−1,r1),(2)
因为 i≤r1−ℓ1,于是有 ℓ1+i−1<r1,应当有
w(ℓ1+i−1,r1)+w(ℓ1+i,r1+1)≤w(ℓi+i,r1)+w(ℓ1+i−1,r1+1),(3)
将 (2) 与 (3) 左右两边分别相加,于是有
w(ℓ1,r1)+w(ℓ1+i,r1+1)≤w(ℓ1+1,r1+1)+w(ℓ1+i,r1),
于是对于 ∀ℓ1,ℓ2,r1∈Z,ℓ1≤ℓ2≤r1,(1) 都成立。
在上面的基础上,我们再来证明对于 ∀ℓ1,ℓ2,r1,r2∈Z,ℓ1≤ℓ2≤r1≤r2,都有四边形不等式成立。同理,对 j=r2−r1 进行归纳,显然当 j=0 时四边形不等式成立,下面对于 j>0 的情况进行证明。
首先根据归纳假设,有
w(ℓ1,r1)+w(ℓ2,r1+j−1)≤w(ℓ1,r1+j−1)+w(ℓ2,r1),(4)
因为 r1+j−1≥ℓ2≥ℓ1,根据 (1),应当有
w(ℓ1,r1+j−1)+w(ℓ2,r1+j)≤w(ℓ1,r1+j)+w(ℓ2,r1+j−1)(5)
将 (4) 与 (5) 左右两边分别相加可得
w(ℓ1,r1)+w(ℓ2,r1+j)≤w(ℓ1,r1+j)+w(ℓ2,r1),
于是假设成立,即四边形不等式成立。
证毕.
应用
优化 2D1D 动态规划
区间型 DP
常见的一种动态规划的状态转移方程为
fℓ,r=minℓ≤k<r{fℓ,k+fk+1,r}+w(ℓ,r),(1≤ℓ<r≤n)
直接简单实现上面的转移,那么时间复杂度为 O(n3),如果 w(l,r) 满足一些特殊性质,那么我们可以用四边形不等式对其进行优化。
定理 2:如果 w(ℓ,r) 满足四边形不等式且对于区间包含关系具有单调性,那么状态 fl,r 满足四边形不等式。
证明:定义 gk,ℓ,r=fℓ,k+fk+1,r+w(ℓ,r),表示决策点为 k 时的状态值,任取 ℓ1≤ℓ2≤r1≤r2,记 u=argminℓ1≤k<r2 gk,ℓ1,r2,v=argminℓ2≤k<r1 gk,ℓ2,r1,分别表示 fℓ1,r2 和 fℓ2,r1 的最小最优决策点。
首先,如果 ℓ1=ℓ2,那么显然成立,然后考虑对于 r2−r1 进行归纳,显然当 r2−r1=0 时成立。
综上所述,两种情形均有 fl1,r1+fl2,r2≤fl1,r2+fl2,r1,即四边形不等式成立。
证毕.
定理 3:若状态 f 满足四边形不等式,记 ml,r=min{k:fl,r=gk,l,r} 表示最优决策点,则有
ml,r−1≤ml,r≤ml+1,r(l+1<r)
证明:记 u=ml,r, k1=ml,r−1, k2=ml+1,r,分情况讨论:
-
若 k1>u,则 u+1≤k1+1≤r−1≤r,因此根据四边形不等式有
fu+1,r−1+fk1+1,r≤fu+1,r+fk1+1,r−1
再根据 u 是状态 fl,r 的最优决策点可知
fl,u+fu+1,r≤fl,k1+fk1+1,r
将以上两个不等式相加,得
fl,u+fu+1,r−1≤fl,k1+fk1+1,r−1
即 gu,l,r−1≤gk1,l,r−1,但这与 k1 是最小的最优决策点矛盾,因此 k1≤u。
-
若 u>k2,则 l≤l+1≤k2≤u,根据四边形不等式可得
fl,k2+fl+1,u≤fl,u+fl+1,k2
再根据 k2 是状态 fl+1,r 的最优决策点可知
fl+1,k2+fk2+1,r≤fl+1,u+fu+1,r
将以上两个不等式相加,得
fl,k2+fk2+1,r≤fl,u+fu+1,r
即 gk2,l,r≤gu,l,r,但这与 u 是最小的最优决策点矛盾,因此 u≤k2。
证毕.
因此,如果在计算状态 fl,r 的同时将其最优决策点 ml,r 记录下来,那么我们对决策点 k 的总枚举量将降为
∑1≤l<r≤n(ml+1,r−ml,r−1)=n∑i=1(mi,n−m1,i)≤n2
上式的第一个等号可以通过将两个 Σ 分别展开合并同类项得证。
另一形式
另一种常见的状态转移方程为
fi,j=mink≤j{fi−1,k+w(k,j)},(1≤i≤n,1≤j≤m)
具有与上面同样的结论与性质。
优化 1D1D 动态规划
定理及证明
一种常见的状态转移方程为
fi=min0≤j<i{fj+w(i,j)}
定理 4:若 w 满足四边形不等式,那么 f 具有决策单调性。
证明:设 pi 为 fi 的最优决策点,对于 ∀i∈[1,n],∀j∈[0,pi−1],有
fpi+w(pi,i)≤fj+w(j,i),(6)
∀i′∈[i+1,n],由于 w 满足四边形不等式,于是有
w(j,i)+w(pi,i′)≤w(j,i′)+w(pi,i),(7)
将 (6) 和 (7) 左右两部分分别相加即得
fpi+w(pi,i′)≤fj+w(j,i′),
也就说明了应有 pi′≥pi,即决策单调性。
证毕.
实现
由于决策单调性,p 一定是一个非严格递增的序列,我们对 p 进行维护,即对于当前转移完的 i,我们考虑从哪里开始 i 开始作为最优的决策点。
显然一种朴素的做法是直接在 p 上进行二分,找到对应位置 pos,然后 ∀j∈[pos,n],将 pj 修改为 i。
一种更为简洁的做法是,用一个队列维护 p,利用 p 是一个非严格递增的序列的性质,每一段相同的用一个三元组 (tk,lk,rk),表示当前 ∀i∈[lk,rk],pi=tk.
同时,如果一个三元组的右边界已经小于当前处理的位置,它一定不再有贡献,可以直接丢掉,于是就类似与单调队列,此时第一个合法的队头就是该位置的最优决策点。
考虑用 i 更新决策点的过程,我们按照以下步骤进行:
-
取出队尾的三元组 (tk,lk,rk);
-
若 fi+w(i,lk)<ftk+w(tk,lk),令 pos=lk,删掉该三元组,回到 1.
-
若 fi+w(i,rk)>ftk+w(tk,rk),直接到 5.
-
在 [lk,rk] 上二分,找到第一个可行位置,更新为 pos;
-
在队尾加入 (i,pos,n);
整体时间复杂度为 O(nlogn).
参考资料
[1] 四边形不等式优化 - OI Wiki
[2] 四边形不等式 - Pedesis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】