决策单调性与四边形不等式 学习笔记
零、前置知识
-
子矩阵:
设 AA 为 n×mn×m 的矩阵,则子矩阵 A[i1,⋯,ik],[j1,⋯,jl]A[i1,⋯,ik],[j1,⋯,jl] 为矩阵 AA 的第 i1,⋯,iki1,⋯,ik 行与第 j1,⋯,jlj1,⋯,jl 列的交形成的矩阵。
-
连续子矩阵:
连续子矩阵 A[i1∼i2],[j1∼j2]=A[i1,i1+1,⋯,i2],[j1,j1+1,⋯,j2]A[i1∼i2],[j1∼j2]=A[i1,i1+1,⋯,i2],[j1,j1+1,⋯,j2]。
-
行最小值位置:
定义 mini(A)mini(A) 为最大的整数 kk 满足 ∀1≤j≤n,Ai,j≥Ai,k∀1≤j≤n,Ai,j≥Ai,k。
-
单调矩阵:
对于 n×mn×m 的矩阵 AA,若 ∀1≤i<j≤n,mini(A)≤minj(A)∀1≤i<j≤n,mini(A)≤minj(A),则称该矩阵为单调矩阵。
-
完全单调矩阵:
对于 n×mn×m 的矩阵 AA,若其所有子矩阵均为单调矩阵,则称该矩阵为完全单调矩阵。
-
四边形不等式与蒙日阵
对于 n×mn×m 的矩阵 AA,若对于任意 1≤i1≤i2≤n,1≤j1≤j2≤m1≤i1≤i2≤n,1≤j1≤j2≤m,均有 Ai1,j1+Ai2,j2≤Ai1,j2+Ai2,j1Ai1,j1+Ai2,j2≤Ai1,j2+Ai2,j1,则称 AA 满足四边形不等式,同时称 AA 为蒙日阵。
-
定理 0.1:矩阵 AA 满足四边形不等式当且仅当 ∀1≤i<n,1≤j<m,Ai,j+Ai+1,j+1≤Ai,j+1+Ai+1,j∀1≤i<n,1≤j<m,Ai,j+Ai+1,j+1≤Ai,j+1+Ai+1,j 。
证明:必要性显然。将 Ai,j+Ai+1,j+1≤Ai,j+1+Ai+1,jAi,j+Ai+1,j+1≤Ai,j+1+Ai+1,j 和 Ai+1,j+Ai+2,j+1≤Ai+1,j+1+Ai+2,jAi+1,j+Ai+2,j+1≤Ai+1,j+1+Ai+2,j 相加,即可得到 Ai,j+Ai+2,j+1≤Ai,j+1+Ai+2,jAi,j+Ai+2,j+1≤Ai,j+1+Ai+2,j,可以无限向右扩展。向下扩展同理,可以证明其充分性。
-
定理 0.2:若矩阵 AA 满足四边形不等式,则 AA 与 ATAT 均为完全单调矩阵。
证明:设 AA 的子矩阵 A′A′ 不是单调矩阵,则存在 mini(A′)>mini+1(A′)mini(A′)>mini+1(A′),此时 A′i,mini+1(A′)+A′i+1,mini(A′)>A′i,mini(A′)+A′i+1,mini+1(A′)A′i,mini+1(A′)+A′i+1,mini(A′)>A′i,mini(A′)+A′i+1,mini+1(A′),与四边形不等式矛盾。ATAT 同理。
更多有关蒙日矩阵的性质会在第四章节进行讲述。
考虑以下两种形式的动态规划(忽略初始值):
- fi,j=min1≤k<jfi−1,k+wk,jfi,j=min1≤k<jfi−1,k+wk,j
此时从 fi−1fi−1 转移到 fifi 时可以构造如下 n×nn×n 的矩阵 AA:
那么 fi,x=Ax,minx(A)fi,x=Ax,minx(A),在矩阵 AA 满足四边形不等式时可以快速计算。由于转移时 fi−1fi−1 已知,我们不妨将其称为离线决策单调性。
-
定理 0.3:在上述离线决策单调性问题中,若 ww 满足四边形不等式,则 AA 也满足四边形不等式。
证明:只需证明对于所有 i1≤i2,j1≤j2i1≤i2,j1≤j2,都有 Ai1,j1+Ai2,j2≤Ai1,j2+Ai2,j1Ai1,j1+Ai2,j2≤Ai1,j2+Ai2,j1。
Ai1,j1+Ai2,j2=fi−1,j1+wj1,i1+fi−1,j2+wj2,i2≤fi−1,j1+wj1,i2+fi−1,j2+wj2,i1=Ai2,j1+Ai1,j2Ai1,j1+Ai2,j2=fi−1,j1+wj1,i1+fi−1,j2+wj2,i2≤fi−1,j1+wj1,i2+fi−1,j2+wj2,i1=Ai2,j1+Ai1,j2其中运用了 ww 的四边形不等式。
- fi=min1≤j<ifj+wj,ifi=min1≤j<ifj+wj,i
此时同样可以构造矩阵 AA:
那么 fx=Ax,minx(A)fx=Ax,minx(A),在矩阵 AA 满足四边形不等式时可以快速计算。由于转移时 ff 未知,我们不妨将其称为在线决策单调性。
-
定理 0.4:在上述在线决策单调性问题中,若 ww 满足四边形不等式,则 AA 也满足四边形不等式。
证明:同离线决策单调性问题,不再赘述。
一、决策单调性的决策点计算
为了避免输入成为瓶颈,以下的矩阵默认可以在较快时间内预处理并单点查询。
分治
最为常见的方法。对于单调矩阵 AA,定义分治过程 solve(l,r,L,R) 为计算 l∼r 行的 mini(A),且已知它们的范围在 [L,R] 内。
那么找到中点 mid=⌊l+r2⌋,暴力在 [L,R] 内计算出 M=minmid(A),然后递归 solve(l,mid−1,L,M) 与 solve(mid+1,r,M,R)。递归边界为 l>r 或 L=R。
每次分治的复杂度为 O(R−L),分治树上每层的复杂度之和为 O(m),总时间复杂度为 O(mlogn+n)。可以证明单调矩阵求解行最小值的复杂度下界为 O(mlogn)。
分治法的缺点在于只能解决离线问题,然而它还有一个比较好的性质。当 Ai,j 无法直接求出,但拥有类似莫队的易加/易删性质,分治法可以同样在 O((n+m)logn) 的时间内求解。
具体而言,维护两个指针和它对应矩阵的值,单次分治的指针移动距离是 O(r−l+R−L) 的,递归完左边到右边的时候指针移动距离同样是 O(r−l+R−L) 的。
二分栈
在此之前,先说明几个完全单调矩阵的性质。
-
定理 1.1:对于 n×m 的完全单调矩阵 A 和 1≤i<j≤m,存在整数 0≤pi,j≤n 使得对于任意的 1≤k≤n,Ak,i<Ak,j 当且仅当 k≤pi,j。
-
冗余元素:
对于 n×m 的完全单调矩阵 A,定义某个元素是冗余的当且仅当它不是对应行的最小值所在位置。
-
冗余列:
对于 n×m 的完全单调矩阵 A,定义某一列是冗余列当且仅当这一列上所有元素都是冗余元素。
-
定理 1.2:对于 n×m 的完全单调矩阵 A 和 1≤i<j≤m,1≤k≤n,若 Ak,i<Ak,j,则 A1∼k,j 是冗余的,否则 Ak∼n,i 是冗余的。
以上定理容易通过完全单调矩阵的定义说明其正确性。
二分栈是增量算法,其按顺序加入每一列,并用栈维护所有的非冗余列。由于单调性,对于第 j 列,若它不是冗余的,则存在区间 [lj,rj] 使得这些行的目前最小值所在列都是 j。
当加入新的一列 j 时,不断取出栈顶元素,不妨设当前栈顶为第 top 列。若 Altop,top≥Altop,j,则说明第 top 列是冗余的,将其弹出栈;否则二分计算 ptop,j,将第 top 列的区间设为 [ltop,ptop,j],第 j 列的区间设为 [ptop,j+1,rtop]。时间复杂度 O(mlogn)。
二分栈可以解决在线决策单调性问题,但是只适用于完全单调矩阵。
SMAWK
求解行最小值位置的时候,如果行少但列多,那么有很多列是冗余的。于是考虑实现子过程 reduce(A),将 n×m 的完全单调矩阵通过删除冗余列得到 n×min(n,m) 的矩阵。
reduce 操作流程如下:
-
初始定义 k=1。
-
若 n≥m 则结束过程,否则比较 Ak,k 和 Ak,k+1。
-
若 Ak,k≥Ak,k+1,则第 k 列为冗余列,删除第 k 列并且令 k←max(k−1,1),回到第 2 步。
-
若 Ak,k<Ak,k+1 且 k<n,则令 k←k+1,回到第 2 步。
-
若 Ak,k<Ak,k+1 且 k=n,则第 n+1 列为冗余列,删除第 n+1 列,回到第 2 步。
第 4,5 步很好理解,考虑第 3 步的正确性。
在前一轮中,已经确定了 Ak−1,k−1<Ak−1,k,故 A1∼k−1,k 是冗余的;而现在又有 Ak,k≥Ak,k+1,所以 Ak∼n,k 是冗余的,第 k 列是冗余列,可以删除。同时为了确保每次这么做的正确性,需要让 k 退回到 max(k−1,1)。
至于时间复杂度,每次要么 k 加一,要么删除一列并至多让 k 减一,k 的最大值为 n,故时间复杂度为 O(n+m)。实现可以使用链表维护列。
SMAWK 算法是一种基于 reduce 操作的递归算法,核心思路是只需要确定所有偶数行的最小值位置,就可以根据单调性 O(m) 求出奇数行的最小值位置。
每次在递归之前用 reduce 操作让 m 变成 min(n,m),就可以使得 m 与 n 同阶,复杂度变成 O(n+m)。
实际上当 m<n 时需要递归 lognm 轮才能进入 n≤m 的情况,复杂度为 O(n+m(1+max(0,lognm)))。然而 m×lognm<m×nm=n,所以还是线性。
例题:CF1423M。
Wilber
SMAWK 只能解决离线决策单调性问题,我们需要一些支持在线的算法。
回顾一下在线决策单调性的问题:
其矩阵 A 需要满足四边形不等式。Wilber 算法如下:
-
初始时定义 r=c=1,算法中满足 min1∼c(A) 已经确定且 minc+1(A)≥r。c=n 则算法结束。
-
设 p=min(n,c+(c−r+1)),先用 fr∼c 去直接转移 fc+1∼p,即用 SMAWK 计算 A[c+1∼p],[r∼c] 中的行最小值作为 f 的估计值,记为 gc+1∼p。
-
当然这是不准确的,于是考虑用这个估计值 gc+1∼p 再做一次转移,得到二次估计值 hc+1,p。
-
若对于所有 c+1≤i≤p,都有 gi≤hi,则所有的 g 都是准确的,令 c←p 并回到第 2 步。
-
否则找到最小的 t 使得 gt>ht,此时 c+1∼t−1 的 g 是准确的,而 t 的 h 是准确的,且 mint(A)≥c+1。令 r←c+1,c←t,并回到第 2 步。
正确性显然,考虑时间复杂度。设势能为 r+c,由于 p−c=c−r+1,所以第 2,3 步的时间复杂度均为 O(c−r)。如果进入第 4 步,则势能增加 p−c=c−r+1;如果进入第 5 步,则势能增加 t−r+1,由于 t>c,所以至少增加了 c−r+1,均摊正确。因为 r+c≤2n,所以时间复杂度 O(n)。
Eppstein
考虑如下的“交错动态规划”:
其中 wi,j,w′i,j 均满足四边形不等式。如果用 Wilber 算法解决问题,那么 f 和 g 就需要同步求解。不妨假设第一次出现二次估计值才正确的位置是 t,可能 f 已经是二次估计值,但 g 还是一次估计值,这时就不能令 r←c,因为 g 的转移点可能还 <c。但这样一来时间复杂度就无法均摊了,于是后来 Eppstein 改进了此算法。
我们在下面只考虑 f 的计算,但注意 g 的计算在同时进行。Eppstein 算法流程如下:
-
初始时定义 r=c=1,算法保证 f1∼c,g1∼c 已经求出。维护数组 E1∼n,满足 fi=min(Ei,minr≤j<igj+wj,i),即用 E 存一下 <r 的位置对后面的影响。
-
设 p=min(n,c+(c−r+1)),同样用 fr∼c 去估计 fc+1∼p,SMAWK,与 Ec+1∼p 取最小值得到估计值 hc+1∼p。
-
接着对所有 c+1≤i≤p 计算 vi=maxi<j≤phj−wi,j,表示 gi 小到多少会估计错误。这是完全单调矩阵,SMAWK。设初始 k=c 表示已经计算完的位置。
-
k←k+1 并确定 fk 的真实值即为估计值。若 k=p,则令 c←p 并回到第 2 步。
-
若 gk≥vk,则此时不会导致后面估计错误,回到第 4 步。
-
否则此时 gk 会破坏后面的估计,令 ∀i∈[c+1,p],Ei←hi,r←c+1,c←k,回到第 2 步。
为什么最后一步只需要更新 Ec+1∼p 呢?因为我们已经知道 gk 会破坏 (k,p] 的估计,即存在 (k,p] 的某个位置转移点 ≥k,那么 gr∼c 便不会对 >p 的位置产生贡献。
注意上面 f 和 g 的 r,c,Ei,vi 都是不同的,只是按照 k 的进度来同时求出 fk,gk。
时间复杂度和 Wilber 算法一样,均摊 O(n),区别在于 Eppstein 算法抛弃了后续转移点必须 ≥r 的条件,使用了 E 数组记录转移点 <r 的情况,且巧妙地使用 v 数组代替无法计算的二次估计值。
同时 Eppstein 算法可以按照 f1,f2,⋯,fn 的顺序一个个确定值,而不像 Wilber 算法一次性确定某个连续区间的值。这样 Eppstein 算法可以支持多个 dp 交错转移。
二、二维决策单调性
最优搜索树问题
俗称石子合并,本质上是给出每个元素询问次数,要求建立一棵搜索树使得使得查询时间和最小。转移方程如下:
-
区间包含单调性:
对于 n×n 的方阵 A,若对于所有的 i≤i′≤j′≤j,都有 Ai,j≥Ai′,j′,则称 A 满足区间包含单调性。
若 w 权值组成的矩阵满足四边形不等式和区间包含单调性,则可以将复杂度从 O(n3) 降低。
朴素动态规划算法的加速
以下默认 w 权值组成的矩阵满足四边形不等式和区间包含单调性。
-
定理 2.1:矩阵 {fi,j} 满足四边形不等式。
证明:只需证明对所有的 i≤i′≤j≤j′ 都有 fi,j+fi′,j′≤fi,j′+fi′,j 即可。
设 fi,j,y 表示决策点为 y 时 fi,j 的结果,即 wi,j+fi,y+fy+1,j。
对 j′−i 归纳,当 j′−i−1 成立时,讨论 j′−i 是否成立。
-
当 i=i′ 或 j=j′ 时,显然成立。
-
当 i′=j 时,需要证明 fi,j+fj,j′≤fi,j′+fj,j。不妨设 fi,j′ 的最优转移点为 y,且 y<j,则:
fi,j+fj,j′≤fi,j,y+fj,j′=(wi,j+fi,y+fy+1,j)+fj,j′≤wi,j′+fi,y+(fy+1,j+fj,j′)≤wi,j′+fi,y+(fy+1,j′+fj,j)=fi,j′+fj,j其中运用了 w 的区间包含单调性和 ≤j′−i−1 的归纳假设。y≥j 时拆 fj,j′ 同理。
-
当 i′≠j 时,设 fi,j′ 和 fi′,j 的最优转移点分别为 y 和 z 且 y≤z,则:
fi,j+fi′,j′≤fi,j,y+fi′,j′,z=(wi,j+fi,y+fy+1,j)+(wi′,j′+fi′,z+fz+1,j′)≤(wi,j′+wi′,j)+(fi,y+fi′,z)+(fy+1,j+fz+1,j′)≤(wi,j′+wi′,j)+(fi,y+fi′,z)+(fy+1,j′+fz+1,j)=fi,j′+fj,j其中运用了 w 的四边形不等式和 ≤j′−i−1 的归纳假设。y>z 时同理将 fi,j+fi′,j′ 放缩至 fi,j,z+fi′,j′,y,对 (fi,z+fi′,y) 用四边形不等式即可。
-
-
定理 2.2:设 fi,j 最小的最优转移点为 Ki,j,则有 Ki,j−1≤Ki,j≤Ki+1,j。
这里只证明 Ki,j−1≤Ki,j,右边是一样的。
对于一个定值 i,考虑构造 n×n 的矩阵 A:
Ax,y={wi,x+fi,y+fy+1,x,i≤y<x+∞,otherwise可以证明 A 为蒙日阵,具体证明方法会在第四章节介绍蒙日阵中讲到,大家也可以先自行思考。因此有 minj−1(A)≤minj(A),即 Ki,j−1≤Ki,j。
有了二维上的单调性,就可以按照区间长度顺序计算 f 和 K。初始时 Ki,i=i,在计算 Ki,j 时,由于 Ki,j−1 和 Ki+1,j 已经确定,于是可以根据 Ki,j−1≤Ki,j≤Ki+1,j 来暴力枚举算出 Ki,j。计算长度为 len 的总时间复杂度为 n−len+1∑i=1(Ki+1,i+len−1−Ki,i+len−2)=Kn−len+2,n−K1,len−1=O(n),总时间复杂度 O(n2),常数较小。
多叉树拓展
即求最优 k 叉搜索树,相当于把 1 个断点变成 k−1 个断点,转移式如下:
暴力做的复杂度为 O(n2k)。实际上可以用倍增求出 f2ki,j,时间复杂度 O(n2logk)。好像没什么用。
三、决策单调性最短路问题
定义及基本算法
考虑经典的 DAG 最短路问题:给定 n 个点的 DAG,对于 i<j 时有边权 wi,j,求 1 到 n 经过 k 条边的最短路。
写成动态规划就是熟悉的式子:
暴力求解的复杂度 O(n2k)。当 w 满足四边形不等式时,这是一个离线决策单调性问题,可以用 SMAWK 做到 O(nk)。
下文将继续探讨一些拓展和优化。
答案凸性
-
引理 3.1:记 f(k)=fk,n,则 ∀1≤s<r<t≤n−1,f(s)+f(t)≥f(r)+f(s+t−r)。
证明:设 f(s) 的其中一个最优方案是 p1,p2,⋯,ps+1,f(t) 的其中一个最优方案是 q1,q2,⋯,qt+1。
设 v=r−s,若存在 i∈[1,s] 使得 pi≤qi+v<qi+v+1≤pi+1,那么可以构造两条路径如下:
-
p1,p2,⋯,pi,qi+v+1,⋯,qt+1,长度为 s+t−r
-
q1,q2,⋯,qi+v,pi+1,⋯,ps+1,长度为 r
而根据四边形不等式 wpi,qi+v+1+wqi+v,pi+1≤wpi,pi+1+wqi+v,qi+v+1,可得 f(s)+f(t) 不比这两条路径长度和小,即不比 f(r)+f(s+t−r) 小。
那么只需要说明一定存在这样的 i 即可。
考虑以 pi 作为分割点将 (1,n] 分为 s 段,其中第 i 段区间为 (pi,pi+1]。设 ai(1≤i≤s+1) 表示 qi+v 在哪一段,bi=ai−i。
由于 v≥1,所以 av+1≥1,b1≥0。同时 bs+1=−1,bi−bi−1≥−1,所以 b 序列中一定有 −1。取最前面的 −1,假设是 bi+1,那么一定有 bi=0,即 ai=ai+1=i,根据定义有 pi<qi+v<qi+v+1≤pi+1,得证。
-
-
定理 3.2:f 在定义域上是下凸函数,即 ∀k∈[2,n−2],f(k+1)−f(k)≥f(k)−f(k−1)。
代入上面的引理即可证明。
wqs 二分及其方案构造
由于 f 的斜率是单增的,于是可以二分斜率,转为求截距最小值所在点。对于函数 y=kx+b,那么 b=y−kx,可以看作每走一步都要花费 k 的代价,其中 k 为二分的斜率。此问题为在线决策单调性问题,可以用 Wilber 做到 O(n)。总复杂度 O(nlogV)。
然而要构造 f(k) 的方案时,有可能出现 f(k+1)−f(k)=f(k)−f(k−1) 的情况,此时怎么切都切不到 k,这时需要额外构造。(前情提要,讲的很难绷)
设答案斜率为 x,用 x−ϵ 切到的是左端点 (p,f(p)),用 x+ϵ 切到的是右端点 (q,f(q)),那么对于 r∈[p,q] 都有 f(r)=f(p)+(r−p)x。
先用两次动态规划把 f(p) 和 f(q) 的最优路径求出来,然后用引理的构造方式得到长度分别为 k 和 p+q−k 的路径。设这两条路径的答案分别为 f′(k) 和 f′(p+q−k),那么就有以下几点:
-
f′(k)≥f(k)=f(p)+(k−p)x
-
f′(p+q−k)≥f(p+q−k)=f(p)+(q−k)x
-
f′(k)+f′(p+q−k)≤f(p)+f(q)=2f(p)+(q−p)x
于是就有 f′(k)=f(k),f′(p+q−k)=f(p+q−k),构造的路径均为最优路径。
路径单调性与不交性
-
定理 3.3:设 x1,⋯,xk+1 为 p1∼q1 长度为 k 的字典序最小的最短路,y1,⋯,yk+1 为 p2∼q2 长度为 k 的字典序最小的最短路,且 p1≤p2,q1≤q2,则 ∀i∈[1,k+1],xi≤yi。
证明:考虑反证。找到第一个 i 满足 xi>yi,再找到之后第一个 j 满足 xj≤yj,则将路径调整为这两条:
-
x1,⋯,xi−1,yi,⋯,yj−1,xj,⋯,xk+1
-
y1,⋯,yi−1,xi,⋯,xj−1,yj,⋯,yk+1
由于四边形不等式,那么这两条路径的答案之和不会变大,而 p1∼q1 的路径字典序变小了,矛盾。
-
-
定理 3.4:设 x1,⋯,xk+1 为 1∼n 长度为 k 的字典序最小的最短路,y1,⋯,yk+2 为 1∼n 长度为 k+1 的字典序最小的最短路,则 ∀i∈[1,k+1],yi≤xi≤yi+1。
证明:注意到 y1∼k+1 与 y2∼k+2 均为长为 k 的字典序最小的最短路,把它们分别于 x 应用上面的路径单调性即可证明。
两个性质分别长这样:
-
定理 3.5:设 x1,⋯,xk+1 为 1∼n 长度为 k 的字典序最小的最短路,则对于任意 1≤l≤r≤n,xl,⋯,xr 为 xl∼xr 的长度为 r−l 的字典序最小的最短路。
正确性显然,否则 x1,⋯,xk+1 不是 1∼n 长度为 k 的字典序最小的最短路。
-
定理 3.6:对于任意 i,j,设 Ki,j 为 fi,j 的最优决策点,那么有 Ki,j−1≤Ki,j≤Ki+1,j。
证明:对于左边,均为长度为 i 的路径,根据路径单调性可证 Ki,j−1≤Ki,j;对于右边,均为 1∼j 的路径,根据路径不交性可证 Ki,j≤Ki+1,j。
有了这个性质,我们就可以用常数较小的二维决策单调性方法来代替 SMAWK,时间复杂度同样为 O(nk)。
环上邮局
原题:XIX Open Cup Grand Prix of Zhejiang I
n 个点放在一个长度为 L 的环上,你需要把它们分成恰好 k 段,每段的代价是该段中所有点到中位数的距离和。求最小代价并输出方案。
首先可以枚举每个位置作为断点,断环成链,变成经典的 DAG 最短路问题,暴力求解可得总时间复杂度为 O(n3k)。
接下来,我们会一步步地通过观察性质来降低时间复杂度。
- O(n2k)
注意到 wi,j 可以通过预处理前缀和来做到 O(1) 计算,且其满足四边形不等式。
证明:只需对所有 i<j,证明 wi,j+wi+1,j+1≤wi,j+1+wi+1,j 即可。
设 xi 为第 i 个点的坐标,Pi,j 为区间 [i,j] 的中位数,若区间长度为偶数则可以在中间两个数之间任取。那么可以通过调整使得 Pi,j=Pi,j+1,Pi+1,j=Pi+1,j+1。
式子两边抵消之后只剩下 xj+1−Pi+1,j+1≤xj+1−Pi,j+1,显然正确。
于是可以用 SMAWK 或二维决策单调性来优化到单次 O(nk),总时间复杂度 O(n2k)。
- O(n2logV)
由于 w 满足四边形不等式,答案是下凸函数,于是可以使用 wqs 二分+Wilber 做到单次 O(nlogV),总时间复杂度 O(n2logV)。
- O(nlogV+n2)
暴力枚举断点好像很蠢,考虑优化。
先断环成链,将它复制无限份,然后 O(nlogV) 跑出 0→L 的字典序最小的最短路 x1=0,x2,⋯,xk+1=L。
设全局字典序最小的最短路为 y1∈[0,L),y2,⋯,yk+1=y1+L,那么运用路径单调性有 ∀i∈[1,k+1],xi≤yi。
接下来取路径 x2,⋯,xk+1,xk+2=x2+L,则可以证明 ∀i∈[1,k+1],yi≤xi+1。
证明:考虑反证法。找到最小的 i 使得 yi>xi+1,然后分两类讨论:
-
若 i>1,则找到后面第一个 j 使得 yj≤xj+1,由于 yk<L=xk+1,所以一定能找到。将路径替换为 x2,x3,⋯,xi,yi,⋯,yj−1,xj+1,⋯,xk+2 和 y1,y2,⋯,yi−1,xi+1,⋯,xj,yj,⋯,yk+1,两条路径权值和不会更大,而 y1→yk+1 的字典序变小了,矛盾。
-
若 i=1,则有 yk+1>xk+2,将路径替换为 x2,x3,⋯,xj,yj,⋯,yk,xk+2 和 y1,y2,⋯,yj−1,xj+1,⋯,xk+1,yk+1,两条路径权值和不会更大。而调整后 y1→yk+1 经过了 xk+1=L,与 y 是全局字典序最小的最短路矛盾。
于是就有 ∀i∈[1,k],xi≤yi≤xi+1。取所有 [xi,xi+1] 中点数最少的一段来枚举,最多 nk 个点,每次跑 O(nk) 的动态规划,总时间复杂度为 O(nlogV+n2)。
- O(n(logn+logV))
根据上面的分析,有 yi∈[xi,xi+1],且由于路径单调性,当 y1 增大时 yi(1≤i≤k+1) 不会变小,于是可以分治。
设 solve(l1,r1,l2,r2,⋯,lk,rk) 表示计算 k 个断点在各自范围内的最优解,每次取 [l1,r1] 的中点 l1+r12 为第一个断点,然后做 k−1 次 SMAWK 计算剩余 k−1 个断点的最优解和方案,递归到两边进行处理。
单次复杂度为 O(∑ri−li),那么分治树上每层的时间复杂度之和为 O(∑xi+1−xi)=O(n),总分治时间复杂度就是 O(nlogn) 的了……吗?
实际上,每次分治都至少有一个 O(k) 的复杂度,分治树上的总点数为 O(n),于是复杂度就变成了 O(nlogn+nk)。
还是考虑取所有 [xi,xi+1] 中点数最少的一段来分治,将它转到第一个区间,然后总点数就变成了 O(nk),总时间复杂度为 O(n(logn+logV))。
四、四边形不等式的其他应用
蒙日阵的生成及其性质
-
蒙日矩阵乘法:
设 A,B 为蒙日阵,则定义蒙日矩阵乘法为 Ci,j=minkAi,k+Bk,j,即 (min,+) 矩乘。
-
定理 4.1:令 Ki,j 为 Ci,j 最小的最优决策点,则有 Ki,j−1≤Ki,j≤Ki+1,j。
证明:这里只证明 Ki,j−1≤Ki,j,右边是一样的。
若 ∃j1<j2,Ki,j1>Ki,j2,不妨设 Ki,j1=k,Ki,j2=l(k>l),则:
Ci,j1+Ci,j2=(Ai,k+Bk,j1)+(Ai,l+Bl,j2)≥(Ai,k+Bk,j2)+(Ai,l+Bl,j1)>Ci,j2+Ci,j1
于是就可以用二维决策单调性的方法 O(n2) 计算蒙日矩阵乘法。
-
定理 4.2:若矩阵 A,B 为蒙日阵,则 C=AB 也为蒙日阵。
证明:只需证明 ∀i1≤i2,j1≤j2 均满足四边形不等式。设 Ci1,j2 取到最小值的位置是 k1,Ci2,j1 取到最小值的位置是 k2,且 k1≤k2,则:
Ci1,j1+Ci2,j2≤(Ai1,k1+Bk1,j1)+(Ai2,k2+Bk2,j2)=(Ai1,k1+Ai2,k2)+(Bk1,j1+Bk2,j2)≤(Ai1,k1+Ai2,k2)+(Bk1,j2+Bk2,j1)=(Ai1,k1+Bk1,j2)+(Ai2,k2+Bk2,j1)=Ci1,j2+Ci2,j1k2≤k1 同理。
那么以下矩阵均为蒙日阵:
-
A+B
-
AB
-
λA,其中 λ≥0
-
AT
第 1,3,4 点可以通过四边形不等式的定义简单证明,第 2 点的证明已在上面给出。因此可以使用一些常见的蒙日阵进行随机线性组合得到随机性较强的蒙日阵。有了这些基础,就可以快速证明 定理 2.2 的内容了。
这里举一些常见蒙日阵的例子,假设以下蒙日阵的大小为 n×m:
-
ax,y=min(x,y)
-
ax,y=max(x,y)
-
ax,y=xy
-
ax,y=|x−y|p(p≤1)
-
ax,y=x∑i=1m∑j=ydx,y,其中 d 是一个 n×m 的非负元素矩阵
-
ax,y=[x=k]vk
-
ax,y=[y=k]vk
-
ax,y=f(x−y),其中 f(x) 是下凸函数
以及你所见到的所有四边形不等式优化 dp 题目里的权矩阵。
-
次模函数:
对于有限集 S 和定义域在 2S 的函数 f,若 ∀X,Y∈S,f(X)+f(Y)≥f(X∪Y)+f(X∩Y),则称 f 是次模函数。
对于定义在集合 S 的次模函数 f 和由 S 集合构成的排列 d1,⋯,d|S|,考察 |S|×|S| 的矩阵 A:
则 A 满足四边形不等式,此时 f 对应到 max 问题。
以下举一些次模函数的例子:
-
集合并函数是次模函数
-
拟阵的秩函数是次模函数(2018 论文)
-
点集的割权函数是次模函数(2016 论文)
连续子矩阵最小值查询
原题:暂无
给定 n×n 的蒙日阵 A,保证可以快速预处理后 O(1) 计算单点值。q 次询问,每次询问 A[l1∼r1],[l2∼r2] 的最小值。
先考虑 l2=r2 的子问题。对行建立线段树,对于一段行区间 [l,r],每一列的最小值所在行单调不降,所以只需要维护 O(r−l) 个区间,其中每一段区间的列的最小值所在行相同。
合并的话,由于列最小值所在行单调,所以肯定是一段前缀从左儿子继承过来,另一段从右儿子继承过来,二分一下即可。预处理总复杂度为 O(nlogn)。
询问时找到 [l1,r1] 对应的线段树节点,然后对每个节点二分出 l2 列的最小值,单次复杂度 O(log2n)。使用分散层叠可以优化到 O(logn)。
把矩阵转置一下就可以做 l1=r1。
对于原问题,还是建立行线段树。对于每个线段树节点 [l,r],维护其每一段的最小值 vi,即 A[i∼i],[Li∼Ri] 的最小值。由于左右儿子合并时最多有 O(1) 段发生变化,于是只用求 O(n) 次行最小值,预处理复杂度 O(nlogn)。
考虑询问,找到线段树上对应的 logn 个区间。对于每个区间 [l,r],需要求出 A[l∼r],[l2∼r2] 的最小值。对于那些整段都在 [l2,r2] 里的段,可以直接调用 vi,是一个区间 RMQ 问题,可以直接用树套树或者 O(n)−O(1) RMQ;否则最多只有 2 个不完整的段,可以直接查询行最小值,查询总时间复杂度 O(qlog2n)。
复杂度瓶颈在于散段的查询,听说可以优化到 O(qlogn)。
航天飞机调度
原题:uoj672
设 fi,j 表示考虑到第 i 个事件,其中一台飞机位于 Pi,另一台位于 j 的最大价值和。转移如下:
为了方便,我们将权值矩阵扩展到 n×2n,其中 u 与 u+n 表示的是同一个点。
那么对于所有的 u≤v≤x≤y<u+n,都有 wu,x+wv,y≥wu,y+wv,x,这是因为 (u,x) 与 (v,y) 的路径必定有交,把第一个交点后面的翻转就变成了 (u,y) 与 (v,x) 的路径,且权值和不变。
然后考虑标一些奇怪的值使得 v>x 或 y≥u+n 时不等式也成立。
具体解决方法是对于第 u 行,只有 v∈[u,u+n−1] 时有值 wu,v,否则为 −∞。虽然这样权值矩阵仍不满足四边形不等式(比如 u≤v≤x<v+n≤y),但是已经足以说明其决策单调性(有值的部分是满足四边形不等式的)。
考虑构造矩阵 A,其中 Ax,y=fi−1,x+wx,y,那么转移第一步相当于全局加,第二步相当于求第 Pi 和 Pi+n 列的最大值,然后修改第 Pi−1 行。
由于列的最大值所在行单调不降,于是可以用 set 对每一行维护其转移区间。全局加不影响决策点,而修改第 Pi−1 行时第 Pi−1 行的值只会变大,即转移区间只会变大,往左往右二分出扩展多少即可。
询问次数大概是 4qlog2n+3q。
挑战旅行商
原题:暂无
给定 n×n 的蒙日阵 A,满足 Ai,i=0,可以快速预处理后 O(1) 计算单点值。求以该矩阵为邻接矩阵的带权有向图的边权和最小的哈密顿回路。
-
双调回路:
对于带权有向图 G,定义按照 n>i1>i2>⋯>ik1>1<j1<j2<⋯<jk2<n 顺序经过所有点的哈密顿回路为双调回路。
对于任意哈密顿回路的边权和最小值不易计算,但是对于双调回路的边权和最小值是容易计算的。
设 fi,j 表示形如 i>p1>p2>⋯>pk1>1<q1<q2<⋯<qk2<j 的路径的边权和最小值,转移时根据 i 与 j 的差值来确定上一个点是 p1 还是 qk2,当 |i−j|=1 时需要枚举。时间复杂度 O(n2)。
大家应该都知道下一步要证什么了。
-
定理 4.2:若带权有向图 G 的邻接矩阵是蒙日阵,则存在旅行商问题的一个解是双调回路。
证明:考虑归纳法,假设现在 n−1 已经成立。当 n≤3 时显然成立,否则考察某个不是双调回路的最优回路,存在某个点 p 使得前驱 prep<p 且后继 sufp<p。
则根据四边形不等式有 wprep,sufp+wp,p≤wprep,p+wsufp,p,将 p 拿出来,prep 接上 sufp 后答案不会更大。此时图上剩下一个大小为 n−1 的哈密顿回路,根据假设可以把它调整为双调回路。
之后找到回路上的点 q 使得 q<p<sufq,那么将 p 接到中间,根据四边形不等式有 wq,p+wp,sufq≤wq,sufq+wp,p。由于 wp,p=0,所以答案不会变得更大,且得到的是一个双调回路。
接下来考虑优化 O(n2) 的最优双调回路计算。
设 Fi=fi+1,i,Gi=fi,i+1,那么答案就是 min(Fn−1+wn−1,n,Gn−1+wn,n−1),转移如下:
这是交错动态规划模型。考虑 (n−1)×(n−1) 的 F 转移矩阵 A:
注意到 Ax,y+Ax+1,y+1 与 Ax+1,y+Ax,y+1 的和式部分(即 ∑wk,k+1)抵消掉了,只剩下 wy+1,x+wy+2,x+1 和 wy+1,x+1+wy+2,x。又因为 w 满足四边形不等式,所以 A 也满足四边形不等式。
同理,G 的转移矩阵也满足四边形不等式,预处理前缀和后可以 O(1) 计算转移权值,于是用 Eppstein 算法可以做到时间复杂度 O(n)。
五、参考资料
本文作者:AFewSuns
本文链接:https://www.cnblogs.com/AFewSuns/p/quadrangle-inequality.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步