【算法】动态规划(1):四边形不等式

问题引入

  如果你学习过算法这门课程,一定知道动态规划这种算法思想,像背包问题、最长公共子序列LCS、最长上升子序列LIS等经典问题,都可以借助动态规划解决。习惯上,人们常常把动态规划简称为“DP”。如果你做过一定量的算法题,相信你一定体会过被DP支配的恐惧:区间DP、背包DP、树形DP、数位DP、状压DP······当然,还有传说中的插头DP,这种东西我是不敢碰的,所以略去不提。
  对于一道比较常规(简单)的DP算法题,我们一般需要定义状态,分析出状态转移方程,设定初值,这样我们就可以愉快地用代码实现它了。难一点的题目,还需要利用数据结构、斜率、四边形不等式等手段去优化它们。我们今天要介绍的四边形不等式,就是这样的一种优化DP的方法。本文旨在对四边形不等式优化DP的原理加以说明,进行公式推导,其他和相关的细节可以参考后面介绍四边形不等式的两个链接:(链接)知乎文章(链接)OI-Wiki
  我们这里先着重介绍四边形不等式对某些特殊的二维区间DP的优化原理。对于下面这种形式的DP状态转移方程:

F [ i , j ] = min ⁡ i ⩽ k < j { F [ i , k ] + F [ k + 1 , j ] } + w ( i , j ) F[i,j]=\min\limits_{i\leqslant k<j} \{F[i,k]+F[k+1,j]\}+w(i,j) F[i,j]=ik<jmin{F[i,k]+F[k+1,j]}+w(i,j)

一共 n 2 n^2 n2 个状态,每次状态转移需要 O ( n ) \mathrm{O(n)} O(n) 的时间,我们可以在 O ( n 3 ) \mathrm{O(n^3)} O(n3) 的时间内求出所有的 F [ i , j ] F[i,j] F[i,j]。对于 n ⩽ 100 n\leqslant100 n100 的数据规模,这种复杂度已经足够。可是,如果题目告诉你 n ⩽ 1000 n\leqslant1000 n1000 ,你就不得不去琢磨一个 O ( n 2 ) \mathrm{O(n^2)} O(n2) 的算法。

优化思想

  这时,我们就需要把目光放到转移方程中不起眼的 w ( i , j ) w(i,j) w(i,j) 上面了。我们把 w ( i , j ) w(i,j) w(i,j) 看成定义在整数集上的二元函数,如果 w ( i , j ) w(i,j) w(i,j) 满足以下两个条件:

   1. (区间包含单调性)对于任意的 a ⩽ b ⩽ c ⩽ d a\leqslant b\leqslant c\leqslant d abcd,满足 w ( a , d ) ⩾ w ( b , c ) w(a,d)\geqslant w(b,c) w(a,d)w(b,c);
   2. (四边形不等式)对于任意的 a ⩽ b ⩽ c ⩽ d a\leqslant b\leqslant c\leqslant d abcd,有

w ( a , d ) + w ( b , c ) ≥ w ( a , c ) + w ( b , d ) w(a,d)+w(b,c)\geq w(a,c)+w(b,d) w(a,d)+w(b,c)w(a,c)+w(b,d)

那么就可以证明,使状态转移方程中 F [ i , k ] + F [ k + 1 , j ] F[i,k]+F[k+1,j] F[i,k]+F[k+1,j] 取最小值的 k k k 具备某种单调性,于是就可以缩小转态转移时 k k k搜索范围。这样一来,最终就可以把计算 F [ i , j ] F[i,j] F[i,j] n 2 n^2 n2 个状态的时间复杂度优化至 O ( n 2 ) \mathrm{O(n^2)} O(n2)
  上面是对四边形不等式优化DP的原理的粗略说明,下面将对此加以展开,并进行必要的数学推导。数学推导是理解四边形不等式关键,也是它的难点所在(以及恶心的地方)。
  在进行正式的展开之前,我们先理解一下前面提到的 w ( i , j ) w(i,j) w(i,j) 需要满足的两个条件,条件 1 被称作区间包含单调性,由于 a ⩽ b ⩽ c ⩽ d a\leqslant b\leqslant c\leqslant d abcd,所以区间 [ b , c ] [b,c] [b,c] 包含于区间 [ a , d ] [a,d] [a,d] w ( b , c ) w(b,c) w(b,c) w ( a , d ) w(a,d) w(a,d) 的大小关系与区间包含关系的方向是一致的,我们可以简单的理解为部分不大于整体条件 2 中的四边形不等式初看没有头绪,前面链接的知乎文章把它与几何四边形中的不等式做了类比,OI-Wiki把它总结为“交叉小于包含”,我觉得这两种解释无助于理解它的本质,对它做下面几种变形: w ( a , d ) − w ( a , c ) ⩾ w ( b , d ) − w ( b , c ) w(a,d)-w(a,c)\geqslant w(b,d)-w(b,c) w(a,d)w(a,c)w(b,d)w(b,c) w ( a , d ) − w ( b , d ) ≥ w ( a , c ) − w ( b , c ) w(a,d)-w(b,d)\geq w(a,c)-w(b,c) w(a,d)w(b,d)w(a,c)w(b,c)这样变形之后是不是可以找到一点感觉了?对第一个式子,把二元函数 w w w 中的第二个变元看成常量,令 H 1 ( x ) = w ( x , d ) − w ( x , c ) H_{1}(x) = w(x, d) - w(x,c) H1(x)=w(x,d)w(x,c),对任意 a ⩽ b a\leqslant b ab,有 H 1 ( a ) ⩾ H 1 ( b ) H_{1}(a)\geqslant H_{1}(b) H1(a)H1(b),可以看出 H 1 ( x ) H_{1}(x) H1(x) 单调递减;类似地,对第二个式子,令 H 2 ( x ) = w ( a , x ) − w ( b , x ) H_{2}(x)=w(a,x)-w(b,x) H2(x)=w(a,x)w(b,x),对任意 c ⩽ d c\leqslant d cd,有 H 2 ( c ) ⩽ H 2 ( d ) H_{2}(c)\leqslant H_{2}(d) H2(c)H2(d),显然 H 2 ( x ) H_2(x) H2(x) 单调递增。也就是说,四边形不等式中隐含着 在两个维度的单调性。而这个单调性正是优化状态转移的关键所在,后面相关定理的推导也将经常用到四边形不等式上面的两个变形。

