四边形不等式优化 学习笔记
四边形不等式优化 学习笔记
基础知识
考虑最简单的情形,我们要解决如下一系列最优化问题。
这里假设 \(w(i,j)\) 可以 \(\mathcal O(1)\) 算出。
约定:
动态规划的状态转移方程经常可以写作一系列最优化问题的形式。这些问题含有参数 \(i\),问题的目标函数和可行域都可以依赖于 \(i\)。每一个问题都是在给定参数 \(i\) 时,选取某个可行解 \(j\) 来最小化目标函数的取值。为表述方便,下文将参数为 \(i\) 的最优化问题简称为「问题 \(i\)」,该最优化问题的可行解 \(j\) 称为「决策 \(j\)」,目标函数在最优解处取得的值则称为「状态 \(i\)」。同时,记问题 \(i\) 对应的最小最优决策点(所有最优决策点中最小的)为 \(opt(i)\)。
- 
决策单调性: \(\forall i_1\le i_2,opt(i_1)\le opt(i_2)\) 
- 
四边形不等式:\(\forall a\le b\le c\le d,w(a,c)+w(b,d)\le w(a,d)+w(b,c)\) 
四边形不等式简记为「交叉小于包含」,名字来源于下图。

因为四边形不等式可以写成:当 \((a<b)\) 时,
所以可以理解为 \(w\) 的二维混合差分 \(\Delta_i\Delta_j w(i,j)\) 非正,连续形式为 \(w\) 的二维混合偏导数 \(\frac{\partial^2}{\partial x\partial y} w(x,y)\) 非正,这可用于证明四边形不等式。
定理1:若 \(w\) 满足四边形不等式,则问题 (1) 满足决策单调性。
证明:若存在 \(a\le b\) 使得 \(A=opt(a)>opt(b)=B\)。则有 \(w(A,a)<w(B,a)\) 且 \(w(B,b)\le w(A,b)\),联立得到 \(w(A,a)+w(B,b)<w(B,a)+w(A,b)\),因为 \(B<A<a\le b\),这与四边形不等式矛盾,所以原定理成立。
求解方式
分治(静态)
要求解所有状态,只需要求解所有最优决策点。为了对所有 \(1 \leq i \leq n\) 求解 \(\mathop{\mathrm{opt}}(i)\),首先计算 \(\mathop{\mathrm{opt}}(n/2)\),而后分别计算 \(1 \leq i < n/2\) 和 \(n/2 < i \leq n\) 上的 \(\mathop{\mathrm{opt}}(i)\),注意此时已知前半段的 \(\mathop{\mathrm{opt}}(i)\) 必然位于 \(1\) 和 \(\mathop{\mathrm{opt}}(n/2)\) 之间(含端点),而后半段的 \(\mathop{\mathrm{opt}}(i)\) 必然位于 \(\mathop{\mathrm{opt}}(n/2)\) 和 \(\mathop{\mathrm{opt}}(n)\) 之间(含端点)。对于两个子区间,也类似处理,直至计算出每个问题的最优决策。在分治的过程中记录搜索的上下边界,就可以保证算法复杂度控制在 \(O(n\log n)\)。递归树层数为 \(O(\log n)\),而每层中,单个决策点至多计算两次,所以总的计算次数是 \(O(n\log n)\)。
求解一个单调序列都可以这么搞。
int w(int j, int i);
void DP(int l, int r, int k_l, int k_r) {
  int mid = (l + r) / 2, k = k_l;
  // 求状态f[mid]的最优决策点
  for (int j = k_l; j <= min(k_r, mid - 1); ++j)
    if (w(j, mid) < w(k, mid)) k = j;
  f[mid] = w(k, mid);
  // 根据决策单调性得出左右两部分的决策区间,递归处理
  if (l < mid) DP(l, mid - 1, k_l, k);
  if (r > mid) DP(mid + 1, r, k, k_r);
}
分治(动态)
算法流程
配合CDQ优化DP可以做到动态处理 \(\mathcal O(n\log^2 n)\)。但是有 \(\mathcal O(n\log n)\) 的算法。
假设我们有一个已经算出答案的区间 \(A=[l,r]\),设区间 \(S\) 当前算出的答案为 \(f_S\)。执行以下流程:
- 
取一段待更新区间 \(B=[r+1,\min(n,2r-l+1)]\) (不考虑取 \(\min (n)\),这段区间的长度与 \([l,r]\) 相等)。 
- 
设一个 \(g_B\),用“分治(静态)”算法处理贡献 \(f_A\to g_B\),将决策点序列设作 \(\{opt1\}\)。有 \(opt1_i\in A\)。 
- 
设一个 \(f_B\) ,用“分治(静态)“处理贡献 \(f_{A}\cup g_B\to f_B\) 这里 \(\cup\) 表示序列 \(f_A\) 与 \(g_B\) 拼成的序列,将决策点序列设作 \(\{opt2\}\)。有 \(opt2_i\in A\cup B\)。 
- 
找到最小的 \(i\in B\) 使得 \(opt1_i\ne opt2_i\)。 - 
若存在,这时一定有 \(opt2_i\in B\),则令 \(l\gets r+1,r\gets i\) 。 
- 
否则,令 \(r\gets \min(n,2r-l+1)\)。 
 
