Loading

四边形不等式优化 学习笔记

四边形不等式优化 学习笔记

基础知识

考虑最简单的情形,我们要解决如下一系列最优化问题。

\[f(i)=\min_{1\le j\le i}w(i,j)\tag{1} \]

这里假设 \(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)\) 时,

\[\begin{aligned}w(a,b)+w(a+1,b+1)\le w(a+1,b)+w(a,b+1)\\\implies w(a+1,b+1)-w(a,b+1)-w(a+1,b)+w(a,b)\le 0\end{aligned} \]

所以可以理解为 \(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\)。执行以下流程:

  1. 取一段待更新区间 \(B=[r+1,\min(n,2r-l+1)]\) (不考虑取 \(\min (n)\),这段区间的长度与 \([l,r]\) 相等)。

  2. 设一个 \(g_B\),用“分治(静态)”算法处理贡献 \(f_A\to g_B\),将决策点序列设作 \(\{opt1\}\)。有 \(opt1_i\in A\)

  3. 设一个 \(f_B\) ,用“分治(静态)“处理贡献 \(f_{A}\cup g_B\to f_B\) 这里 \(\cup\) 表示序列 \(f_A\)\(g_B\) 拼成的序列,将决策点序列设作 \(\{opt2\}\)。有 \(opt2_i\in A\cup B\)

  4. 找到最小的 \(i\in B\) 使得 \(opt1_i\ne opt2_i\)

    1. 若存在,这时一定有 \(opt2_i\in B\),则令 \(l\gets r+1,r\gets i\)

    2. 否则,令 \(r\gets \min(n,2r-l+1)\)

  5. 将此时 \(f_{[l,r]}\) 当作答案,然后从步骤1重复执行,直到 \(r=n\)

一开始 \([l,r]=[1,1]\)

正确性证明

只需要证明第4步找到的 \([l,r]\) 一定算出了正确的答案。归纳证明:

我们称”算出了最终的答案“为”好了“

  1. \(f_{[l,l]}\) 一定在第2步好了

  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)\)

区间分拆问题

即有转移式:

\[f(i)=\min_{1\le j\le i}f(j-1)+w(j,i) \]

注意到只要 \(w(j,i)\) 满足四边形不等式,则 \(W(j,i)=f(j-1)+w(j,i)\) 也满足四边形不等式,因为 \(f(j-1)\) 在混合差分中将被消去。由于 \(f(i)\) 以来与前面的子问题,只能用二分队列的方式求解,复杂度 \(\mathcal O(n\log n)\)

限制区间个数的情形

即有转移式:

\[f(k,i)=\min_{1\le j \le i}f(k-1,j-1)+w(j,i)\tag{2} \]

同理每一层依然满足四边形不等式,可以分治计算,复杂度 \(\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\)。与上文类似,交换两个现有分拆的后半段,可以得到如下两个区间分拆:

\[\begin{aligned} & [a_1,d_1],\cdots,[a_{j-1},d_{j-1}],[a_j,c_{j+1}],[b_{j+2},c_{j+2}],\cdots,[b_{k+1},c_{k+1}], \\ & [b_1,c_1],\cdots,[b_j,c_j],[b_{j+1},d_j],[a_{j+1},d_{j+1}],\cdots,[a_{k-1},d_{k-1}]. \end{aligned} \]

两个所得区间都是 \(k\) 段的,所以由最优性条件可知:

\[\begin{aligned} 2g(k) &\le w(a_1,d_1) + \cdots + w(a_{j-1},d_{j-1}) + w(a_j,c_{j+1}) + w(b_{j+2},c_{j+2}) + \cdots + w(b_{k+1},c_{k+1}) \\ &\quad + w(b_1,c_1) + \cdots + w(b_j,c_j) + w(b_{j+1},d_j) + w(a_{j+1},d_{j+1}) + \cdots + w(a_{k-1},d_{k-1}) \\ &\le w(a_1,d_1) + \cdots + w(a_{j-1},d_{j-1}) + w(a_j,d_j) + w(a_{j+1},d_{j+1}) + \cdots + w(a_{k-1},d_{k-1}) \\ &\quad + w(b_1,c_1) + \cdots + w(b_j,c_j) + w(b_{j+1},c_{j+1}) + w(b_{j+2},c_{j+2}) + \cdots + w(b_{k+1},c_{k+1}) \\ &= g(k-1) + g(k+1). \end{aligned} \]

这里第二个不等式正是四边形不等式。所求凸性由此得证。

这一结论保证了可以通过 wqs 二分的方法解决此问题。每次去掉个数限制后可以 \(\mathcal O(n\log n)\) 解决,设斜率变化范围大小为 \(C\),则复杂度为 \(\mathcal O(n\log n\log C)\)

区间合并问题

即有转移式:

\[f(l,r)=\min_{l\le k<r}f(l,k)+f(k+1,r)+w(l,r)\tag{3} \]

  • 区间包含单调性: \(\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)\) 求二阶混合偏导数有

\[\frac{\partial^2}{\partial x\partial y}h(w)=h''(w) \frac{\partial w}{\partial x} \frac{\partial w}{\partial y} + h'(w) \frac{\partial^2 w}{\partial y \partial x}\le 0 \]

其中 \(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)\) 求二阶混合偏导数后得证:

\[\frac{\partial^2}{\partial x\partial y}h(w)=h''(w) \frac{\partial w}{\partial x} \frac{\partial w}{\partial y} + h'(w) \frac{\partial^2 w}{\partial y \partial x}=h''(w) \frac{\partial w}{\partial x} \frac{\partial w}{\partial y}\le 0 \]

其他满足四边形不等式的函数

特别强调

本文是建立在求 \(\min\) 的情况下讨论,如果时求 \(\max\),只需有如下变动:

  1. 四边形不等式改为:「交叉大于包含」,所以总的就是「交叉优于包含」。

  2. 定理 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\)

参考

四边形不等式优化 - OI Wiki

【学习笔记】四边形不等式优化 - _lhy - 博客园

posted @ 2025-05-08 10:20  lupengheyyds  阅读(94)  评论(0)    收藏  举报