三个结论及其概述

  下面,我们先给出三个结论,作为四边形不等式优化本文提出的 D P \mathrm{DP} DP 状态转移方程的理论根据。理清了给出的三个结论的先后递进关系后,再展开它们的证明过程。

结论 1 1\quad 1(四边形不等式的等价表示) w ( x , y ) w(x,y) w(x,y) 是定义在整数集合上的二元函数,则 w ( x , y ) w(x,y) w(x,y) 满足四边形不等式的充分必要条件是对于定义域内任意整数 a , b ( a < b ) a,b(a<b) a,b(a<b),都有

w ( a , b + 1 ) + w ( a + 1 , b ) ⩾ w ( a , b ) + w ( a + 1 , b + 1 ) w(a,b+1)+w(a+1,b)\geqslant w(a,b)+w(a+1,b+1) w(a,b+1)+w(a+1,b)w(a,b)+w(a+1,b+1).

结论 1 1 1 给出了四边形不等式的一种等价表示,在推导后面两个结论时,我们往往倾向于使用结论1里的这种四边形不等式。因为这种四边形不等式的等价形式只用到了两个变元 a a a b b b,可以降低讨论的复杂度。

结论 2 2\quad 2在状态转移方程 F [ i , j ] = min ⁡ i ⩽ k < j { F [ i , k ] + F [ k + 1 , j ] } + w ( i , j ) F[i,j]=\min\limits_{i\leqslant k<j} \{F[i,k]+F[k+1,j]\}+w(i,j) F[i,j]=ik<jmin{F[i,k]+F[k+1,j]}+w(i,j) 中,若 w w w 满足区间包含单调性和四边形不等式,则 F F F 也满足四边形不等式,即

F ( i , j + 1 ) + F ( i + 1 , j ) ⩾ F ( i , j ) + F ( i + 1 , j + 1 ) F(i,j+1)+F(i+1,j)\geqslant F(i,j)+F(i+1,j+1) F(i,j+1)+F(i+1,j)F(i,j)+F(i+1,j+1).

实际上,结论 2 2 2 F F F 满足的四边形不等式,在形式上就利用了结论1的结果。结论 2 2 2 与下面的结论 3 3 3 是密切联系在一起的。为了方便叙述,记 p [ i , j ] p[i,j] p[i,j] F [ i , j ] F[i,j] F[i,j] 取到最小值时对应 k k k 的值,也就是说有: F [ i , j ] = F [ i , p [ i , j ] ] + F [ p [ i , j ] + 1 , j ] + w ( i , j ) F[i,j]=F[i,p[i,j]]+F[p[i,j]+1,j]+w(i,j) F[i,j]=F[i,p[i,j]]+F[p[i,j]+1,j]+w(i,j)于是,结论 3 3 3 如下:

结论 3 3\quad 3在状态转移方程 F [ i , j ] = min ⁡ i ⩽ k < j { F [ i , k ] + F [ k + 1 , j ] } + w ( i , j ) F[i,j]=\min\limits_{i\leqslant k<j} \{F[i,k]+F[k+1,j]\}+w(i,j) F[i,j]=ik<jmin{F[i,k]+F[k+1,j]}+w(i,j) 中,若 F F F 满足四边形不等式,则对任意 i < j i < j i<j,有

p [ i , j − 1 ] ⩽ p [ i , j ] ⩽ p [ i + 1 , j ] p[i,j-1]\leqslant p[i,j]\leqslant p[i+1,j] p[i,j1]p[i,j]p[i+1,j].

