四边形不等式优化讲解(详解)

本文详细讲解了四边形不等式优化的概念、证明及应用,并以合并石子问题为例,通过三个步骤证明了四边形不等式优化的正确性,最后给出了O(n^2)复杂度的证明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

累加器传送门:

http://blog.youkuaiyun.com/NOIAu/article/details/71775000


本篇博文意在详细讲解如下内容

F. 什么是四边形不等式

S. 四边形不等式优化如何证明

T. 怎么用四边形不等式优化

(好气啊,这篇博文我写了两遍,第一遍的没有保存就关了)
(感谢博客园的Staginner,他的博客对我有很大影响)
(感谢wys大佬亲自为我查了一部分内容的错)
(如果本文有什么错误的话,请向我提出,非常感谢)
这是他的博客:
http://www.cnblogs.com/staginner/archive/2012/03/12/2391925.html


引入:

在dp问题中,我们经常遇见这样的一类问题
他们的dp转移方程是这样的

dp[i][j]=min{dp[i][k]+dp[k+1][j]+cost[i][j]}

显然for一边i,for一边j,在算dp[i][j]的时候还得for一遍k,这是O(n^3)的复杂度,这样的复杂度在很多时候是不能接受的,如果dp转移方程已经设计好了,也无法再在dp方程上优化,我们怎么来提高计算效率呢?(关于O(n^2)复杂度的证明我放在最后)


~PART ONE 交叉小于包含

对于( a < b <= c< d )

如果有f[a][c]+f[b][d]<=f[b][c]+f[a][d]

(可以理解为一句话,交叉小于包含,即交叉的两个区间,a到c和b到d的值满足小于等于包含的两个区间[bc包含于ad])
则说这个东西满足四边形不等式,当然这个东西可能是dp数组,也可以是其他数组,比如引入里提到的cost数组,表示的是i到j的花费(比如合并石子问题)

给出两个定理:

1、如果上述的w函数同时满足区间包含单调性和四边形不等式性质,那么函数dp也满足四边形不等式性质
我们再定义s(i,j)表示 dp(i,j) 取得最优值时对应的下标(即 i≤k≤j 时,k 处的 dp 值最大,则 s(i,j)=k此时有如下定理
2、假如dp(i,j)满足四边形不等式,那么s(i,j)单调,即 s(i,j)≤s(i,j+1)≤s(i+1,j+1)
如果不知道为什么,没有关系,反正后面都要证明


~PART TWO 证明过程三步走

(这一部分如果没有完全懂没有关系,PART-THREE里会结合题目来推导一遍,所以有一小部分推导在这里先不写出来,这一部分尽量先说原理和方法)


壹:证明cost为凸(满足四边形不等式)

显然,当且仅当对于所有的i,j,均满足如下式子
(令i< i+1<= j< j+1)
cost[i][j]+cost[i+1][j+1]<=cost[i][j+1]+cost[i+1][j]
(利用PART ONE的交叉小于包含写出来的式子)
转移一下式子
即要证明对于所有的i,j,要使
cost[i][j]-cost[i+1][j]&

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值