- 
- 
将此时 \(f_{[l,r]}\) 当作答案,然后从步骤1重复执行,直到 \(r=n\)。 
一开始 \([l,r]=[1,1]\)。
正确性证明
只需要证明第4步找到的 \([l,r]\) 一定算出了正确的答案。归纳证明:
我们称”算出了最终的答案“为”好了“
- 
\(f_{[l,l]}\) 一定在第2步好了 
- 
若 \(f_{[l,i-1]}\) 在第2步好了,那么 \(i\) 在第3步一定好了。 那么若 \(opt1_i=opt2_i\),即 \(g_{[i,i]}\to f_{[i,i]}\) 没有发生变化,那么 \(i\) 在第2步一定好了。 
综上,\([l,r]\) 一定算出了答案。
复杂度证明
设 \(r-l+1=x\),则每次操作的复杂度为 \(\mathcal O(x\log x)\)。
因为每次操作要么使得 \(r\gets r+x\),要么使得 \(l\gets l+x\)。
所以总复杂度为 \(\mathcal O(n\log n)\)。
二分队列(动态)
用单调队列维护 \(opt(i)\) 序列,每次更新出一个 \(i\) 时不断判断队尾的元素的当前最小最优决策点是否能都能变为 \(i\),部分能则二分。复杂度 \(\mathcal O(n\log n)\)。
区间分拆问题
即有转移式:
注意到只要 \(w(j,i)\) 满足四边形不等式,则 \(W(j,i)=f(j-1)+w(j,i)\) 也满足四边形不等式,因为 \(f(j-1)\) 在混合差分中将被消去。由于 \(f(i)\) 以来与前面的子问题,只能用二分队列的方式求解,复杂度 \(\mathcal O(n\log n)\)。
限制区间个数的情形
即有转移式:
同理每一层依然满足四边形不等式,可以分治计算,复杂度 \(\mathcal O(mn\log n)\)。
定理2: 若 \(w\) 满足四边形不等式,则问题 (2) 满足 \(opt(k-1,i)\le opt(k,i)\le opt(k,i+1)\)
证明: 第二个不等式只是第 \(k\) 层的决策单调性。关键在于第一个不等式。
下证 \(\mathop{\mathrm{opt}}(k,i) \leq \mathop{\mathrm{opt}}(k+1,i)\)。假设有如下两个区间 \([1,i]\) 的分划(逆序标号):\([a_{k},d_{k}],\cdots,[a_1,d_1]\) 和 \([b_{k+1},c_{k+1}],\cdots,[b_1,c_1]\)。这里,从右向左考虑可能的分划,右端点是左端点对应问题的最小最优决策。例如,\(d_j\) 和 \(c_j\) 分别是从右往左考虑时,将 \([a_j,i]\) 和 \([b_j,i]\) 分成 \(j\) 段左起第 一个区间右端点的最小最优决策。考虑从右往左的dp过程,根据决策单调性,如果 \(a_{j-1} > b_{j-1}\),亦即 \(d_j > c_j\),那么必然有 \(a_j > b_j\)。由此,如果所证不成立,则有 \(a_1 > b_1\)。进而可以归纳地证明 \(a_{k} > b_{k}\)。这显然与所设矛盾。由此得证。
利用这一点,可以做到复杂度为 \(\mathcal O(n(n+m))\)。因为对于问题 \((i,k)\) 只需要考虑 \(\mathop{\mathrm{opt}}(k-1,i) \leq j \leq \mathop{\mathrm{opt}}(k,i+1)\) 中的决策,所以每条次对角线上(即 \(i-k\) 为一定值)的问题所需遍历的决策总数为 \(O(n)\) 的。这样的对角线共计 \((n+m)\) 条,故而总的时间复杂度为 \(O(n(n+m))\)。
定理3: 若 \(w\) 满足四边形不等式,则问题的最优解 \(g(k):=f(n,k)\) 是关于 \(k\) 的凸函数。
证明:
下证 \(g(k-1) + g(k+1) \ge 2g(k)\)。为此,考虑长度为 \((k-1)\) 段和 \((k+1)\) 段的最优分划,分别是 \([a_1,d_1],\cdots,[a_{k-1},d_{k-1}]\) 和 \([b_1,c_1],\cdots,[b_{k+1},c_{k+1}]\)。取最小的 \(1 \leq j \leq k-1\) 使得 \(c_{j+1} \leq d_j\),其存在性可由 \(c_{k} < n = d_{k-1}\) 推知。根据其最小性得知,\(b_{j+1} > a_j\)。所以,\(a_j < b_{j+1} \leq c_{j+1} \leq d_j\)。与上文类似,交换两个现有分拆的后半段,可以得到如下两个区间分拆:
两个所得区间都是 \(k\) 段的,所以由最优性条件可知:
这里第二个不等式正是四边形不等式。所求凸性由此得证。
这一结论保证了可以通过 wqs 二分的方法解决此问题。每次去掉个数限制后可以 \(\mathcal O(n\log n)\) 解决,设斜率变化范围大小为 \(C\),则复杂度为 \(\mathcal O(n\log n\log C)\)。
区间合并问题
即有转移式:
- 区间包含单调性: \(\forall a\le b\le c\le d,w(b,c)\le w(a,d)\) 越小越优。
引理 1: 若 \(w\) 满足区间包含单调性和四边形不等式,则状态 \(f(j,i)\) 满足四边形不等式。
定理4: 若 \(w\) 满足区间包含单调性和四边形不等式,则问题 (3) 中最小最优决策 \(\mathop{\mathrm{opt}}(j,i)\) 满足 \(opt(l-1,r)\le opt(l,r)\le opt(l,r+1)\)。
复合型四边形不等式性质
定理 5:设 \(h(x)\) 是一个单调增加的下凸函数,若函数 \(w(j,i)\) 满足四边形不等式与区间包含单调性,则复合函数 \(h(w(j,i))\) 也满足四边形不等式和区间包含单调性。
证明: 由于 \(h(x)\) 单调,\(h(w(j,i))\) 自然保持对区间包含的单调性。考虑证明四边形不等式。
对 \(h(w)\) 求二阶混合偏导数有
其中 \(h''(w)\ge 0,h'(w)\ge 0\),由区间包含单调性得 \(\frac{\partial w}{\partial x}\le 0,\frac{\partial w}{\partial y}\ge 0\),由四边形不等式得:\(\frac{\partial^2 w}{\partial y \partial x}\le 0\)。于是定理成立。
上述式子可以导出离散形式,所以在证明前缀和与差分时,可以使用更严格的微积分证明
定理 6:设 \(h(x)\) 是一个下凸函数,若函数 \(w(j,i)\) 满足四边形恒等式与区间包含单调性,则复合函数 \(h(w(j,i))\) 也满足四边形不等式。\(w\implies w^2\)。
证明: 同理对 \(h(w)\) 求二阶混合偏导数后得证:
其他满足四边形不等式的函数
- \(w(j,i)=\sum\limits_{p_1,\cdots,p_m}[A(p_1,\cdots,p_m)]\) 即区间满足条件对数,\(m=2\) 时可以用类莫队双指针P5574 [CmdOI2019] 任务分配问题 - 洛谷
特别强调
本文是建立在求 \(\min\) 的情况下讨论,如果时求 \(\max\),只需有如下变动:
- 
四边形不等式改为:「交叉大于包含」,所以总的就是「交叉优于包含」。 
- 
定理 5,定理 6 的下凸需改为上凸,所以总的就是「与 \(g(k)\) 的WQS二分凸性相同」。 
| 性质 | 离散意义 | 连续意义 | 
|---|---|---|
| 单调性 | \(a_{i-1}\le a_{i}\) | \(f'(x)\ge 0\) | 
| 凸型 | \(a_i-a_{i-1}\le a_{i+1}-a_i\) | \(f''(x)\ge 0\) | 
| 区间包含单调性 | \(\Delta_xw(x,y)\le 0,\Delta _yw(x,y)\ge 0\) | \(\frac{\partial}{\partial x}w(x,y)\le 0,\frac{\partial}{\partial y}w(x,y)\ge 0,\) | 
| 四边形不等式 | \(\Delta_x\Delta_y w(x,y)\le 0\) | \(\frac{\partial^2}{\partial x\partial y}w(x,y)\le 0\) | 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号