结论 3 3 3 给出了使 F [ i , j ] F[i,j] F[i,j] 最小的 k k k 值的上界 p [ i + 1 , j ] p[i+1,j] p[i+1,j] 和下界 p [ i , j − 1 ] p[i,j-1] p[i,j1],这可以显著缩小 k k k 的搜索范围,这样沿着一条对角线从左上方到右下方依次计算 F [ 1 , m ] F[1,m] F[1,m] F [ 2 , m + 1 ] F[2,m+1] F[2,m+1],···, F [ n − m + 1 , n ] F[n-m+1,n] F[nm+1,n] 需要枚举 k k k 的总次数为:
∑ i = 1 n − m + 1 ( p [ i + 1 , m + i − 1 ] − p [ i , m + i − 2 ] + 1 ) = ( p [ n − m + 2 , n ] − p [ 1 , m − 1 ] ) + n − m + 1 ⩽ n + n − m + 1 = O ( n ) \begin{split} &\quad\displaystyle\sum_{i=1}^{n-m+1}(p[i+1,m+i-1]-p[i,m+i-2]+1) \\ &= (p[n-m+2,n]-p[1,m-1])+n-m+1\\ &\leqslant n + n-m+1 \\ &= \mathrm{O(n)} \end{split} i=1nm+1(p[i+1,m+i1]p[i,m+i2]+1)=(p[nm+2,n]p[1,m1])+nm+1n+nm+1=O(n)而一共有 O ( n ) \mathrm{O(n)} O(n) 个对角线,因此最终计算出所有 F [ i , j ] F[i,j] F[i,j] 的总的时间复杂度就优化到了 O ( n 2 ) \mathrm{O(n^2)} O(n2)

结论的详细证明

结论 1 1 1 的证明

  接下来,我们来依次证明上面的三个结论。
  结论 1 1\quad 1 w ( x , y ) w(x,y) w(x,y) 是定义在整数集合上的二元函数,则 w ( x , y ) w(x,y) w(x,y) 满足四边形不等式的充分必要条件是对于定义域内任意整数 a , b ( a < b ) a,b(a<b) a,b(a<b),都有

w ( a , b + 1 ) + w ( a + 1 , b ) ⩾ w ( a , b ) + w ( a + 1 , b + 1 ) w(a,b+1)+w(a+1,b)\geqslant w(a,b)+w(a+1,b+1) w(a,b+1)+w(a+1,b)w(a,b)+w(a+1,b+1).

证明: \quad 必要性
\qquad\quad w ( x , y ) w(x,y) w(x,y)满足四边形不等式, a < a + 1 ⩽ b < b + 1 a<a+1\leqslant b<b+1 a<a+1b<b+1,于是必要性显然成立。
\qquad\quad 充分性
\qquad\quad a < c a<c a<c,有 w ( a , c + 1 ) + w ( a + 1 , c ) ⩾ w ( a , c ) + w ( a + 1 , c + 1 ) w(a,c+1)+w(a+1,c)\geqslant w(a,c)+w(a+1,c+1) w(a,c+1)+w(a+1,c)w(a,c)+w(a+1,c+1). 即 w ( a , c + 1 ) − w ( a , c ) ⩾ w ( a + 1 , c + 1 ) − w ( a + 1 , c ) ⩾ w ( a + 2 , c + 1 ) − w ( a + 2 , c ) ⋯ ⩾ w ( c , c + 1 ) − w ( c , c ) . \begin{split} &w(a,c+1)-w(a,c) \\ \geqslant& w(a+1,c+1)-w(a+1,c) \\ \geqslant& w(a+2,c+1)-w(a+2,c) \\ &\cdots \\ \geqslant& w(c,c+1)-w(c,c). \end{split} w(a,c+1)w(a,c)w(a+1,c+1)w(a+1,c)w(a+2,c+1)w(a+2,c)w(c,c+1)w(c,c). \qquad\quad 于是 ∀   b ∈ [ a , c ] \forall\ b\in[a,c]  b[a,c],都有 w ( a , c + 1 ) − w ( a , c ) ⩾ w ( b , c + 1 ) − w ( b , c ) w(a,c+1)-w(a,c)\geqslant w(b,c+1)-w(b,c) w(a,c+1)w(a,c)w(b,c+1)w(b,c).
\qquad\quad 变形后可以得到: w ( a , c ) − w ( b , c ) ⩽ w ( a , c + 1 ) − w ( b , c + 1 ) . w(a,c)-w(b,c)\leqslant w(a,c+1)-w(b,c+1). w(a,c)w(b,c)w(a,c+1)w(b,c+1).

\qquad\quad 对任意 d ⩾ c d\geqslant c dc,不断运用上式,可以得到: w ( a , c ) − w ( b , c ) ⩽ w ( a , c + 1 ) − w ( b , c + 1 ) ⩽ w ( a , c + 2 ) − w ( b , c + 2 ) ⋯ ⩽ w ( a , d ) − w ( b , d ) \begin{split} &w(a,c)-w(b,c) \\ \leqslant& w(a,c+1)-w(b,c+1) \\ \leqslant& w(a,c+2)-w(b,c+2) \\ &\cdots \\ \leqslant& w(a,d)-w(b,d) \end{split} w(a,c)w(b,c)w(a,c+1)w(b,c+1)w(a,c+2)w(b,c+2)w(a,d)w(b,d) \qquad\quad w ( a , d ) + w ( b , c ) ⩾ w ( a , c ) + w ( b , d ) w(a,d)+w(b,c)\geqslant w(a,c)+w(b,d) w(a,d)+w(b,c)w(a,c)+w(b,d). 充分性得证.
\qquad\quad 于是结论 1 1 1 得证.

