【算法讲解】DP优化——四边形不等式优化

前言

此优化策略由高德纳和姚期智发现并证明,故学名称之为 Knuth-Yao Speedup
(Knuth 是算法届的鼻祖,对于算法新手来说,KMP一定不陌生,Knuth 就是三个联合发明人之一的 K;Yao 就是清华姚班的姚期智)
证明过程中依赖四边形不等式,所以也俗称四边形不等式优化
适用于当 dp 方程、转移函数符合一定特征时,可以将复杂度降低一个维度
属于非常难的 dp 优化,Codeforces 中需要应用此类优化的题目至少是 2400 分以上
证明非常困难,如果前置没有掌握这个知识点,遇到相应的题是无论如何都做不出的

背景

最初发明这个算法的动机,是为了解决最佳二叉搜索树(Optimal Binary Search Tree)问题(OBST 会在其他文章中详细介绍,此处不展开)
朴素的 OBST 问题的解法是 O ( n 3 ) O(n^3) O(n3)
Knuth 在1971发现发现当符合某种条件下(见下文的DP策略优化),可以让复杂度降为 O ( n 2 ) O(n^2) O(n2)

  • o p t ( i , j − 1 ) ≤ o p t ( i , j ) ≤ o p t ( i + 1 , j ) opt(i,j-1) \le opt(i,j) \le opt(i+1,j) opt(i,j1)opt(i,j)opt(i+1,j)

Yao 在1980年进一步发现下文的推论2和推论3:

  • c ( i , j ) c(i,j) c(i,j) 符合四边形不等式 ⟹ d p ( i , j ) \Longrightarrow dp(i,j) dp(i,j) 也符合四边形不等式
  • d p ( i , j ) dp(i,j) dp(i,j) 符合四边形不等式 ⟹ o p t ( i , j − 1 ) ≤ o p t ( i , j ) ≤ o p t ( i + 1 , j ) \Longrightarrow opt(i,j-1) \le opt(i,j) \le opt(i+1,j) opt(i,j1)opt(i,j)opt(i+1,j)

既只要 c ( i , j ) c(i,j) c(i,j) 符合四边形不等式,就可以将 OBST 的复杂度降低到 ( n 2 ) (n^2) (n2)

问题描述

我们将问题简化,就不直接从 OBST 开始推演,直接给出 dp 方程,OBST 到 dp 方程的推演会在其他文章中介绍

