决策单调性与四边形不等式
参考自:
- 《决策单调性与四边形不等式》,彭思进,感谢 Itst 的耐心答疑/bx
- 《决策单调性与四边形不等式 - 学习笔记》,p_b_p_b 的博客
一、决策单调性与四边形不等式
-
定义 1.1(子矩阵):设 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∼i2],[j1∼j2] 为 A[i1,i1+1,⋯,i2],[j1,j1+1,⋯,j2]A[i1,i1+1,⋯,i2],[j1,j1+1,⋯,j2]。
-
定义 1.2(行最小值位置):定义 mini(A)mini(A) 为矩阵 AA 第 ii 行最后一个最小值的位置。
-
定义 1.3(单调矩阵):称 n×mn×m 的矩阵 AA 是单调的,当且仅当对于任意 1≤i<n1≤i<n 有 mini(A)≤mini+1(A)mini(A)≤mini+1(A)。
称矩阵 AA 是完全单调的,当且仅当其所有子矩阵都是单调的。
-
定义 1.4(四边形不等式与蒙日矩阵):称 n×mn×m 的矩阵 AA 满足四边形不等式,当且仅当对于任意 1≤i1<i2≤n1≤i1<i2≤n 和 1≤j1<j2≤m1≤j1<j2≤m 有 Ai1,j1+Ai2,j2≤Ai1,j2+Ai2,j1Ai1,j1+Ai2,j2≤Ai1,j2+Ai2,j1。此时亦称 AA 为蒙日矩阵。
-
引理 1.5:n×mn×m 的矩阵 AA 满足四边形不等式,当且仅当对于任意 1≤i<n1≤i<n 和 1≤j<m1≤j<m 有 Ai,j+Ai+1,j+1≤Ai,j+1+Ai+1,jAi,j+Ai+1,j+1≤Ai,j+1+Ai+1,j。
证明:Ai,j+Ai+1,j+1−Ai,j+1−Ai+1,j+1≤0Ai,j+Ai+1,j+1−Ai,j+1−Ai+1,j+1≤0,可以想象成 AA 是另一个矩阵 BB 的二维前缀和,而这句话描述的是 Bi+1,j+1≤0Bi+1,j+1≤0。那么原条件就转为一个矩阵范围内所有数的和 ≤0≤0,这样看来就显然了。
-
引理 1.6:若矩阵 AA 满足四边形不等式,则 AA 是完全单调矩阵。
证明:反证。设 AA 的子矩阵 A′A′ 不是单调矩阵。A′A′ 应当也满足四边形不等式。设 ii 使得 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′),矛盾。
-
引理 1.7:若矩阵 AA 满足四边形不等式,那么给 AA 的一行/一列加上同一个数后 AA 仍满足四边形不等式。
-
引理 1.8:若矩阵 AA 满足四边形不等式,则 ATAT 也满足四边形不等式。
四边形不等式在动态规划中有以下两种经典应用:
-
定义 1.9(离线决策单调性):考虑如下动态规划(忽略初始值):
fi=min1≤j<igj+wj,ifi=min1≤j<igj+wj,i其中矩阵 ww 满足四边形不等式。
我们可以构造矩阵 AA:
Ai,j={gj+wj,ij<i∞j≥iAi,j={gj+wj,ij<i∞j≥i那么 fi=Ai,mini(A)fi=Ai,mini(A)。
-
定义 1.10(在线决策单调性):考虑如下动态规划(忽略初始值):
fi=min1≤j<ifj+wj,ifi=min1≤j<ifj+wj,i其中矩阵 ww 满足四边形不等式。
类似地构造矩阵 AA:
Ai,j={fj+wj,ij<i∞j≥iAi,j={fj+wj,ij<i∞j≥i那么 fi=Ai,mini(A)fi=Ai,mini(A)。
二、决策单调性的决策点计算
分治法
对于单调矩阵 AA,定义分治过程 solve(l,r,L,R)
表示计算 minl(A),⋯,minr(A)minl(A),⋯,minr(A),且已知它们都在范围 [L,R][L,R] 内。那么我们找到 mid=⌊l+r2⌋mid=⌊l+r2⌋,暴力枚举 [L,R][L,R] 并计算 M=minmid(A)M=minmid(A),然后递归 solve(l,mid-1,L,M)
和 solve(mid+1,r,M,R)
。边界条件 l>rl>r 或 L=RL=R。
假设求 Ai,jAi,j 是 O(1)O(1) 的,那么该算法的时间复杂度为 O(mlogn+n)O(mlogn+n)。而可以证明对于单调矩阵求其所有 mini(A)mini(A) 的计算复杂度下界是 O(mlogn)O(mlogn) 的。
当 Ai,jAi,j 不能直接求时,分治法还能做另一种情况:假设我们知道了格子 Ai,jAi,j 的值后能据此快速地转移到某个相邻格子并知道它的值,那么考虑维护一个指针 i,ji,j 和它的值,每次要求 Ax,yAx,y 时就逐步转移过去。考虑这么做的时间复杂度,容易发现在 solve(l,r,L,R)
节点上的移动次数是不超过 O(r−l+R−L)O(r−l+R−L) 的,而递归树上每一层相当于若干个对角相接的连续子矩阵,所以若单次移动的复杂度是 O(1)O(1),总时间复杂度仍然是 O((n+m)logn)O((n+m)logn) 的。
二分栈法
二分栈法可以解决在线决策单调性问题。
-
引理 2.1:矩阵 AA 是完全单调矩阵等价于对于任意 ii 和 j<kj<k 有 Ai,j≥Ai,k⟹Ai+1,j≥Ai+1,kAi,j≥Ai,k⟹Ai+1,j≥Ai+1,k。
证明:若 AA 是完全单调矩阵,且存在 ii 和 j<kj<k 使得 Ai,j≥Ai,kAi,j≥Ai,k 且 Ai+1,j<Ai+1,kAi+1,j<Ai+1,k,则子矩阵 A[i,i+1],[j,k]A[i,i+1],[j,k] 不是单调矩阵,矛盾。
若对于任意 ii 和 j<kj<k 有 Ai,j≥Ai,k⟹Ai+1,j≥Ai+1,kAi,j≥Ai,k⟹Ai+1,j≥Ai+1,k,则任意子矩阵 A′A′ 显然是单调矩阵。
-
定义 2.2(冗余的):设 AA 是单调矩阵。称 Ai,jAi,j 是冗余的,当且仅当 j≠mini(A)j≠mini(A)。
称 AA 的第 jj 列是冗余的,当且仅当 A[1∼n],jA[1∼n],j 是冗余的。
二分栈法中维护了一个数 kk,并归纳地进行如下假设:
- 用栈维护好 Ak=A[1∼n],[1∼k]Ak=A[1∼n],[1∼k] 的非冗余列 j1,⋯,jtopj1,⋯,jtop,且对于每个非冗余列 jj 使得 mini(Ak)=jmini(Ak)=j 的 ii 为一个区间 [lj,rj][lj,rj],且满足 lj1=1,rj1+1=lj2,⋯,rjtop−1+1=ljtop,rjtop=nlj1=1,rj1+1=lj2,⋯,rjtop−1+1=ljtop,rjtop=n。
- 已经维护好 f1,⋯,fkf1,⋯,fk 的值,于是 AkAk 中每个元素的值都是知道的。
考虑 k→k+1k→k+1:
- 由于 fk+1,y=∞(y≥k+1)fk+1,y=∞(y≥k+1),所以 mink+1(A)≤kmink+1(A)≤k,于是 mink+1(A)=mink+1(Ak)mink+1(A)=mink+1(Ak),那么直接通过栈上二分求出 mink+1(Ak)mink+1(Ak) 并据此得到 fk+1fk+1。
- 利用引理 2.1 的性质,我们不断弹栈并在最后一次二分找到一段后缀使得这段后缀对应的行最小值位置为 k+1k+1,然后若这段后缀非空则把 k+1k+1 加入栈中。
时间复杂度 O(nlogn)O(nlogn)。
SMAWK 算法
算法的大致思路是:由于行最小值位置单调,那么只要我们确定偶数行的行最小值位置,就可以 O(m)O(m) 把奇数行的行最小值位置求出。然后利用此点递归处理。
为了使递归时 mm 也能折半,我们要实现子过程 reduce(A)
,它传入一个 n×mn×m 的完全单调矩阵 AA,删除若干一定冗余的列,并返回一个 n×min(n,m)n×min(n,m) 的子矩阵。
reduce(A)
过程维护了两个数 k,jk,j,并归纳地进行如下假设:
- 维护了 kk 个数 1≤s1<⋯<sk≤j1≤s1<⋯<sk≤j,记它们形成的集合为 SS。满足对于任意 1≤j′≤j1≤j′≤j 且 j′∉Sj′∉S,第 j′j′ 列是冗余的;对于任意 1≤t≤k1≤t≤k,A[1∼t−1],stA[1∼t−1],st 是冗余的。
考虑 j→j+1j→j+1:
-
根据引理 2.1,当我们对两列 j1<j2j1<j2 进行比较时,存在找到一个分界点 MM,使得对于任意 i≥Mi≥M 有 Ai,j1≥Ai,j2Ai,j1≥Ai,j2,即 A[M∼n],j1A[M∼n],j1 是冗余的;对于任意 i<Mi<M 有 Ai,j1<Ai,j2Ai,j1<Ai,j2,即 A[1∼M−1],j2A[1∼M−1],j2 是冗余的。
即我们能找到一个
形状覆盖掉一些冗余的部分。
那么考虑比较列 sk,j+1sk,j+1,但我们只比较 Ak,skAk,sk 和 Ak,j+1Ak,j+1,以得到 MM 和 kk 的大小关系,具体地:
- 若 Ak,sk≥Ak,j+1Ak,sk≥Ak,j+1,则 A[k∼n],skA[k∼n],sk 是冗余的,结合 A[1∼k−1],skA[1∼k−1],sk 是冗余的假设,可以知道第 kk 列是冗余的,直接 k←k−1k←k−1 并重新比较列 sk,j+1sk,j+1。
- 若 Ak,sk<Ak,j+1Ak,sk<Ak,j+1,则 A[1∼k],jA[1∼k],j 是冗余的,在 k<nk<n 的情况下将 jj 置为 sk+1sk+1。
所以通过 O(n+m)O(n+m) 的时间就能保留至多 min(n,m)min(n,m) 个非冗余的列。
那么容易分析得出 SMAWK 算法的时间复杂度是 O(n+m)O(n+m) 的。
Wilber 算法
能线性解决形如定义 1.10 中的在线决策单调性问题。
咕。
Eppstein 算法
能线性解决下面形式的交错决策单调性问题:
咕。
三、二维决策单调性
最优搜索树问题
-
定义 3.1(区间单调性):称 n×n 的矩阵 A 具有区间单调性,当且仅当对于任意 i≤i′≤j′≤j 有 wi′,j′≤wi,j。
-
定义 3.2(最优搜索树问题):考虑如下形式的动态规划:
fi,j={wi,ii=jwi,j+mini≤k<j(fi,k+fk+1,j)i<j∞i>j其中矩阵 w 满足四边形不等式和区间单调性。
对于 i<j,定义 fi,j 的最优转移点 Ki,j 为使得 fi,j=wi,j+mini≤k<j(fi,k+fk+1,j) 的最大的 k。
对于 i<j,设 fi,j,y 表示 wi,j+fi,y+fy+1,j,那么 fi,j=mini≤y<jfi,j,y。
本文将在定义 3.2 的基础上讨论如何解决该问题。
-
引理 3.3:矩阵 f 满足四边形不等式。
证明:只需证明对任意 i≤i′≤j≤j′ 都有 fi,j+fi′,j′≤fi,j′+fi′,j 即可。
对 len=j′−i 归纳,假设 len−1 成立。
-
当 i=i′ 或 j=j′ 时,等式两端相同。
-
当 i′=j=m 时,考虑证明 fi,m+fm,j′≤fi,j′+fm,m。
设 Ki,j′ 为 y,不妨设 y<m。那么:
fi,m+fm,j′≤fi,m,y+fm,j′≤(wi,m+fi,y+fy+1,m)+fm,j′=wi,m+fi,y+(fy+1,m+fm,j′)≤wi,j′+fi,y+(fy+1,j′+fm,m)=fi,j′+fm,m其中利用了区间单调性 wi,m≤wi,j′ 和归纳假设 fy+1,m+fm,j′≤fy+1,j′+fm,m。
-
当 i′<j 时,设 Ki,j′=y 和 Ki′,j=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)=(wi,j′+fi,y+fy+1,j′)+(wi′,j+fi′,z+fz+1,j)=fi,j′+fi′,j其中利用了 w 的四边形不等式 wi,j+wi′,j′≤wi,j′+wi′,j 和归纳假设的 fy+1,j+fz+1,j′≤fy+1,j′+fz+1,j。
-
-
引理 3.4:对于任意 1<i<j<n,有 Ki−1,j≤Ki,j≤Ki,j+1。
证明:只考虑 Ki,j≤Ki,j+1。构造矩阵 A:
Aj,k={wi,j+fi,k+fk+1,ji≤k<j∞otherwise那么 Ki,j=minj(A)。
结合引理 3.3、引理 1.6 和引理 1.8 可知 {wk+1,j}j,k 是完全单调矩阵,再根据引理 1.7 得到 A 是完全单调矩阵,所以 Ki,j≤Ki,j+1 得证。
根据引理 3.4,我们能在 O(n2) 的时间复杂度内解决最优搜索树问题:考虑按区间长度从小到大求 f,设当前已经求出了长度不超过 len 的 f,那么对于 fi,i+len,我们只需在 [Ki,i+len−1,Ki+1,(i+1)+len−1] 中遍历决策点即可。那么对该种 len 求出所有 f 的时间复杂度是 O(n) 的。
四、决策单调性最短路问题
决策单调性最短路问题
-
定义 4.1(决策单调性最短路问题):考虑如下形式的动态规划:
fi,j=min1≤k<jfi−1,k+wk,j其中 w 满足四边形不等式。
-
定义 4.2(最短路):在决策单调性问题中,定义 s 到 t 的一条长度为 k 的最短路为序列 p1,⋯,pk+1,使得 s=p1<p2<⋯<pk<pk+1=t 且 wp1,p2+⋯+wpk,pk+1=fk,t,其中动态规划的初始值为 f0,s=0。
结合前面的内容,直接利用 SMAWK 算法即可得到 O(nk) 的做法。我们将在下文介绍一些扩展解法。
答案凸性
但如果要求单点 fk,n 的话,我们可以有一些扩展的做法:(下面记 f(k)=fk,n)
-
引理 4.3:对于任意 1≤s<r<t≤n−1,f(r)+f(s+t−r)≤f(s)+f(t)。
证明:考虑任意一条长度为 s 的最短路方案 p1,⋯,ps+1 和任意一条长度为 t 的最短路方案 q1,⋯,qt+1。
记 v=r−s,那么一定存在 i 使得 pi≤qi+v<qi+v+1≤pi+1:可以考虑 p1,⋯,ps(s 个点)和 q1+v,⋯,qs+v+1(s+1 个点),由于 p1≤q1+v 且 qs+v+1≤ps,那么由鸽巢原理,容易找到第一个位置使得 pi≤qi+v<qi+v+1≤pi+1。
此时将两条边 {s:pi→pi+1t:qi+v→qi+v+1 端点交换,即可得到 {r:qi+v→pi+1s+t−r:pi→qi+v+1,且根据 w 的四边形不等式可知,交换后得到的边权和肯定更小。
-
引理 4.4:f(k) 关于 k 是下凸的,即对于任意 1<k<n−1 有 f(k)−f(k−1)≤f(k+1)−f(k)。
证明:引理 4.3 的直接推论。
得到了引理 4.4 后,我们就可以考虑使用 wqs 二分。假设二分后的斜率为 x,那么转化后的问题为:
显然 {wk,j−x}j,k 也满足四边形不等式,所以原问题可以利用 Wilber 算法做到 O(nlogV),其中 V 为答案上界。
-
注 4.5:当我们需要对单个 k 构造方案时,假设 f(k)−f(k−1)=f(k+1)−f(k),那么怎么切都不可能单独切到 k,此时需要用引理 4.3 的构造方法:
假设答案斜率是 x,用 x−ε 切到的是 (p,f(p)),用 x+ε 切到的是 (q,f(q)),那么 p≤k≤q 且对于任意 p<i<q 有 f(i)−f(i−1)=f(i+1)−f(i)。此时我们知道 p,q 的构造方案,那么用引理 4.3 中的构造方法构造出 k 和 p+q−k 的方案,发现此时构造出的方案的值 f(k)′,f(p+q−k)′ 一定是最优的:
- 一方面,根据引理 4.3 可知构造出来的方案满足 f(k)′+f(p+q−k)′≤f(p)+f(q)=2f(p)+(q−p)x。
- 另一方面,应当有 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(k) 且 f(p+q−k)′=f(p+q−k)。
路径单调性和不交性
利用路径单调性和不交性,可以用另一种常数较小的方法在同样 O(nk) 的时间复杂度内解决原问题。
设 x1,⋯,xk+1 是 1 到 n 的长度为 k 的字典序最小的最短路,那么定义 fk,n 的最优转移点为 Kk,n=xk。
-
引理 4.6:设 x1,⋯,xk+1 是 p1 到 q1 的长度为 k 的字典序最小的最短路,y1,⋯,yk+1 是 p2 到 q2 的长度为 k 的字典序最小的最短路,且 p1≤p2,q1≤q2。则对于任意 1≤i≤k+1,xi≤yi。
证明:假设不满足。考虑第一个 xi>yi 的位置,必然满足 xi−1≤yi−1<yi<xi。
再找到之后第一个 xj≤yj 的位置,必然满足 yj−1<xj−1<xj≤yj。
此时将两部分的端点均交换,仍然得到 p1 到 q1 和 p2 到 q2 的路径各一条(x1,⋯,xi−1,yi,⋯,yj−1,xj,⋯,xk+1 和 y1,⋯,yi−1,xi,⋯,xj−1,yj,⋯,yk+1),且根据四边形不等式这两条路径的权值和不会变大,于是它们仍然是各自的最优路径,而从 p1 到 q1 的路径的字典序变小了,矛盾。
-
引理 4.7:对于任意 k,n,有 Kk,n−1≤Kk,n。
-
引理 4.8:设 x1,⋯,xk+1 是从 1 到 n 的长度为 k 的字典序最小的最短路。则对于任意 1≤l≤r≤k+1,xl,⋯,xr 是从 xl 到 xr 的长度为 r−l 的字典序最小的最短路。
-
引理 4.9:设 x1,⋯,xk+1 是 1 到 n 的长度为 k 的字典序最小的最短路,y1,⋯,yk+2 是 1 到 n 的长度为 k+1 的字典序最小的最短路。则对于任意 1<i<k+2,xi−1≤yi≤xi。
证明:注意到 y1,⋯,yk+1 是 1 到 yk+1 的长度为 k 的字典序最小的最短路,且 x1=y1、yk+1≤xk+1,那么根据引理 4.6 可知对于任意 1≤i≤k+1 有 yi≤xi;
而 y2,⋯,yk+1 是 y2 到 n 的长度为 k 的字典序最小的最短路,且 x1≤y2、xk+1=yk+1,那么根据引理 4.6 可知对于任意 2≤i≤k+1 有 xi−1≤yi。
-
引理 4.10:对于任意 k,n,有 Kk,n≤Kk+1,n。
引理 4.7 和引理 4.10 实际上描述了决策单调性最短路问题的二维单调性,那么我们也能类似地使用最优搜索树中的方法按 n−k 从小往大依次求出所有 fk,n。这样即使不使用 SMAWK 算法,也能在 O(nk) 的复杂度内解决决策单调性最短路问题。
环上邮局
原问题在环上的一个扩展例题。
XIX Open Cup Grand Prix of Zhejiang I. 环上邮局
在一个长度为 L 的环上给定 n 个点,你需要将环恰好分为 k 段,每段的代价为该段中所有点到这些点中位数的距离和,要求最小化所有段的代价和。
先考虑枚举一个断点,然后断环为链。设 xi 表示第 i 个点的坐标,wi,j 表示将 (i,j] 分为一段的代价。
-
引理 4.11:w 满足四边形不等式。
证明:根据引理 1.5,只需对 i<j 证明 wi,j+wi+1,j+1≤wi,j+1+wi+1,j 即可。
设 Pi,j 表示 [i,j] 的中位数(如果 j−i 是奇数的话 Pi,j 在一段范围内任意可选),显然存在一种方式使得 Pi,j=Pi,j+1 且 Pi+1,j+1=Pi+1,j。
那么原式两侧抵消后剩下 |xj+1−Pi+1,j+1|≤|xj+1−Pi,j|,这无论 Pi,j,Pi+1,j+1 怎么取都是成立的。
于是现在问题就变成了决策单调性最短路问题,要求的是 fn,k,利用凸性可以做到总复杂度 O(n2logV)。
考虑进一步分析,设 0 到 n 的长度为 k 的字典序最小的最短路为 x1,⋯,xk+1。全局长度为 k 的字典序最小的最短路为 y1,⋯,yk+1,那么 yk<n≤yk+1=y1+n(这里默认断环为链时将链复制了无限次)。
-
引理 4.12:对于任意 1≤i≤k+1 有 xi≤yi。
证明:将路径 x1,⋯,xk+1 和 y1,⋯,yk+1 比较,它们都是字典序最小的,利用引理 4.6 即可。
-
引理 4.13:对于任意 1≤i<k+1 有 yi≤xi+1。
证明:假设不满足,考虑将路径 x2,⋯,xk+2 和 y1,⋯,yk+1 比较。注意我们的假设不能说明 x2,⋯,xk+2 是字典序最小的,所以不能直接用引理 4.5。但是 x2,⋯,xk+2 仍然是 x2 到 xk+2 的最短路。
找到最小的 i≥1 使得 yi>xi+1,那么必然有 yi−1≤xi<xi+1<yi。
再找到最小的 j>i 使得 yj≤xj+1 重新满足(注意 yk<n=xk+1 所以 j 存在且 j≤k),那么必然有 xj<yj−1<yj≤xj+1。
此时将两部分分别端点交换,即可得到两条新的路径。
- 若 i>1,则得到的为 y1,⋯,yi−1,xi+1,⋯,xj,yj,⋯,yk+1 和 x2,⋯,xi,yi,⋯,yj−1,xj+1,⋯,xk+2,仍然是 y1 到 yk+1 和 x2 到 xk+2 的路径,且由四边形不等式可知二者的长度和没有变大,所以二者仍然是各自的最短路。而显然 y1 到 yk+1 的路径的字典序变小了,矛盾。
- 若 i=1,则可以看成将 i=k+1 的部分也交换了,得到的为 y1,⋯,yj−1,xj+1,⋯,xk+1,yk+1 和 x2,⋯,xj,yj,⋯,yk,xk+2。同样地二者仍然是各自的最短路,而 y1 到 yk+1 的路径经过了 xk+1,这意味着这条路径可以调整为从 x1=0 开始而字典序更小,矛盾。
引理 4.12 和引理 4.13 表明,存在最优解使得每段 [xi,xi+1] 内恰好经过一个节点。那么考虑取其中最短的一段枚举每个点断环为链计算答案,这样枚举量降为 O(nk),每次进行 O(nk) 的动态规划,即可得到 O(n2) 的做法。
- 引理 4.14:设 y1,z1 使得 x1≤y1≤z1≤x2。设 y1,⋯,yk+1 是 y1 到 y1+n 的字典序最小的最短路,z1,⋯,zk+1 是 z1 到 z1+n 的字典序最小的最短路。则对于任意 1≤i≤k+1,yi≤zi。
考虑利用引理 4.14 分治,使得对于每个 y1∈[x1,x2] 求出 y1 到 y1+n 的最优解及方案。具体地,我们维护 [l1,r1]⊆[x1,x2],⋯,[lk,rk]⊆[xk,yk],表示我们要求 y1∈[l1,r1] 的最优解及方案,且已知 yi∈[li,ri]。每次取 [l1,r1] 中点作为 y1,然后做 k−1 次 SMAWK 依次求出对应的 y2,⋯,yk,然后递归到两边的问题进行处理。
做 k−1 次 SMAWK 的时间复杂度为 O(∑ri−li),所以看起来时间复杂度是 O(nlogn) 的。但实际上,由于分治时 yi 既被分到了 [li,ri] 的左半、又被分到了右半,所以分治树上同一层中所有节点 u 的 ∑ri−li+1 之和应当是:
而分治树的节点个数就是 x2−x1+1=O(n),于是总复杂度应当为 O(nlogn+nk)。
优化也和前面一样,取 xi+1−xi+1 最小的一段进行上述算法,此时 xi+1−xi+1 是 O(nk) 的,时间复杂度降为 O(nlogn)。
最后总复杂度是 O(n(logn+logV))。
五、四边形不等式的其他应用
蒙日矩阵的生成
列举了常见的蒙日矩阵。
- 引理 5.1:设 C,D 是蒙日矩阵,λ≥0。那么 C+D,λC,CT 都是蒙日矩阵。
根据引理 5.1,我们可以使用简单蒙日矩阵进行线性组合得到随机性较强的蒙日矩阵。
-
引理 5.2:设 A 是 n×m 的矩阵。那么当 A 满足下面条件之一时,A 是蒙日矩阵:
- Ax,y=min(x,y)。
- Ax,y=max(x,y)。
- Ax,y=xy。
- Ax,y=|x−y|p,p≥1。
- A 是另一非负矩阵 B 的二维前缀和。
- Ax,y=vx。
- Ax,y=f(x−y),其中 f 是下凸函数。
-
例 5.3:设 S 是有限集。设函数 f 使得对于任意 X⊆2S 有 f(X):=|⋃T∈XT|。
那么对于任意 X,Y⊆2S,有 f(X)+f(Y)≥f(X∩Y)+f(X∪Y)。证明:
|⋃T∈XT|+|⋃T∈YT|=|(⋃T∈XT)∪(⋃T∈YT)|+|(⋃T∈XT)∩(⋃T∈YT)|=|⋃T∈X∪YT|+|(⋃T∈XT)∩(⋃T∈YT)|≥|⋃T∈X∪YT|+|⋃T∈X∩YT|从而,任取 2S 中的 n 个元素,并将它们排成一列 T1,⋯,Tn。记 wi,j=f({Ti,⋯,Tj}),−w 应当满足四边形不等式(此时应用到 max 型问题)。
这类满足对于任意 X,Y⊆E 有 f(X)+f(Y)≥f(X∩Y)+f(X∪Y) 的函数 f 被称为次模函数。
例题
【UOJ672】航天飞机调度
设 fi,x 表示处理完第 i 次事件,除了一架飞机恰在 Pi 外,另一架飞机在 x 的最大价值和。有转移:
发现当 i≠j 时,wi,j+wi+1,j+1≥wi,j+1+wi+1,j,原因是平面图上 (i,j),(i+1,j+1) 这两条路径一定会相交,那么在第一个交点交换后得到长度和仍然相同的 (i,j+1),(i+1,j) 的路径,从而 wi,j+1+wi+1,j 肯定更小。
但很尬的地方在于 i=j 时这是不成立的,这也就导致了 w 并不满足四边形不等式。
处理方法是将所有点复制一份,使得编号为 n+i 的点和编号为 i 的点相同,然后将 w 变成 n×2n 的,其中 wi,j 在 i≤j<i+n 时仍然按原来定义,否则设为 −∞。
此时绿框是满足四边形不等式的,但红框不满足。但没有关系,我们仍然能证明该矩阵是完全单调矩阵,利用引理 2.1 证明即可。
UPD:这里应该写错了,红框仍然不满足完全单调矩阵的性质,正确的处理方式应该是把不同位置的 −∞ 之间也用大小关系区分开。
那么我们要求的是矩阵的第 Pi 列和第 n+Pi 列的列最大值,对矩阵进行的操作可能有全局加和单行加(注意此处的矩阵的第 y 行第 z 列实际上维护的是 fi,y+wy,z)。
根据完全单调矩阵的性质,列最大值位置应当是不降的。那么为每一行维护一个区间 [li,ri],表示第 li∼ri 列以该行作为列最大值位置。当单行加时,注意到增加的值非负,所以该行的 [li,ri] 只会变宽,二分左右端点变宽了多少即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现