结论 2 2 2 的证明

  结论 2 2 2 是这三个结论中证明最麻烦的一个,涉及到多种情形需要分类讨论,OI-Wiki中用非常专业的数学语言表述了它,并且把它的证明放在了第一个,这无疑是非常劝退的。因此,我的建议是先理解结论 3 3 3 的证明,然后再回来啃结论 2 2 2。当然,如果你对证明过程没有兴趣,可以Pass。

  结论 2 2\quad 2 在状态转移方程 F [ i , j ] = min ⁡ i ⩽ k < j { F [ i , k ] + F [ k + 1 , j ] } + w ( i , j ) F[i,j]=\min\limits_{i\leqslant k<j} \{F[i,k]+F[k+1,j]\}+w(i,j) F[i,j]=ik<jmin{F[i,k]+F[k+1,j]}+w(i,j) 中,若 w w w 满足区间包含单调性和四边形不等式,则 F F F 也满足四边形不等式,即

F ( i , j + 1 ) + F ( i + 1 , j ) ⩾ F ( i , j ) + F ( i + 1 , j + 1 ) F(i,j+1)+F(i+1,j)\geqslant F(i,j)+F(i+1,j+1) F(i,j+1)+F(i+1,j)F(i,j)+F(i+1,j+1).

证明: \quad 用数学归纳法证明.

\qquad\quad ( 1 )    j = i + 1 时 (1)\ \ j=i+1时 (1)  j=i+1 F [ i , j ] = F [ i , i ] + F [ i + 1 , i + 1 ] + w ( i , i + 1 ) . F[i,j]=F[i,i]+F[i+1,i+1]+w(i,i+1). F[i,j]=F[i,i]+F[i+1,i+1]+w(i,i+1).

\qquad\quad F [ i , j + 1 ] F[i,j+1] F[i,j+1] 有两种可能,需要分开讨论.

\qquad\quad 1 ∘    \mathbf{1^{\circ}}\; 1 F [ i , j + 1 ] = F [ i , i ] + F [ i + 1 , i + 2 ] + w ( i , i + 2 ) F[i,j+1]=F[i,i]+F[i+1,i+2]+w(i,i+2) F[i,j+1]=F[i,i]+F[i+1,i+2]+w(i,i+2),则    F [ i , j + 1 ] − F [ i , j ] =   F [ i , i + 2 ] − F [ i , i + 1 ] =   F [ i + 1 , i + 2 ] − F [ i + 1 , i + 1 ] +   w ( i , i + 2 ) − w ( i , i + 1 ) ⩾   F [ i + 1 , i + 2 ] − F [ i + 1 , i + 1 ]   ( 上面利用了 w 的区间包含单调性 ) =   F [ i + 1 , j + 1 ] − F [ i + 1 , j ] \begin{split} &\ \ F[i,j+1]-F[i,j] \\ =&\ F[i,i+2]-F[i,i+1] \\ =&\ F[i+1,i+2]-F[i+1,i+1]+ \\ &\ w(i,i+2)-w(i,i+1) \\ \geqslant&\ F[i+1,i+2]-F[i+1,i+1] \\ &\ \quad(上面利用了w的区间包含单调性) \\ =&\ F[i+1,j+1]-F[i+1,j] \end{split} ===  F[i,j+1]F[i,j] F[i,i+2]F[i,i+1] F[i+1,i+2]F[i+1,i+1]+ w(i,i+2)w(i,i+1) F[i+1,i+2]F[i+1,i+1] (上面利用了w的区间包含单调性) F[i+1,j+1]F[i+1,j] \qquad\quad 因此, F F F 满足四边形不等式.

