前言
此优化策略由高德纳和姚期智发现并证明,故学名称之为 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,j−1)≤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,j−1)≤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 l≤l′≤r′≤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')\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 l≤l′≤r′≤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') c(l,r′)+c(l′,r)≤c(l,r)+c(l′,r′)
推论1
对于任意的 l ≤ k < r l\le k <r l≤k<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):=l≤k<rmin{
k∣dp(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 l≤l′≤r′≤r 的根据是否相等的情况分四类进行讨论,分别证明:
-
当 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′)