四边形不等式
f ( i , j ) = m i n i < k < j ( f ( i , k ) + f ( k + 1 , j ) ) + w ( i , j ) f(i , j) = min _{i < k < j} (f(i , k) + f(k + 1 , j)) + w(i , j) f(i,j)=mini<k<j(f(i,k)+f(k+1,j))+w(i,j)
这是一个2D/1D动态规划(一共有约 n^2 个状态,每次状态转移需要 O(n) 的时间),所以朴素的算法的时间复杂度是 O(n^3) 。然而,如果上面的 w(l,r) 这个二元函数符合一些条件,我们可以在 O(n^2) 内解决它。
性质
设: a ≤ b ≤ c ≤ d a \le b \le c \le d a≤b≤c≤d
w ( b , c ) ≤ w ( a , c ) w(b , c) \le w(a,c) w(b,c)≤w(a,c)
w ( a , c ) + w ( b , d ) ≤ w ( a , d ) + w ( b , c ) w(a , c) + w(b , d) \le w(a , d) + w(b , c) w(a,c)+w(b,d)≤w(a,d)+w(b,c)
证明
快速检查是否符合四边形不等式
证明 w 符合
若:
i < i + 1 ≤ j < j + 1 i < i + 1 \le j < j + 1 i<i+1≤j<j+1
w ( i , j ) + w ( i + 1 , j + 1 ) ≤ w ( i , j + 1 ) + w ( i + 1 , j ) w(i , j) + w(i + 1 , j + 1) \le w(i , j + 1) + w(i + 1 , j) w(i,j)+w(i+1,j+1)≤w(i,j+1)+w(i+1,j)
则满足
w ( a , c ) + w ( b , d ) ≤ w ( a , d ) + w ( b , c ) w(a , c) + w(b , d) \le w(a , d) + w(b , c) w(a,c)+w(b,d)≤w(a,d)+w(b,c)
此处先说明一个我第一次学的时候的错误证明方法以及错误原因(如果不想被打乱思路直接跳到下面/bx
第一次看到都一个式子,以为是两个式子(我把设的 i 和 j 当成了与第一个式子等价的式子)
所以认为再设
j < j + 1 ≤ k < k + 1 j < j + 1 \le k < k + 1 j<j+1≤k<k+1
k < k + 1 ≤ t < t + 1 k < k + 1 \le t < t + 1 k<k+1≤t<t+1
联立则证明。
因为上课的时候老师没有写设(啊不是,所以就这样了
证明如下
设: i < i + 1 ≤ j < j + 1 i < i + 1 \le j < j + 1 i<i+1≤j<j+1
w ( i , j ) + w ( i + 1 , j + 1 ) ≤ w ( i , j + 1 ) + w ( i + 1 , j ) w(i , j) + w(i + 1 , j + 1) \le w(i , j + 1) + w(i + 1 , j) w(i,j)+w(i+1,j+1)≤w(i,j+1)+w(i+1,j) --------- ①
设: i < i + 1 ≤ k < k + 1 i < i + 1 \le k < k + 1 i<i+1≤k<k+1
w ( i , k ) + w ( i + 1 , k + 1 ) ≤ w ( i , k + 1 ) + w ( i + 1 , k ) w(i , k) + w(i + 1 , k + 1) \le w(i , k + 1) + w(i + 1 , k) w(i,k)+w(i+1,k+1)≤w(i,k+1)+w(i+1,k)
令: k = j + 1 k = j + 1 k=j+1
则: w ( i , j + 1 ) + w ( i + 1 , j + 2 ) ≤ w ( i , j + 2 ) + w ( i + 1 , j + 1 ) w(i , j + 1) + w(i + 1 , j + 2) \le w(i , j + 2) + w(i + 1 , j + 1) w(i,j+1)+w(i+1,j+2)≤w(i,j+2)+w(i+1,j+1) --------- ②
① + ② 得:
w ( i , j ) + w ( i + 1 , j + 2 ) ≤ w ( i , j + 2 ) + w ( i + 1 , j ) w(i , j) + w(i + 1,j + 2) \le w(i , j + 2) + w(i + 1 , j) w(i,j)+w(i+1,j+2)≤w(i,j+2)+w(i+1,j)
则可以推广到
w ( i , j ) + w ( i + 1 , j + n ) ≤ w ( i , j + n ) + w ( i + 1 , j ) w(i , j) + w(i + 1,j + n) \le w(i , j + n) + w(i + 1 , j) w(i,j)+w(i+1,j+n)≤w(i,j+n)+w(i+1,j)
得证
a ≤ b ≤ c ≤ d a \le b \le c \le d a≤b≤c≤d
w ( a , c ) + w ( b , d ) ≤ w ( a , d ) + w ( b , c ) w(a , c) + w(b , d) \le w(a , d) + w(b , c) w(a,c)+w(b,d)≤w(a,d)+w(b,c)
证明 f 符合
若 w ( i , j ) w(i,j) w(i,j)满足区间包含单调性和四边形不等式,则状态 f ( i , j ) f(i,j) f(i,j)满足四边形不等式。
定义: f ( i , j ) = m i n i < k < j ( f ( i , k ) + f ( k + 1 , j ) ) + w ( i , j ) f(i , j) = min _{i < k < j} (f(i , k) + f(k + 1 , j)) + w(i , j) f(i,j)=mini<k<j(f(i,k)+f(k+1,j))+w(i,j)
设 i < i + 1 ≤ j < j + 1 i < i + 1 \le j < j + 1 i<i+1≤j<j+1
则有 f ( i , j ) + f ( i + 1 , j + 1 ) ≤ f ( i , j + 1 ) + f ( i + 1 , j ) f(i , j) + f(i + 1 , j + 1) \le f(i , j + 1) + f(i + 1 , j) f(i,j)+f(i+1,j+1)≤f(i,j+1)+f(i+1,j)
设: x x x 为 f ( i , j + 1 ) f(i , j + 1) f(i,j+1) 的最优决策点 , y y y 为 f ( i + 1 , j ) f(i + 1 , j) f(i+1,j) 的最优决策点.
- 则 若 x < y x < y x<y , f ( i , j ) f(i , j) f(i,j) 用 x x x 转移 f ( i + 1 , j + 1 ) f(i + 1 , j + 1) f(i+1,j+1) 用 y y y 转移 大于 用其最优决策点转移
即 :
f ( i , j ) + f ( i + 1 , j + 1 ) < f ( i , x ) + f ( x + 1 , j ) + w ( i , j ) + f ( i + 1 , y ) + f ( y + 1 , j + 1 ) + w ( i + 1 , j + 1 ) f(i,j) + f(i + 1 , j + 1) < f(i , x) + f(x + 1 , j) + w(i , j) + f(i + 1 , y) + f(y + 1 , j + 1) + w(i + 1 , j + 1) f(i,j)+f(i+1,j+1)<f(i,x)+f(x+1,j)+w(i,j)+f(i+1,y)+f(y+1,j+1)+w(i+1,j+1)
f ( i , j + 1 ) + f ( i + 1 , j ) = f ( i , x ) + f ( x + 1 , j + 1 ) + w ( i , j + 1 ) + f ( i + 1 , y ) + f ( y + 1 , j ) + w ( i + 1 , j ) f(i , j + 1) + f(i + 1 , j) = f(i , x) + f(x + 1 , j + 1) + w(i , j + 1) + f(i + 1 , y) + f(y + 1 , j) + w(i + 1 , j) f(i,j+1)+f(i+1,j)=f(i,x)+f(x+1,j+1)+w(i,j+1)+f(i+1,y)+f(y+1,j)+w(i+1,j)
则问题转化为
$f(i , x) + f(x + 1 , j) + w(i , j) + f(i + 1 , y) + f(y + 1 , j + 1) + w(i + 1 , j + 1) < $
f ( i , x ) + f ( x + 1 , j + 1 ) + w ( i , j + 1 ) + f ( i + 1 , y ) + f ( y + 1 , j ) + w ( i + 1 , j ) f(i , x) + f(x + 1 , j + 1) + w(i , j + 1) + f(i + 1 , y) + f(y + 1 , j) + w(i + 1 , j) f(i,x)+f(x+1,j+1)+w(i,j+1)+f(i+1,y)+f(y+1,j)+w(i+1,j)
即
$f(x + 1 , j) + f(y + 1 , j + 1) + w(i , j) + w(i + 1 , j + 1) < $
f ( x + 1 , j + 1 ) + f ( y + 1 , j ) + w ( i , j + 1 ) + w ( i + 1 , j ) f(x + 1 , j + 1) + f(y + 1 , j) + w(i , j + 1) + w(i + 1 , j) f(x+1,j+1)+f(y+1,j)+w(i,j+1)+w(i+1,j) ------------------- ①
又因为 w w w 复合四边形不等式即
$w(i , j) + w(i + 1 , j + 1) < w(i , j + 1) + w(i + 1 , j) $ ----------------- ②
① - ② 得
f ( x + 1 , j ) + f ( y + 1 , j + 1 ) < f ( x + 1 , j + 1 ) + f ( y + 1 , j ) f(x + 1 , j) + f(y + 1 , j + 1) < f(x + 1 , j + 1) + f(y + 1 , j) f(x+1,j)+f(y+1,j+1)<f(x+1,j+1)+f(y+1,j)
符合 x + 1 < y + 1 < j < j + 1 x + 1 < y + 1 < j < j + 1 x+1<y+1<j<j+1
- 则 若 y < x y < x y<x , f ( i , j ) f(i , j) f(i,j) 用 y y y 转移 f ( i + 1 , j + 1 ) f(i + 1 , j + 1) f(i+1,j+1) 用 x x x 转移 大于 用其最优决策点
即 :
f ( i , j ) + f ( i + 1 , j + 1 ) < f ( i , y ) + f ( y + 1 , j ) + w ( i , j ) + f ( i + 1 , x ) + f ( x + 1 , j + 1 ) + w ( i + 1 , j + 1 ) f(i,j) + f(i + 1 , j + 1) < f(i , y) + f(y + 1 , j) + w(i , j) + f(i + 1 , x) + f(x + 1 , j + 1) + w(i + 1 , j + 1) f(i,j)+f(i+1,j+1)<f(i,y)+f(y+1,j)+w(i,j)+f(i+1,x)+f(x+1,j+1)+w(i+1,j+1)
f ( i , j + 1 ) + f ( i + 1 , j ) = f ( i , x ) + f ( x + 1 , j + 1 ) + w ( i , j + 1 ) + f ( i + 1 , y ) + f ( y + 1 , j ) + w ( i + 1 , j ) f(i , j + 1) + f(i + 1 , j) = f(i , x) + f(x + 1 , j + 1) + w(i , j + 1) + f(i + 1 , y) + f(y + 1 , j) + w(i + 1 , j) f(i,j+1)+f(i+1,j)=f(i,x)+f(x+1,j+1)+w(i,j+1)+f(i+1,y)+f(y+1,j)+w(i+1,j)
则问题转化为
$f(i , y) + f(y + 1 , j) + w(i , j) + f(i + 1 , x) + f(x + 1 , j + 1) + w(i + 1 , j + 1) < $
f ( i , x ) + f ( x + 1 , j + 1 ) + w ( i , j + 1 ) + f ( i + 1 , y ) + f ( y + 1 , j ) + w ( i + 1 , j ) f(i , x) + f(x + 1 , j + 1) + w(i , j + 1) + f(i + 1 , y) + f(y + 1 , j) + w(i + 1 , j) f(i,x)+f(x+1,j+1)+w(i,j+1)+f(i+1,y)+f(y+1,j)+w(i+1,j)
即
$f(i , y) + f(i + 1 , x) + w(i , j) + w(i + 1 , j + 1) < $
f ( i , x ) + f ( i + 1 , y ) + w ( i , j + 1 ) + w ( i + 1 , j ) f(i , x) + f(i + 1 , y) + w(i , j + 1) + w(i + 1 , j) f(i,x)+f(i+1,y)+w(i,j+1)+w(i+1,j) ------------------- ③
又因为 w w w 复合四边形不等式即
$w(i , j) + w(i + 1 , j + 1) < w(i , j + 1) + w(i + 1 , j) $ ----------------- ④
③ - ④ 得
f ( i , x ) + f ( i + 1 , y ) < f ( i , x ) + f ( i + 1 , y ) f(i , x) + f(i + 1 , y) < f(i , x) + f(i + 1 , y) f(i,x)+f(i+1,y)<f(i,x)+f(i+1,y)
符合 i < i + 1 < y < x i < i + 1 < y < x i<i+1<y<x
则问题可以拓展,数学归纳则得证。
-------- 证明由 lyx 大佬提出
利用四边形不等式即复杂度证明
f ( i , j ) = m i n i < k < j ( f ( i , k ) + f ( k + 1 , j ) ) + w ( i , j ) f(i , j) = min _{i < k < j} (f(i , k) + f(k + 1 , j)) + w(i , j) f(i,j)=mini<k<j(f(i,k)+f(k+1,j))+w(i,j)
还是这个式子,如何优化呢?
令 m ( i , j ) m(i , j) m(i,j) 代表 f ( i , j ) f(i , j) f(i,j) 的最优决策点。
for(int d = 2;d <= n;++ d)
for(int l = 1, r = d;r <= n;++ l , ++ r){
f[l][r] = INF;
for(int k = m[l][r - 1]; k <= m[l + 1][r];++ k)
if(dp[l][k] + fp[l][k] + w(l , r) < dp[l][r]){
dp[l][r] = dp[l][k] + dp[k + 1][r] + w(l , r);
m[l][r] = k;
}
}
其实就是指 f ( i , j ) f(i , j) f(i,j) 的最优决策点一定在 f ( i + 1 , j ) f(i + 1 , j) f(i+1,j) 和 f ( i , j + 1 ) f(i , j + 1) f(i,j+1) 的最优决策点间 从而使复杂度由 n 3 n ^ 3 n3 降为 n 2 n ^ 2 n2。
正确性证明
设: u u u 为 f ( i , j ) f(i,j) f(i,j) 的最优决策点, k k k 为 f ( i + 1 , j ) f(i + 1 , j) f(i+1,j) 的最优决策点。
欲证 u < k u < k u<k ,不妨我们反证。
先假设 u > k
所以
k + 1 < u + 1 < j < j + 1 k + 1 < u + 1 < j < j + 1 k+1<u+1<j<j+1
f ( k + 1 , j ) + f ( u + 1 , j + 1 ) < f ( k + 1 , j + 1 ) + f ( u + 1 , j ) f(k + 1 , j) + f(u + 1 , j + 1) < f(k + 1 , j + 1) + f(u + 1, j) f(k+1,j)+f(u+1,j+1)<f(k+1,j+1)+f(u+1,j) ------------------- ①
由于 u u u 为 f ( i , j ) f(i,j) f(i,j) 的最优决策点 所以
f ( i , u ) + f ( u + 1 , j ) + w ( i , j ) < f ( i , k ) + f ( k + 1 , j ) + w ( i , j ) f(i , u) + f(u + 1 , j) + w(i , j) < f(i , k) + f(k + 1 , j) + w(i , j) f(i,u)+f(u+1,j)+w(i,j)<f(i,k)+f(k+1,j)+w(i,j)
f ( i , u ) + f ( u + 1 , j ) < f ( i , k ) + f ( k + 1 , j ) f(i , u) + f(u + 1 , j) < f(i , k) + f(k + 1 , j) f(i,u)+f(u+1,j)<f(i,k)+f(k+1,j) ----------------- ②
① + ② 得到
f ( i , u ) + f ( u + 1 , j + 1 ) < f ( i , k ) + f ( k + 1 , j + 1 ) f(i , u) + f(u + 1 , j + 1) < f(i , k) + f(k + 1 , j + 1) f(i,u)+f(u+1,j+1)<f(i,k)+f(k+1,j+1)
即 u < k u < k u<k
i < i + 1 < k < u i < i + 1 < k < u i<i+1<k<u
f ( i , k ) + f ( i + 1 , u ) < f ( i , u ) + f ( i + 1 , k ) f(i , k) + f(i + 1 , u) < f(i , u) + f(i + 1 , k) f(i,k)+f(i+1,u)<f(i,u)+f(i+1,k) ------------------- ③
由于 u u u 为 f ( i , j ) f(i,j) f(i,j) 的最优决策点 所以
f ( i , u ) + f ( u + 1 , j ) + w ( i , j ) < f ( i , k ) + f ( k + 1 , j ) + w ( i , j ) f(i , u) + f(u + 1 , j) + w(i , j) < f(i , k) + f(k + 1 , j) + w(i , j) f(i,u)+f(u+1,j)+w(i,j)<f(i,k)+f(k+1,j)+w(i,j)
f ( i , u ) + f ( u + 1 , j ) < f ( i , k ) + f ( k + 1 , j ) f(i , u) + f(u + 1 , j) < f(i , k) + f(k + 1 , j) f(i,u)+f(u+1,j)<f(i,k)+f(k+1,j) ----------------- ④
① + ② 得到
f ( i + 1 , u ) + f ( u + 1 , j ) < f ( i + 1 , k ) + f ( k + 1 , j ) f(i + 1 , u) + f(u + 1 , j) < f(i + 1 , k) + f(k + 1 , j) f(i+1,u)+f(u+1,j)<f(i+1,k)+f(k+1,j)
即 u < k u < k u<k
得证 k > u
f ( i , j ) f(i , j) f(i,j) 的最优决策点一定在 f ( i + 1 , j ) f(i + 1 , j) f(i+1,j) 和 f ( i , j + 1 ) f(i , j + 1) f(i,j+1) 的最优决策点间
时间复杂度证明
观察式子发现内存的 O ( n 2 ) O(n ^ 2) O(n2) 循环变为 O ( n ) O(n) O(n) 双指针
总统变为 n n n 个双指针 复杂度为 O ( n 2 ) O(n ^ 2) O(n2)
实际应用的提醒
使用的前提
当 i < i + 1 ≤ j < j + 1 i < i + 1 \le j < j + 1 i<i+1≤j<j+1
$w(i , j) + w(i + 1 , j + 1) \le w(i , j + 1) + w(i + 1 , j) $
w ( i + 1 , j ) ≤ w ( i , j + 1 ) w(i + 1 , j) \le w(i,j + 1) w(i+1,j)≤w(i,j+1)
即可使用
补
一般而言,你已经确信自己的转移足够优秀但多了一维 且 状态时二维 就有可能会用到这个优化了。