\qquad\quad 2 ∘    \mathbf{2^{\circ}}\; 2 F [ i , j + 1 ] = F [ i , i + 1 ] + F [ i + 2 , i + 2 ] + w ( i , i + 2 ) F[i,j+1]=F[i,i+1]+F[i+2,i+2]+w(i,i+2) F[i,j+1]=F[i,i+1]+F[i+2,i+2]+w(i,i+2),则    F [ i , j + 1 ] − F [ i , j ] =   F [ i , i + 1 ] + F [ i + 2 , i + 2 ] +   w ( i , i + 2 ) − F [ i , i + 1 ] =   F [ i + 1 , i + 1 ] + F [ i + 2 , i + 2 ] +   w ( i , i + 2 ) − F [ i + 1 , i + 1 ] ⩾   F [ i + 1 , i + 1 ] + F [ i + 2 , i + 2 ] +   w ( i + 1 , i + 2 ) − F [ i + 1 , i + 1 ] =   F [ i + 1 , i + 2 ] − F [ i + 1 , i + 1 ] =   F [ i + 1 , j + 1 ] − F [ i + 1 , j ] \begin{split} &\ \ F[i,j+1]-F[i,j] \\ =&\ F[i,i+1]+F[i+2,i+2]+ \\ &\ w(i,i+2)-F[i,i+1] \\ =&\ F[i+1,i+1]+F[i+2,i+2]+ \\ &\ w(i,i+2)-F[i+1,i+1] \\ \geqslant&\ F[i+1,i+1]+F[i+2,i+2]+\\ &\ w(i+1,i+2) - F[i+1,i+1] \\ =&\ F[i+1,i+2]-F[i+1,i+1] \\ =&\ F[i+1,j+1]-F[i+1,j] \end{split} ====  F[i,j+1]F[i,j] F[i,i+1]+F[i+2,i+2]+ w(i,i+2)F[i,i+1] F[i+1,i+1]+F[i+2,i+2]+ w(i,i+2)F[i+1,i+1] F[i+1,i+1]+F[i+2,i+2]+ w(i+1,i+2)F[i+1,i+1] F[i+1,i+2]F[i+1,i+1] F[i+1,j+1]F[i+1,j] \qquad\quad 因此, F F F 满足四边形不等式.
\qquad\quad 综上, j = i + 1 j=i+1 j=i+1 时, F F F 满足四边形不等式.

\qquad\quad ( 2 )   j = i + k    ( k > 1 ) (2)\ j=i+k\ \ (k>1) (2) j=i+k  (k>1) 时,假设 j < i + k j<i+k j<i+k F F F 满足四边形不等式. 记

\qquad\quad F [ i , j ] = F [ i , x ] + F [ x + 1 , j ] + w ( i , j ) ( i ⩽ x < j ) F[i,j]=F[i,x]+F[x+1,j]+w(i,j)\quad(i\leqslant x <j) F[i,j]=F[i,x]+F[x+1,j]+w(i,j)(ix<j)

\qquad\quad F [ i , j + 1 ] = F [ i , y ] + F [ y + 1 , j + 1 ] + w ( i , j + 1 ) ( i ⩽ y < j + 1 ) F[i,j+1]=F[i,y]+F[y+1,j+1]+w(i,j+1)\quad(i\leqslant y <j+1) F[i,j+1]=F[i,y]+F[y+1,j+1]+w(i,j+1)(iy<j+1)

\qquad\quad 实际上,这里的 x x x y y y 对应了结论 3 3 3 中的 p [ i , j ] p[i,j] p[i,j] p [ i , j + 1 ] p[i,j+1] p[i,j+1].
\qquad\quad 根据结论 3 3 3,我们可以预先知道 p [ i , j ] ⩽ p [ i , j + 1 ] p[i,j]\leqslant p[i,j+1] p[i,j]p[i,j+1],即 x ⩽ y x\leqslant y xy. 倘若确定了 x x x y y y 的大小关系,我们需要讨论的情形就变为原来的一半.
\qquad\quad 这里, F F F 满足四边形不等式是我们要证明的结论,不能作为条件通过结论 3 3 3 直接得出 x x x y y y 的大小关系. 下面,我们通过其他方法证明:一定能够找到一个 x x x,满足 x ⩽ y x\leqslant y xy.
\qquad\quad 假设 x > y x>y x>y,由于 x x x 的最优性,所以有 F [ i , j ] =   F [ i , x ] + F [ x + 1 , j ] + w ( i , j ) ⩽   F [ i , y ] + F [ y + 1 , j ] + w ( i , j ) \begin{split} F[i,j]=&\ F[i,x]+F[x+1,j]+w(i,j) \\ \leqslant&\ F[i,y]+F[y+1,j]+w(i,j) \end{split} F[i,j]= F[i,x]+F[x+1,j]+w(i,j) F[i,y]+F[y+1,j]+w(i,j) \qquad\quad F [ i , x ] + F [ x + 1 , j ] ⩽ F [ i , y ] + F [ y + 1 , j ] . ① F[i,x]+F[x+1,j]\leqslant F[i,y]+F[y+1,j].\qquad ① F[i,x]+F[x+1,j]F[i,y]+F[y+1,j]. \qquad\quad 同理,对于 F [ i , j + 1 ] F[i,j+1] F[i,j+1],有: F [ i , y ] + F [ y + 1 , j + 1 ] ⩽ F [ i , x ] + F [ x + 1 , j + 1 ] . F[i,y]+F[y+1,j+1]\leqslant F[i,x]+F[x+1,j+1]. F[i,y]+F[y+1,j+1]F[i,x]+F[x+1,j+1]. \qquad\quad y + 1 ⩽ x + 1 ⩽ j ⩽ j + 1 y+1\leqslant x+1\leqslant j\leqslant j+1 y+1x+1jj+1,根据前面的假设,有关于 F F F 的四边形不等式变形: F [ x + 1 , j ] − F [ y + 1 , j ] ⩾ F [ x + 1 , j + 1 ] − F [ y + 1 , j + 1 ] . F[x+1,j]-F[y+1,j]\geqslant F[x+1,j+1]-F[y+1,j+1]. F[x+1,j]F[y+1,j]F[x+1,j+1]F[y+1,j+1]. \qquad\quad 于是,    ( F [ i , x ] + F [ x + 1 , j ] ) − ( F [ i , y ] + F [ y + 1 , j ] ) =   ( F [ i , x ] − F [ i , y ] ) + ( F [ x + 1 , j ] − F [ y + 1 , j ] ) ⩾   ( F [ i , x ] − F [ i , y ] ) + ( F [ x + 1 , j + 1 ] − F [ y + 1 , j + 1 ] ) =   ( F [ i , x ] + F [ x + 1 , j + 1 ] ) − ( F [ i , y ] + F [ y + 1 , j + 1 ] ) ⩾   0 \begin{split} &\ \ (F[i,x]+F[x+1,j])-(F[i,y]+F[y+1,j]) \\ =&\ (F[i,x]-F[i,y])+(F[x+1,j]-F[y+1,j]) \\ \geqslant&\ (F[i,x]-F[i,y])+(F[x+1,j+1]-F[y+1,j+1]) \\ =&\ (F[i,x]+F[x+1,j+1])-(F[i,y]+F[y+1,j+1]) \\ \geqslant&\ 0 \end{split} ==  (F[i,x]+F[x+1,j])(F[i,y]+F[y+1,j]) (F[i,x]F[i,y])+(F[x+1,j]F[y+1,j]) (F[i,x]F[i,y])+(F[x+1,j+1]F[y+1,j+1]) (F[i,x]+F[x+1,j+1])(F[i,y]+F[y+1,j+1]) 0 \qquad\quad F [ i , x ] + F [ x + 1 , j ] ⩾ F [ i , y ] + F [ y + 1 , j ] . ② F[i,x]+F[x+1,j]\geqslant F[i,y]+F[y+1,j].\qquad ② F[i,x]+F[x+1,j]F[i,y]+F[y+1,j]. \qquad\quad ①② ①② ①② F [ i , x ] + F [ x + 1 , j ] = F [ i , y ] + F [ y + 1 , j ] . F[i,x]+F[x+1,j]=F[i,y]+F[y+1,j]. F[i,x]+F[x+1,j]=F[i,y]+F[y+1,j]. \qquad\quad x ′ = y x^{\prime}=y x=y x ′ x^{\prime} x 也可以使 F [ i , j ] F[i,j] F[i,j] 取到最小值.
\qquad\quad 因此,一定能够找到一个 x x x,满足 x ⩽ y x\leqslant y xy.
\qquad\quad 后面的证明中,我们都设 x ⩽ y x\leqslant y xy. 接下来,分两种情况讨论.

