关于四边形不等式或石子合并的资料。网上有很多。但有不少都是语焉不详,直接抛给你几个结论,让人很难理解。这篇文章将以石子合并为例。证明关于四边形不等式的一些结论。算是一个温习。
【题面】
在一个操场上摆放着一排n(n≤20)堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。
试编程求出将n堆石子合并成一堆的最小得分和最大得分以及相应的合并方案。
【算法分析】
下面只讨论最小得分的情况,最大得分的情况类似。
设
f[I,j]=min{f[I,k]+f[k+1,j]+w[I,j]}{i<=k 很明显,这是一个O(n^3)的动规 【算法优化】 下面是重头戏。 首先给出两个定义: (1)当函数w[i,j]满足w[i,j]+w[i',j']<=w[i',j]+w[i,j'],i<=i'<=j<=j'时,称w满足四边形不等式。 (2)当函数w[i,j]满足w[i’,j]≤w[i,j’],i<=i'<=j<=j' 时称w关于区间包含关系单调。 很明显的,一开始定义的w[I,j]满足区间包含关系和四边形不等式。 现在我们要证明f[I,j]=min{f[I,k]+f[k+1,j]+w[I,j]}{i<=k 我们利用数学归纳法对四边形不等式中的区间长度进行归纳。 证明如下: 当i=i’或j=j’时,不等式显然成立。由此可知,当l≤1时,函数f满足四边形不等式。 下面分两种情形进行归纳证明: 情形1:i
在这种情形下,四边形不等式简化为如下的不等式:f[i,j]+f[j,j’] ≤f[i,j’]+0,设k=max{p| f[i,j’]=f[i,p-1]+f[p,j’]+w[i,j’] },再分两种情形k≤j或k>j。下面只讨论k≤j,k>j的情况是类似的。 情形1.1:k≤j,此时: 情形1.2:k>j,略去 情形2:i
设 y=max{p | f[i’,j]=f[i’,p-1]+f[p,j]+w[i’,j] } z=max{p | f[i,j’]=f[i,p-1]+f[p,j’]+w[i,j’] } 仍需再分两种情形讨论,即z≤y或z>y。下面只讨论z≤y,z>y的情况是类似的。 情形2.1,i 显然的,我们有: f[i,j]+f[i',j']<=w[i,j]+f[i,z-1]+f[z,j]+w[i',j']+f[i',y-1]+f[y,j'] 因为w满足四边形不等式,所以: f[i,j]+f[i',j']<=w[i,j']+w[i',j]+f[i',y-1]+f[i,z-1]+f[z,j]+f[y,j'] 因为f[i,j']+f[i',j]=w[i,j']+w[i',j]+f[i',y-1]+f[i,z-1]+f[y,j]+f[z,j'] 所以,要证f[i,j']+f[i'j]>=f[i,j]+f[i',j'],就要证f[z,j]+f[y,j']<=f[y,j]+f[z,j']。 因为i 情形2.1,i 综上所述,f[i,j]满足四边形不等式。 事实上,对于任意f[I,j]=max{f[I,k]+f[k+1,j]+w[I,j]}{i<=k 前面千辛万苦证明了f满足四边形不等式,那么它有什么用呢? 之所以要证明四边形不等式,就是为了证明f满足决策单调性,即: s[i,j-1]≤s[i,j]≤s[i+1,j], i≤j 其中,s[I,j]为区间[I,j]上的最优决策。 当i=j时,单调性显然成立。因此下面只讨论i 令fk[i,j]=f[i,k-1]+f[k,j]+w[i,j]。要证明s[i,j]≤s[i,j+1],只要证明对于所有i 事实上,我们可以证明一个更强的不等式 fk[i,j]-fk’[i,j]≤fk[i,j+1]-fk’[i,j+1] 也就是: fk[i,j]+fk’[i,j+1]≤fk[i,j+1]+fk’[i,j] 利用递推定义式将其展开整理可得:f[k,j]+f[k’,j+1]≤f[k’,j]+f[k,j+1],这正是k≤k’≤j 综上所述,当w满足四边形不等式时,函数s[i,j]具有单调性。 因此,我们可以得到一个更优化的转移方程: 改进后的状态转移方程所需的计算时间为 上述方法利用四边形不等式推出最优决策的单调性,从而减少每个状态转移的状态数,降低算法的时间复杂度。 这样这道题就解决了。 一般的,对于状态转移方程形如:f[i , j] = opt{f[i , k] + f[k+1 , j]} + w[i , j], i 转载请注明出处
BY QW