四边形不等式优化DP

四边形不等式

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 abcd

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+1j<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+1k<k+1

k < k + 1 ≤ t < t + 1 k < k + 1 \le t < t + 1 k<k+1t<t+1

联立则证明。

因为上课的时候老师没有写设(啊不是,所以就这样了

证明如下

设: i < i + 1 ≤ j < j + 1 i < i + 1 \le j < j + 1 i<i+1j<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+1k<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 abcd

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+1j<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+1j<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)

即可使用

一般而言,你已经确信自己的转移足够优秀但多了一维 且 状态时二维 就有可能会用到这个优化了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值