\qquad\quad 1 ∘    \mathbf{1^{\circ}}\; 1 i + 1 ⩽ x ⩽ y i+1\leqslant x \leqslant y i+1xy,根据前面的假设,有

F [ i , y ] − F [ i , x ] ⩾ F [ i + 1 , y ] − F [ i + 1 , x ] F[i,y]-F[i,x]\geqslant F[i+1,y]-F[i+1,x] F[i,y]F[i,x]F[i+1,y]F[i+1,x]

\qquad\quad w w w 满足四边形不等式,因此 w ( i , j + 1 ) − w ( i , j ) ⩾ w ( i + 1 , j + 1 ) − w ( i + 1 , j ) . w(i,j+1)-w(i,j)\geqslant w(i+1,j+1)-w(i+1,j). w(i,j+1)w(i,j)w(i+1,j+1)w(i+1,j). \qquad\quad 从而    F [ i , j + 1 ] − F [ i , j ] =   F [ i , y ] − F [ i , x ] + F [ y + 1 , j + 1 ]   − F [ x + 1 , j ] + w ( i , j + 1 ) − w ( i , j ) ⩾   F [ i + 1 , y ] + F [ y + 1 , j + 1 ] + w ( i + 1 , j + 1 )   − ( F [ i + 1 , x ] + F [ x + 1 , j ] + w ( i + 1 , j ) ) =   F [ i + 1 , j + 1 ] − F [ i + 1 , j ] \begin{split} &\ \ F[i,j+1]-F[i,j] \\ =&\ F[i,y]-F[i,x]+F[y+1,j+1]\\ &\ -F[x+1,j]+w(i,j+1)-w(i,j) \\ \geqslant&\ F[i+1,y]+F[y+1,j+1]+w(i+1,j+1)\\ &\ -(F[i+1,x]+F[x+1,j]+w(i+1,j))\\ =&\ F[i+1,j+1]-F[i+1,j] \end{split} ==  F[i,j+1]F[i,j] F[i,y]F[i,x]+F[y+1,j+1] F[x+1,j]+w(i,j+1)w(i,j) F[i+1,y]+F[y+1,j+1]+w(i+1,j+1) (F[i+1,x]+F[x+1,j]+w(i+1,j)) F[i+1,j+1]F[i+1,j] \qquad\quad 此时, F F F 满足四边形不等式.
\qquad\quad 2 ∘    \mathbf{2^{\circ}}\; 2 y = i y=i y=i,由 i ⩽ x ⩽ y i\leqslant x\leqslant y ixy,得 x = i x=i x=i.
\qquad\quad 从而    F [ i , j + 1 ] − F [ i , j ] =   ( F [ i , i ] − F [ i , i ] ) + F [ i + 1 , j + 1 ]   − F [ i + 1 , j ] + ( w ( i , j + 1 ) − w ( i , j ) ) ⩾   F [ i + 1 , j + 1 ] − F [ i + 1 , j ] \begin{split} &\ \ F[i,j+1]-F[i,j] \\ =&\ (F[i,i]-F[i,i])+F[i+1,j+1]\\ &\ -F[i+1,j]+(w(i,j+1)-w(i,j)) \\ \geqslant&\ F[i+1,j+1]-F[i+1,j] \end{split} =  F[i,j+1]F[i,j] (F[i,i]F[i,i])+F[i+1,j+1] F[i+1,j]+(w(i,j+1)w(i,j)) F[i+1,j+1]F[i+1,j] \qquad\quad 此时, F F F 满足四边形不等式.
\qquad\quad j = i + k j=i+k j=i+k 时, F F F 满足四边形不等式.
\qquad\quad ( 1 ) ( 2 ) (1)(2) (1)(2),结论 2 2 2 得证.