对于下述 dp 方程, d p ( l , r ) dp(l,r) dp(l,r) 代表状态, c ( l , r ) c(l,r) c(l,r) 代表状态转移的代价 cost( O ( 1 ) O(1) O(1)的复杂度可以计算得到)
d p ( l , r ) = { min ⁡ k ∈ [ l , r ) { d p ( l , k ) + d p ( k + 1 , r ) } + c ( l , r ) , l < r 0 , l = r ∞ , l > r dp(l,r) = \left\{ \begin{aligned} \min \limits_{k\in [l,r)}\{dp(l,k) + dp(k+1,r)\} + c(l,r),l<r \\ 0,l=r \\ \infty,l>r \end{aligned} \right. dp(l,r)= k[l,r)min{dp(l,k)+dp(k+1,r)}+c(l,r),l<r0,l=r,l>r
用朴素的方式直接实现,因为有 O ( n 2 ) O(n^2) O(n2)个状态,每次状态转移需要从 l l l遍历到 r r r,也就是 O ( n ) O(n) O(n)的开销,所以整体复杂度是 O ( n 3 ) O(n^3) O(n3)

但是如果 c ( l , r ) c(l,r) c(l,r)满足一下两个特性,则可以将复杂度从 O ( n 3 ) O(n^3) O(n3) 优化成 O ( n 2 ) O(n^2) O(n2)

  • 区间单调性:对于任意的 l ≤ l ′ ≤ r ′ ≤ r l\le l' \le r' \le r llrr,满足 c ( l ′ , r ′ ) ≤ c ( l , r ) c(l',r')\le c(l,r) c(l,r)c(l,r)
    除了 c ( l ′ , r ′ ) ≤ c ( l , r ) c(l',r')\le c(l,r) c(l,r)c(l,r) 之外,还很容易推演出如 c ( l ′ , r ′ ) ≤ c ( l ′ , r ) , c ( l , r ′ ) ≤ c ( l , r ) c(l',r') \le c(l',r),c(l,r')\le c(l,r) c(l,r)c(l,r),c(l,r)c(l,r)
  • 四边形不等式:对于任意的 l ≤ l ′ ≤ r ′ ≤ r l\le l' \le r' \le r llrr,满足 c ( l , r ′ ) + c ( l ′ , r ) ≤ c ( l , r ) + c ( l ′ , r ′ ) c(l,r')+c(l',r)\le c(l,r)+c(l',r') c(l,r)+c(l,r)c(l,r)+c(l,r)

推论1

对于任意的 l ≤ k < r l\le k <r lk<r,以下不等式必定成立
d p ( l , r ) ≤ d p ( l , k ) + d p ( k + 1 , r ) + c ( l , r ) dp(l,r) \le dp(l,k) + dp(k+1,r)+c(l,r) dp(l,r)dp(l,k)+dp(k+1,r)+c(l,r)

证明

非常直观,在上述dp的定义中, d p ( l , r ) dp(l,r) dp(l,r) 是枚举所有 k k k计算所得的最小值,也就是说对于任意的 k k k d p ( l , k ) + d p ( k + 1 , r ) + c ( l , r ) dp(l,k) + dp(k+1,r) + c(l,r) dp(l,k)+dp(k+1,r)+c(l,r)的计算结果一定大于等于 d p ( l , r ) dp(l,r) dp(l,r)
且至少一个 k k k会使上述不等式变成等式,我们将这个 k k k记为 d p ( l , r ) dp(l,r) dp(l,r)的最佳决策点(optimal decistion point),既:
o p t ( l , r ) ≔ min ⁡ l ≤ k < r { k ∣ d p ( l , r ) = d p ( l , k ) + d p ( k + 1 , r ) + c o s t ( l , r ) } opt(l,r)\coloneqq \min \limits_{l \le k <r} \{k|dp(l,r)=dp(l,k) +dp(k+1,r)+cost(l,r)\} opt(l,r):=lk<rmin{kdp(l,r)=dp(l,k)+dp(k+1,r)+cost(l,r)}
所以当 k = o p t ( l , r ) k=opt(l,r) k=opt(l,r) 时,上述不等式变成等式,既
d p ( l , r ) = d p ( l , k ) + d p ( k + 1 , r ) + c ( l , r ) \begin{equation} dp(l,r) = dp(l,k) + dp(k+1,r)+c(l,r) \end{equation} dp(l,r)=dp(l,k)+dp(k+1,r)+c(l,r)

推论2

如果 c ( l , r ) c(l,r) c(l,r) 满足区间单调性四边形不等式,则 d p ( l , r ) dp(l,r) dp(l,r) 也满足四边形不等式,既
d p ( l , r ′ ) + d p ( l ′ , r ) ≤ d p ( l , r ) + d p ( l ′ , r ′ ) dp(l,r')+dp(l',r)\le dp(l,r)+dp(l',r') dp(l,r)+dp(l,r)dp(l,r)+dp(l,r)
我们将这个命题定义为 P ( r ) P(r) P(r)

证明

既,需要证明命题 P ( r ) P(r) P(r)成立

我们对 l ≤ l ′ ≤ r ′ ≤ r l\le l' \le r' \le r llrr 的根据是否相等的情况分四类进行讨论,分别证明:

  • l ′ = l l'=l l=l
    d p ( l , r ′ ) + d p ( l ′ , r ) = d p ( l , r ′ ) + d p ( l , r ) ⋯ 因为 l ′ = l = d p ( l ′ , r ′ ) + d p ( l , r ) ⋯ 因为 l = l ′ \begin{aligned} dp(l,r')+dp(l',r) &=dp(l,r')+dp(\textcolor{Red}{l},r) &\cdots 因为 l'=l\\ &=dp(\textcolor{Red}{l'},r')+dp(l,r) &\cdots 因为 l=l' \end{aligned} dp(l,r)+dp(l,r)=dp(l,r)+dp(l,r)=dp(l,r)+dp(l,r)因为l=l因为l=l
    命题 P ( r ) P(r) P(r)成立,证明完成

  • r ′ = r r'=r r=r
    l ′ = l l'=l l=l,不赘述

  • l ′ = r ′ l'=r' l=r
    根据dp方程定义,当 l ′ = r ′ l'=r' l=r时, d p ( l ′ , r ′ ) = 0 dp(l',r')=0 dp(l,r)=0,所以下述公式成立
    d p ( l , r ) + d p ( l ′ , r ′ ) = d p ( l , r ) + 0 = d p ( l , r ) \begin{equation} dp(l,r) + dp(l',r') = dp(l,r) +\textcolor{red}0=dp(l,r) \end{equation} dp(l,r)+dp(l,r)=dp(l,r)+0=dp(l,r)
    k = o p t ( l , r ) k = opt(l,r) k=opt(l,r)

    • l ′ = r ′ ≤ k l' = r'\le k l=rk
      结合数学归纳法来证明命题 P ( r ) P(r) P(r)
      第一步:证明 r = r ′ r=r' r=r时, P ( r ) P(r) P(r)成立,上述已经证明(见 r ′ = r r'=r r=r的分组证明)
      第二步:证明假设 r ≥ r ′ r\ge r' rr P ( r ) P(r) P(r)成立,可推导出 P ( { x ∣ x > r } ) P(\{x|x>r\}) P({xx>r})成立
      由于 r ′ ≤ k < r r'\le k < r rk<r,我们可以将第二步转化为:假设 P ( k ) P(k) P(k)成立,可推导出 P ( r ) P(r) P(r)成立。也就是说我们有如下假设:
      d p ( l , r ′ ) + d p ( l ′ , k ) ≤ d p ( l , k ) + d p ( l ′ , r ′ ) dp(l,r')+dp(l',k)\le dp(l,k)+dp(l',r') dp(l,r)+dp(l,k)dp(l,k)+dp(l,r)
      有了上述条件,我们可以证明:
      d p ( l , r ′ ) + d p ( l ′ , r ) ≤ d p ( l , r ′ ) + d p ( l ′ , k ) + d p ( k + 1 , r ) + c ( l ′ , r ) ⋯ 根据推论 ( 1 ) 展开 ≤ d p ( l , r ′ ) + d p ( l ′ , k ) + d p ( k + 1 , r ) + c ( l , r ) ⋯ 根据 c 的单调性 ≤ d p ( l , k ) + d p ( l ′ , r ′ ) + d p ( k + 1 , r ) + c ( l , r ) ⋯ 根据假设 = d p ( l , k ) + 0 + d p ( k + 1 , r ) + c ( l , r ) ⋯ 根据 d p 定义 = d p ( l , r ) ⋯ 根据公式 ( 1 ) = d p ( l , r ) + d p ( l ′ , r ′ ) ⋯ 根据公式 ( 2 ) \begin{aligned} dp(l,r')+dp(l',r) &\le dp(l,r') + \textcolor{Red}{dp(l',k) +dp(k+1,r)+c(l',r)} &\cdots 根据推论(1)展开 \\ &\le dp(l,r') + dp(l',k) +dp(k+1,r)+c(\textcolor{Red}l,r) &\cdots 根据c的单调性\\ &\le \textcolor{Red}{dp(l,k)+dp(l',r')}+dp(k+1,r)+c(l,r) &\cdots 根据假设\\ &=dp(l,k)+\textcolor{Red}0+dp(k+1,r)+c(l,r) &\cdots 根据dp定义\\ &=\textcolor{Red}{dp(l,r)} &\cdots 根据公式(1)\\ &=dp(l,r) + \textcolor{Red}{dp(l',r')} &\cdots 根据公式(2)\\ \end{aligned} dp(l,r)+dp(l,r)dp(l,r)+dp(l,k)+dp(k+1,r)+c(l,r)dp(l,r)+dp(l,k)+dp(k+1,r)+c(l,r)dp(l,k)+dp(l,r)+dp(k+1,r)+c(l,r)=dp(l,k)+0+dp(k+1,r)+c(l,r)=dp(l,r)=dp(l,r)+dp(l,r)根据推论(1)展开根据c的单调性根据假设根据dp定义根据公式(1)根据公式(2)
      证明完毕。
    • k < l ′ = r ′ k < l'=r' k<l=r
      同样结合数据归纳法(将命题参数的位置从 r r r换成 l l l,既命题 P ( l ) P(l) P(l)
      第一步:证明 l = l ′ l=l' l=l 时, P ( l ) P(l) P(l)成立,上述已经证明(见 l ′ = l l'=l l=l的分组证明)
      第二步,证明假设 l ≤ l ′ l\le l' ll P ( l ) P(l) P(l)成立,可推导出 P ( { x ∣ x < l } ) P(\{x|x<l\}) P({xx<l})也成立
      由于 l ≤ k < l ′ l\le k<l' lk<l,也就是说 l < k + 1 ≤ l ′ l<k+1\le l' l<k+1l,所以我们可以将第二步转化为:假设 P ( k + 1 ) P(k+1) P(k+1)成立,可推导初 P ( l ) P(l) P(l)成立。也就是说我们有如下假设:
      d p ( k + 1 , r ′ ) + d p ( l ′ , r ) ≤ d p ( k + 1 , r ) + d p ( l ′ , r ′ ) dp(k+1,r')+dp(l',r) \le dp(k+1,r) + dp(l',r') dp(k+1,r)+dp(l,r)dp(k+1,r)+dp(l,r)
      有了上述条件,我们可以证明:
      d p ( l , r ′ ) + d p ( l ′ , r ) ≤ c ( l , r ′ ) + d p ( l , k ) + d p ( k + 1 , r ′ ) + d p ( l ′ , r ) ⋯ 根据推论 ( 1 ) 展开 ≤ c ( l , r ) + d p ( l , k ) + d p ( k + 1 , r ′ ) + d p ( l ′ , r ) ⋯ 根据 c 的单调性 ≤ c ( l , r ) + d p ( l , k ) + d p ( k + 1 , r ) + d p ( l ′ , r ′ ) ⋯ 根据假设 ≤ c ( l , r ) + d p ( l , k ) + d p ( k + 1 , r ) + 0 ⋯ 根据 d p 定义 = d p ( l , r ) ⋯ 根据公式 ( 1 ) = d p ( l , r ) + d p ( l ′ , r ′ ) ⋯ 根据公式 ( 2 ) \begin{aligned} dp(l,r')+dp(l',r) &\le \textcolor{Red}{ c(l,r')+dp(l,k) + dp(k+1,r')}+ dp(l',r) &\cdots 根据推论(1)展开\\ &\le c(l,\textcolor{Red}{r})+dp(l,k) + dp(k+1,r') + dp(l',r) &\cdots 根据c的单调性\\ &\le c(l,r) + dp(l,k) + \textcolor{red}{dp(k+1,r)+dp(l',r')} &\cdots 根据假设 \\ &\le c(l,r) + dp(l,k) + dp(k+1,r)+\textcolor{red}0 &\cdots 根据dp定义 \\ &= \textcolor{Red}{dp(l,r)} &\cdots 根据公式(1) \\ &= dp(l,r) + \textcolor{Red}{dp(l',r')} &\cdots 根据公式(2) \end{aligned} dp(l,r)+dp(l,r)c(l,r)+dp(l,k)+dp(k+1,r)+dp(l,r)c(l,r)+dp(l,k)+dp(k+1,r)+dp(l,r)c(l,r)+dp(l,k)+dp(k+1,r)+dp(l,r)c(l,r)+dp(l,k)+dp(k+1,r)+0=dp(l,r)=dp(l,r)+dp(l,r)根据推论(1)展开根据c的单调性根据假设根据dp定义根据公式(1)根据公式(2)
      证明完毕。
  • l < l ′ < r ′ < r l<l'<r'<r l<l<r<r
    x = o p t ( l , r ) , y = o p t ( l ′ , r ′ ) x=opt(l,r),y=opt(l',r') x=opt(l,r),y=opt(l,r)
    由 opt 定义可得: l ≤ x < r , l ′ ≤ y < r ′ l\le x <r,l' \le y <r' lx<r,ly<r

    • y < x y<x y<x,将几个不等式聚合,可得 l < l ′ ≤ y < r ′ , x < r l<l'\le y<r',x<r l<ly<r,x<r,所以有 l ≤ y < r ′ , l ′ < x < r l\le y < r', l' < x < r ly<r,l<x<r,根据推论 ( 1 ) (1) (1)可以得到下面不等式
      d p ( l , r ′ ) ≤ d p ( l , y ) + d p ( y + 1 , r ′ ) + c ( l , r ′ ) d p ( l ′ , r ) ≤ d p ( l ′ , x ) + d p ( x + 1 , r ) + c ( l ′ , r ) \begin{equation} \begin{aligned} dp(l,r') \le dp(l,y)+dp(y+1,r')+c(l,r')\\ dp(l',r) \le dp(l',x)+dp(x+1,r)+c(l',r) \end{aligned} \end{equation} dp(l,r)dp(l,y)+dp(y+1,r)+c(l,r)dp(l,r)dp(l,x)+dp(x+1,r)+c(l,r)
      结合数据归纳法来证明命题 P P P(这次我们将 P P P的参数改为 r ′ r' r,既命题 P ( r ′ ) P(r') P(r))
      第一步:证明 r ′ = l ′ r'=l' r=l时, P ( r ′ ) P(r') P(r)成立,上述已经证明(见 l ′ = r ′ l'=r' l=r的分组证明)
      第二步:证明假设 r ′ ≥ l ′ r'\ge l' rl P ( r ′ ) P(r') P(r)成立,可推导出 P ( { x ∣ x > r ′ } ) P(\{x|x>r'\}) P({xx>r})成立
      由于 r ′ > y ≥ l ′ r'> y\ge l' r>yl,我们可以将第二步转化为:假设 P ( y ) P(y) P(y)成立,可推导出 P ( r ′ ) P(r') P(r)成立。而因为 x > y x> y x>y,也就是说我们有如下假设:
      d p ( l , y ) + d p ( l ′ , x ) ≤ d p ( l ′ , y ) + d p ( l , x ) dp(l,y)+dp(l',x) \le dp(l',y)+dp(l,x) dp(l,y)+dp(l,x)dp(l,y)+dp(l,x)
      然后开始证明:
      d p ( l , r ′ ) + d p ( l ′ , r ) ≤ d p ( l , y ) + d p ( y + 1 , r ′ ) + c ( l , r ′ ) + d p ( l ′ , x ) + d p ( x + 1 , r ) + c ( l ′ , r ) ⋯ 根据公式 ( 3 ) 展开 ≤ d p ( l , y ) + d p ( y + 1 , r ′ ) + c ( l ′ , r ′ ) + d p ( l ′ , x ) + d p ( x + 1 , r ) + c ( l , r ) ⋯ 根据 c 的四边形不等式 ≤ d p ( l ′ , y ) + d p ( y + 1 , r ′ ) + c ( l ′ , r ′ ) + d p ( l , x ) + d p ( x + 1 , r ) + c ( l , r ) ⋯ 根据假设 = d p ( l ′ , r ′ ) + d p ( l , r ) ⋯ 根据公式 ( 1 ) \begin{aligned} dp(l,r')+dp(l',r) &\le \textcolor{Red}{dp(l,y)+dp(y+1,r')+c(l,r')}+\textcolor{Red}{dp(l',x)+dp(x+1,r)+c(l',r)}&\cdots 根据公式(3)展开\\ &\le dp(l,y)+dp(y+1,r')+\textcolor{Red}{c(l',r')}+dp(l',x)+dp(x+1,r)+\textcolor{Red}{c(l,r)}&\cdots 根据c的四边形不等式\\ &\le \textcolor{Red}{dp(l',y)}+dp(y+1,r')+c(l',r')+\textcolor{Red}{dp(l,x)}+dp(x+1,r)+c(l,r)&\cdots 根据假设\\ &= \textcolor{Red}{dp(l',r') + dp(l,r)} &\cdots 根据公式(1) \end{aligned} dp(l,r)+dp(l,r)dp(l,y)+dp(y+1,r)+c(l,r)+dp(l,x)+dp(x+1,r)+c(l,r)dp(l,y)+dp(y+1,r)+c(l,r)+dp(l,x)+dp(x+1,r)+c(l,r)dp(l,y)+dp(y+1,r)+c(l,r)+dp(l,x)+dp(x+1,r)+c(l,r)=dp(l,r)+dp(l,r)根据公式(3)展开根据c的四边形不等式根据假设根据公式(1)
      证明完毕。
    • x ≤ y x\le y xy,将几个不等式聚合,可得 l ≤ x , l ′ ≤ y < r ′ < r l\le x,l'\le y <r'<r lx,ly<r<r,所以有 l ≤ x < r ′ , l ′ ≤ y < r l\le x <r', l' \le y <r lx<r,ly<r,根据推论 ( 1 ) (1) (1)因此可得
      d p ( l , r ′ ) ≤ d p ( l , x ) + d p ( x + 1 , r ′ ) + c ( l , r ′ ) d p ( l ′ , r ) ≤ d p ( l ′ , y ) + d p ( y + 1 , r ) + c ( l ′ , r ) \begin{equation} \begin{aligned} dp(l,r') \le dp(l,x)+dp(x+1,r')+c(l,r')\\ dp(l',r) \le dp(l',y)+dp(y+1,r)+c(l',r) \end{aligned} \end{equation} dp(l,r)dp(l,x)+dp(x+1,r)+c(l,r)dp(l,r)dp(l,y)+dp(y+1,r)+c(l,r)
      再由 x + 1 ≤ y + 1 < r ′ < r x+1\le y+1 < r' < r x+1y+1<r<r结合数据归纳法,我们可以得到如下假设
      d p ( x + 1 , r ′ ) + d p ( y + 1 , r ) ≤ d p ( x + 1 , r ) + d p ( y + 1 , r ′ ) dp(x+1,r')+dp(y+1,r)\le dp(x+1,r)+dp(y+1,r') dp(x+1,r)+dp(y+1,r)dp(x+1,r)+dp(y+1,r)
      然后开始证明:
      d p ( l , r ′ ) + d p ( l ′ , r ) ≤ d p ( l , x ) + d p ( x + 1 , r ′ ) + c ( l , r ′ ) + d p ( l ′ , y ) + d p ( y + 1 , r ) + c ( l ′ , r ) ⋯ 根据公式 ( 4 ) 展开 ≤ d p ( l , x ) + d p ( x + 1 , r ′ ) + c ( l , r ) + d p ( l ′ , y ) + d p ( y + 1 , r ) + c ( l ′ , r ′ ) ⋯ 根据 c 的四边形不等式 ≤ d p ( l , x ) + d p ( x + 1 , r ) + c ( l , r ) + d p ( l ′ , y ) + d p ( y + 1 , r ′ ) + c ( l ′ , r ′ ) ⋯ 根据假设 = d p ( l , r ) + d p ( l ′ , r ′ ) ⋯ 根据公式 ( 1 ) \begin{aligned} dp(l,r') +dp(l',r) &\le \textcolor{Red}{dp(l,x)+dp(x+1,r')+c(l,r')}+\textcolor{Red}{dp(l',y)+dp(y+1,r)+c(l',r)} &\cdots 根据公式(4)展开\\ &\le dp(l,x)+dp(x+1,r')+\textcolor{Red}{c(l,r)}+dp(l',y)+dp(y+1,r)+\textcolor{Red}{c(l',r')} &\cdots 根据c的四边形不等式\\ &\le dp(l,x)+\textcolor{Red}{dp(x+1,r)}+c(l,r)+dp(l',y)+\textcolor{Red}{dp(y+1,r')}+c(l',r') &\cdots 根据假设\\ &= \textcolor{Red}{dp(l,r) + dp(l',r')}&\cdots 根据公式(1) \end{aligned} dp(l,r)+dp(l,r)dp(l,x)+dp(x+1,r)+c(l,r)+dp(l,y)+dp(y+1,r)+c(l,r)dp(l,x)+dp(x+1,r)+c(l,r)+dp(l,y)+dp(y+1,r)+c(l,r)dp(l,x)+dp(x+1,r)+c(l,r)+dp(l,y)+dp(y+1,r)+c(l,r)=dp(l,r)+dp(l,r)根据公式(4)展开根据c的四边形不等式根据假设根据公式(1)
      证明完毕。

自此,四个分类都证明完毕。P为真命题

推论3

d p dp dp 满足四边形不等式,则 o p t opt opt满足单调性,既 o p t ( l , r − 1 ) ≤ o p t ( l , r ) ≤ o p t ( l + 1 , r ) opt(l,r-1)\le opt(l,r) \le opt(l+1,r) opt(l,r1)opt(l,r)opt(l+1,r)

证明

x = o p t ( l , r − 1 ) , y = o p t ( l , r ) , z = o p t ( l + 1 , r ) x=opt(l,r-1),y=opt(l,r),z=opt(l+1,r) x=opt(l,r1),y=opt(l,r),z=opt(l+1,r),有以下不等式
l ≤ x < r − 1 , l ≤ y < r , l + 1 ≤ z < r l\le x < r-1,l \le y < r, l+1 \le z < r lx<r1,ly<r,l+1z<r
我们用反证法证明:

  • y < x y<x y<x,结合上述不等式可得 y + 1 < x + 1 ≤ r − 1 < r y+1< x+1\le r-1< r y+1<x+1r1<r,根据四边形不等式,可得
    d p ( y + 1 , r − 1 ) + d p ( x + 1 , r ) ≤ d p ( y + 1 , r ) + d p ( x + 1 , r − 1 ) dp(y+1,r-1)+dp(x+1,r)\le dp(y+1,r)+dp(x+1,r-1) dp(y+1,r1)+dp(x+1,r)dp(y+1,r)+dp(x+1,r1)
    根据 y y y d p ( l , r ) dp(l,r) dp(l,r)的最佳决策点,可得
    d p ( l , y ) + d p ( y + 1 , r ) ≤ d p ( l , x ) + d p ( x + 1 , r ) dp(l,y)+dp(y+1,r)\le dp(l,x)+dp(x+1,r) dp(l,y)+dp(y+1,r)dp(l,x)+dp(x+1,r)
    将两式相加去除相同相,可得
    d p ( l , y ) + d p ( y + 1 , r − 1 ) ≤ d p ( l , x ) + d p ( x + 1 , r − 1 ) dp(l,y)+dp(y+1,r-1)\le dp(l,x) + dp(x+1,r-1) dp(l,y)+dp(y+1,r1)dp(l,x)+dp(x+1,r1)
    这个不等式意味着对于 d p ( l , r − 1 ) dp(l,r-1) dp(l,r1)来说, y y y是比 x x x更佳的决策点,与前置条件 x x x d p ( l , r − 1 ) dp(l,r-1) dp(l,r1)的最佳决策点矛盾
    因此, x > y x>y x>y不成立,所以 x ≤ y x\le y xy成立,既 o p t ( l , r − 1 ) ≤ o p t ( l , r ) opt(l,r-1)\le opt(l,r) opt(l,r1)opt(l,r)
  • 如 z < y,结合上述不等式,可得 l < l + 1 ≤ z < y l<l+1\le z<y l<l+1z<y,根据四边形不等式,可得
    d p ( l , z ) + d p ( l + 1 , y ) ≤ d p ( l , y ) + d p ( l + 1 , z ) dp(l,z)+dp(l+1,y)\le dp(l,y)+dp(l+1,z) dp(l,z)+dp(l+1,y)dp(l,y)+dp(l+1,z)
    根据 z z z d p ( l + 1 , r ) dp(l+1,r) dp(l+1,r) 的最佳决策点,可得
    d p ( l + 1 , z ) + d p ( z + 1 , r ) ≤ d p ( l + 1 , y ) + d p ( y + 1 , r ) dp(l+1,z)+dp(z+1,r)\le dp(l+1,y)+dp(y+1,r) dp(l+1,z)+dp(z+1,r)dp(l+1,y)+dp(y+1,r)
    两式相加去除相同项,可得
    d p ( l , z ) + d p ( z + 1 , r ) ≤ d p ( l , y ) + d p ( y + 1 , r ) dp(l,z)+dp(z+1,r)\le dp(l,y)+dp(y+1,r) dp(l,z)+dp(z+1,r)dp(l,y)+dp(y+1,r)
    这个不等式意味着对于 d p ( l , r ) dp(l,r) dp(l,r)来说, z z z是比 y y y更佳的决策点,与前置条件 y y y d p ( l , r ) dp(l,r) dp(l,r)的最佳决策点矛盾
    因此, y > z y>z y>z不成立,所以 y ≤ z y \le z yz成立,既 o p t ( l , r ) ≤ o p t ( l + 1 , r ) opt(l,r)\le opt(l+1,r) opt(l,r)opt(l+1,r)
    证明完毕

DP优化策略

根据定理 ( 3 ) (3) (3),我们可以知道 d p dp dp的最佳决策点符合 o p t ( l , r − 1 ) ≤ o p t ( l , r ) ≤ o p t ( l + 1 , r ) opt(l,r-1)\le opt(l,r) \le opt(l+1,r) opt(l,r1)opt(l,r)opt(l+1,r),意味着当我们寻找 o p t ( l , r ) opt(l,r) opt(l,r)时,不用从 [ l , r ] [l,r] [l,r]中找,只需要在 [ o p t ( l , r − 1 ) , o p t ( l + 1 , r ) ] [opt(l,r-1), opt(l+1,r)] [opt(l,r1),opt(l+1,r)]的范围中找就行了
所以在实现DP时,我们可以先从 r − l r-l rl小的区间开始DP,然后记录 o p t [ l , r ] opt[l,r] opt[l,r],当 r − l r-l rl变大时,它所依赖的 o p t ( l , r − 1 ) , o p t ( l + 1 , r ) opt(l,r-1), opt(l+1,r) opt(l,r1),opt(l+1,r)一定已经被计算出来

复杂度

整体决策的复杂度就是每个 d p dp dp状态所需要转移的复杂度,原本是
O ( ∑ 1 ≤ l < r ≤ n ( r − l + 1 ) ) O(\sum_{1\le l < r \le n}(r-l+1)) O(1l<rn(rl+1))
经过优化后是
      O ( ∑ 1 ≤ l < r ≤ n ( o p t ( l + 1 , r ) − o p t ( l , r − 1 ) + 1 ) ) = O ( ∑ l e n = 2 n ∑ i = 1 n − l e n + 1 ( o p t ( i + 1 , i + l e n − 1 ) − o p t ( i , i + l e n − 2 ) + 1 ) ) , l e n = r − l + 1 , i = l = O ( ∑ l e n = 2 n ( n − l e n + 1 + o p t ( n − l e n + 2 , n ) − o p t ( 1 , l e n − 1 ) ) ) ≤ O ( ∑ l e n = 2 n [ 2 ∗ n − l ] ) = O ( n 2 ) \begin{aligned} &\ \ \ \ \ O(\sum_{1\le l < r \le n}(opt(l+1,r)-opt(l,r-1)+1))\\ &=O(\sum_{len=2}^n \sum_{i=1}^{n-len+1}(opt(i+1,i+len-1)-opt(i,i+len-2)+1)),len=r-l+1,i=l\\ &=O(\sum_{len=2}^n(n-len+1+opt(n-len+2,n)-opt(1,len-1)))\\ &\le O(\sum_{len=2}^n[2*n-l]) \\ &=O(n^2) \end{aligned}      O(1l<rn(opt(l+1,r)opt(l,r1)+1))=O(len=2ni=1nlen+1(opt(i+1,i+len1)opt(i,i+len2)+1)),len=rl+1,i=l=O(len=2n(nlen+1+opt(nlen+2,n)opt(1,len1)))O(len=2n[2nl])=O(n2)

代码

for (int len = 2; len <= n; len++) { // 枚举长度
  for (int l = 1, r = len; r <= n; l++, r++) { // 枚举长度为 len 的所有区间
    dp[l][r] = INFINITY;
    for (int k = opt[l][r-1]; k <= opt[l+1][r]; k++) { // 枚举决策点
      if (dp[l][r] > dp[l][k] + dp[k+1][r] + cost(l,r)) {
        dp[l][r] = dp[l][k] + dp[k+1][r] + cost(l,r);
        opt[l][r] = k; // 更新最佳决策点
      }
    }
  }
}

参考资料

[1] 香港科技大学课件:The Knuth-Yao Quadrangle Inequality Speedup is a Consequence
of Total Monotonicity

[2] OI-wiki:四边形不等式优化
[3] cp-algorithms:Kunth’s optimization
[4] 动态规划加速原理之四边形不等式 —— 华中师大附中 赵爽 (这个没找到原文,随便找了个pdf,如有人知晓请告知)

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
区间DP四边形不等式优化是一种用于优化区间DP的方法。四边形不等式可以用来简化具有特定转移方式的DP问题。具体来说,如果转移方程满足区间包含单调性和四边形不等式,那么可以使用四边形不等式优化来减少计算量。 要判断一个转移方程是否满足区间包含单调性和四边形不等式,可以先进行表格计算来观察。如果观察到满足条件,就可以使用四边形不等式优化。 引理表明,如果一个转移方程满足区间包含单调性和四边形不等式,那么优化后的转移方程也会满足四边形不等式。这意味着通过四边形不等式优化可进一步减少计算复杂度。 因此,区间DP四边形不等式优化是一种有效的优化方法,可以提高算法的效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【DP四边形不等式优化详解(一)](https://blog.csdn.net/qq_37656398/article/details/103537173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [四边形不等式优化区间DP技巧)](https://blog.csdn.net/AC__dream/article/details/123668489)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值