四边形不等式优化详解

本文介绍了一种称为四边形不等式优化的技术,用于加速特定类型的动态规划问题,将其时间复杂度从O(n^3)降低到O(n^2)。通过证明四边形不等式满足条件,可以优化动态规划中k的枚举,适用于各种区间DP问题。

废话

这大概是跟斜率优化一样神的东西qwq,但是证明复杂一点,以及似乎用到的题目也少一点,毕竟使用条件有点苛刻。

正题

它用来加速类似这样的 d p dp dp f [ i ] [ j ] = min ⁡ k = i j − 1 { f [ i ] [ k ] + f [ k + 1 ] [ j ] + w ( i , j ) } f[i][j]=\min_{k=i}^{j-1}\{f[i][k]+f[k+1][j]+w(i,j)\} f[i][j]=mink=ij1{ f[i][k]+f[k+1][j]+w(i,j)}

每道题 d p dp dp 不一样,不一定都是这种形式,这里只是以这种可能比较经典的作为例子。其中, w ( i , j ) w(i,j) w(i,j) 表示这一步操作的代价(贡献)。

特别的,设 f [ i ] [ i ] = w ( i , i ) = 0 f[i][i]=w(i,i)=0 f[i][i]=w(i,i)=0

以及,虽然这个例子看起来很像区间 d p dp dp,但是四边形不等式优化的使用是不局限于区间 d p dp dp 的。

优化需要经过多步证明,都满足了就可以将这样的 O ( n 3 ) O(n^3) O(n3) 枚举优化到 O ( n 2 ) O(n^2) O(n2),实质上是优化了 k k k 的枚举。

使用步骤

  1. 证明 w w w 满足四边形不等式
  2. 证明 w w w 满足 w ( a , d ) ≥ w ( b , c )   ( a ≤ b ≤ c ≤ d ) w(a,d)\geq w(b,c)~(a\leq b\leq c\leq d) w(a,d)w(b,c) (abcd)
  3. 利用 1 , 2 1,2 1,2 证明 f f f 满足四边形不等式
  4. p ( i , j ) p(i,j) p(i,j) 表示 f [ i ] [ j ] f[i][j] f[i][j] 的最优决策点(也就是最优的 k k k),证明 p ( i , j − 1 ) ≤ p ( i , j ) ≤ p ( i + 1 , j ) p(i,j-1)\leq p(i,j)\leq p(i+1,j) p(i,j1)p(i,j)p(i+1,j)

做完这四步后,根据最后证明出来的这个柿子,对于当前的 i , j i,j i,j,枚举 k k k 时只需要在 p ( i , j − 1 ) p(i,j-1) p(i,j1) p ( i + 1 , j ) p(i+1,j) p(i+1,j) 之间枚举就好,可以证明这样的时间复杂度为 O ( n 2 ) O(n^2) O(n2)(证明最后有)。

由于对于每一题的证明都不一样,所以下面只能讲一些用来帮助证明的定理和推论。

四边形不等式

假如对于任意 a ≤ b ≤ c ≤ d a\leq b\leq c\leq d abcd,满足 w ( a , c ) + w ( b , d ) ≤ w ( b , c ) + w ( a , d ) w(a,c)+w(b,d)\leq w(b,c)+w(a,d) w(a,c)+w(b,d)w(b,c)+w(a,d),那么称 w w w 满足四边形不等式。(务必背下这个柿子qwq)

推论: 假如对于任意 a < c a<c a<c,满足 w ( a , c ) + w ( a + 1 , c + 1 ) ≤ w ( a + 1 , c ) + w ( a , c + 1 ) w(a,c)+w(a+1,c+1)\leq w(a+1,c)+w(a,c+1) w(a,c)+w(a+1,c+1)w(a+1,c)+w(a,c+1),那么 w w w 满足四边形不等式。

证明:

a + 1 < c a+1<c a+1<c,那么有 a < c a<c a<c,则有:
w ( a , c ) + w ( a + 1 , c + 1 ) ≤ w ( a + 1 , c ) + w ( a , c + 1 )    ( 1 ) w(a,c)+w(a+1,c+1)\leq w(a+1,c)+w(a,c+1)~~(1) w(a,c)+w(a+1,c+1)w(a+1,c)+w(a,c+1)  (1)

因为 a + 1 < c a+1<c a+1<c,所以有:
w ( a + 1 , c ) + w ( a + 2 , c + 1 ) ≤ w ( a + 2 , c ) + w ( a + 1 , c + 1 )    ( 2 ) w(a+1,c)+w(a+2,c+1)\leq w(a+2,c)+w(a+1,c+1)~~(2) w(a+1,c)+w(a+2,c+1)w(a+2,c)+w(a+1,c+1)  (2)

( 1 ) ( 2 ) (1)(2) (1)(2)两式相加,消去左右相同的项,得到:
w ( a , c ) + w ( a + 2 , c + 1 ) ≤ w ( a + 2 , c ) + w ( a , c + 1 )    ( 3 ) w(a,c)+w(a+2,c+1)\leq w(a+2,c)+w(a,c+1)~~(3) w(a,c)+w(a+2,c+1)w(a+2,c)+w(a,c+1)  (3)

( 3 ) (3) (3) 式相比 ( 1 ) (1) (1) 式,就是 a + 1 a+1 a+1 都变成了 a + 2 a+2 a+2,以此类推下去,就可以变成任意 a + k a+k a+k,设 b = a + k b=a+k b=a+k,于是有:
w ( a , c ) + w ( b , c + 1 ) ≤ w ( b , c ) + w ( a , c + 1 ) w(a,c)+w(b,c+1)\leq w(b,c)+w(a,c+1) w(a,c)+w(b,c+1)w(b,c)+w(a,c+1)

同理,可以将 c + 1 c+1 c

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值