结论 3 3 3 的证明

  结论 3 3\quad 3 在状态转移方程 F [ i , j ] = min ⁡ i ⩽ k < j { F [ i , k ] + F [ k + 1 , j ] } + w ( i , j ) F[i,j]=\min\limits_{i\leqslant k<j} \{F[i,k]+F[k+1,j]\}+w(i,j) F[i,j]=ik<jmin{F[i,k]+F[k+1,j]}+w(i,j) 中,若 F F F 满足四边形不等式,则对任意 i < j i < j i<j,有

p [ i , j − 1 ] ⩽ p [ i , j ] ⩽ p [ i + 1 , j ] p[i,j-1]\leqslant p[i,j]\leqslant p[i+1,j] p[i,j1]p[i,j]p[i+1,j].

证明: \quad 为了便于叙述,我们记 p = p [ i , j ] p=p[i,j] p=p[i,j] i ⩽ p < j i\leqslant p<j ip<j.
\qquad\quad 于是,对任意 i ⩽ k < j i\leqslant k<j ik<j,有 F [ i , j ] = F [ i , p ] + F [ p + 1 , j ] + w ( i , j ) ⩽ F [ i , k ] + F [ k + 1 , j ] + w ( i , j ) \begin{split} F[i,j]&=F[i,p]+F[p+1,j]+w(i,j) \\ &\leqslant F[i,k]+F[k+1,j]+w(i,j) \\ \end{split} F[i,j]=F[i,p]+F[p+1,j]+w(i,j)F[i,k]+F[k+1,j]+w(i,j) \qquad\quad F [ i , k ] + F [ k + 1 , j ] ⩾ F [ i , p ] + F [ p + 1 , j ] . F[i,k]+F[k+1,j]\geqslant F[i,p]+F[p+1,j]. F[i,k]+F[k+1,j]F[i,p]+F[p+1,j]. \qquad\quad 由于 F F F 满足四边形不等式,因此有:
\qquad\quad k ∈ ( i , p ] k \in(i,p] k(i,p],有 F [ i + 1 , k ] − F [ i + 1 , p ] ⩾ F [ i , k ] − F [ i , p ] . F[i+1,k]-F[i+1,p]\geqslant F[i,k]-F[i,p]. F[i+1,k]F[i+1,p]F[i,k]F[i,p]. \qquad\quad k ∈ [ p , j − 1 ) k \in[p,j-1) k[p,j1),有 F [ k + 1 , j − 1 ] − F [ p + 1 , j − 1 ] ⩾ F [ k + 1 , j ] − F [ p + 1 , j ] . F[k+1,j-1]-F[p+1,j-1]\geqslant F[k+1,j]-F[p+1,j]. F[k+1,j1]F[p+1,j1]F[k+1,j]F[p+1,j]. \qquad\quad 1 ∘    \mathbf{1^{\circ}}\; 1 先证 p = p [ i , j ] ⩽ p [ i + 1 , j ] p=p[i,j]\leqslant p[i+1,j] p=p[i,j]p[i+1,j].
\qquad\quad p = i p=i p=i,则 p < i + 1 ⩽ p [ i + 1 , j ] p < i+1 \leqslant p[i+1,j] p<i+1p[i+1,j] 显然成立.
\qquad\quad i < p < j i<p<j i<p<j ∀   k ∈ ( i , p ] \forall\ k \in(i,p]  k(i,p],有 ( F [ i + 1 , k ] + F [ k + 1 , j ] + w ( i + 1 , j ) ) − ( F [ i + 1 , p ] + F [ p + 1 , j ] + w ( i + 1 , j ) ) = ( F [ i + 1 , k ] − F [ i + 1 , p ] ) + F [ k + 1 , j ] − F [ p + 1 , j ] ⩾ F [ i , k ] − F [ i , p ] + F [ k + 1 , j ] − F [ p + 1 , j ] = ( F [ i , k ] + F [ k + 1 , j ] ) − ( F [ i , p ] + F [ p + 1 , j ] ) ⩾ 0. \begin{split} &(F[i+1,k]+F[k+1,j]+w(i+1,j))-\\ &(F[i+1,p]+F[p+1,j]+w(i+1,j))\\ =&(F[i+1,k]-F[i+1,p])+F[k+1,j]-F[p+1,j] \\ \geqslant&F[i,k]-F[i,p]+F[k+1,j]-F[p+1,j] \\ =&(F[i,k]+F[k+1,j])- (F[i,p]+F[p+1,j]) \\ \geqslant&0. \end{split} ==(F[i+1,k]+F[k+1,j]+w(i+1,j))(F[i+1,p]+F[p+1,j]+w(i+1,j))(F[i+1,k]F[i+1,p])+F[k+1,j]F[p+1,j]F[i,k]F[i,p]+F[k+1,j]F[p+1,j](F[i,k]+F[k+1,j])(F[i,p]+F[p+1,j])0. \qquad\quad 可见,取 k = p k=p k=p 可令 F [ i + 1 , j ] F[i+1,j] F[i+1,j] k ∈ ( i , p ] k\in(i,p] k(i,p] 上取得最小值.
\qquad\quad 因此,使得 F [ i + 1 , j ] F[i+1,j] F[i+1,j] 取得最小值的 p [ i + 1 , j ] p[i+1,j] p[i+1,j] 一定不小于 p [ i , j ] p[i,j] p[i,j].
\qquad\quad 至此, p [ i , j ] ⩽ p [ i + 1 , j ] p[i,j]\leqslant p[i+1,j] p[i,j]p[i+1,j] 得证.

\qquad\quad 2 ∘    \mathbf{2^{\circ}}\; 2 再来证明: p [ i , j − 1 ] ⩽ p [ i , j ] = p p[i,j-1]\leqslant p[i,j]=p p[i,j1]p[i,j]=p.
\qquad\quad (方法和 1 ∘ \mathbf{1^{\circ}} 1同理,可以选择性地skip.)
\qquad\quad p = j − 1 p = j-1 p=j1 p [ i , j − 1 ] ⩽ p p[i,j-1]\leqslant p p[i,j1]p 显然成立.
\qquad\quad i ⩽ p < j − 1 i\leqslant p < j-1 ip<j1 ∀   k ∈ [ p , j − 1 ) \forall\ k \in [p,j-1)  k[p,j1),有 ( F [ i , k ] + F [ k + 1 , j − 1 ] + w ( i , j − 1 ) ) − ( F [ i , p ] + F [ p + 1 , j − 1 ] + w ( i , j − 1 ) ) = ( F [ k + 1 , j − 1 ] − F [ p + 1 , j − 1 ] ) + F [ i , k ] − F [ i , p ] ⩾ F [ k + 1 , j ] − F [ p + 1 , j ] + F [ i , k ] − F [ i , p ] = ( F [ i , k ] + F [ k + 1 , j ] ) − ( F [ i , p ] + F [ p + 1 , j ] ) ⩾ 0. \begin{split} &(F[i,k]+F[k+1,j-1]+w(i,j-1))-\\ & (F[i,p]+F[p+1,j-1]+w(i,j-1))\\ =&(F[k+1,j-1]-F[p+1,j-1])+F[i,k]-F[i,p] \\ \geqslant&F[k+1,j]-F[p+1,j]+F[i,k]-F[i,p] \\ =&(F[i,k]+F[k+1,j])- (F[i,p]+F[p+1,j]) \\ \geqslant&0. \end{split} ==(F[i,k]+F[k+1,j1]+w(i,j1))(F[i,p]+F[p+1,j1]+w(i,j1))(F[k+1,j1]F[p+1,j1])+F[i,k]F[i,p]F[k+1,j]F[p+1,j]+F[i,k]F[i,p](F[i,k]+F[k+1,j])(F[i,p]+F[p+1,j])0. \qquad\quad 可见,取 k = p k=p k=p 可令 F [ i , j − 1 ] F[i,j-1] F[i,j1] k ∈ [ p , j − 1 ) k\in[p,j-1) k[p,j1) 上取得最小值.
\qquad\quad 因此, p [ i , j − 1 ] ⩽ p [ i , j ] p[i,j-1]\leqslant p[i,j] p[i,j1]p[i,j] 得证.
\qquad\quad 于是结论 3 3 3 得证.

小结

  我们已经完成了对三个结论的证明,至此,对最开始提出的状态转移方程的优化就告一段落了。关于动态规划的四边形不等式优化,其实还有不少可以挖掘的内容:OI-Wiki中进一步讨论了满足四边形不等式的函数类,知乎Pecco的文章里还提到了可以用四边形不等式进行优化的另一种形式的DP状态转移方程,还有一些常见的可以用四边形不等式优化的经典例题,限于时间和篇幅,这里暂时就不深入讨论了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值