15.3-1
运行RECURSIVE-MATRIX-CHAIN
更高效一点。
第15.2节指出枚举所有可能的括号化方案是
Ω(4n/n3/2)
。下面证明RECURSIVE-MATRIX-CHAIN
是
O(n3n−1)
。
书中的本节证明了:
我们证明存在 c 使得
使用替换法证明 T(n)=O(n3n−1) 。
T(1)=1≤c ,对 n≥2 有:
所以
RECURSIVE-MATRIX-CHAIN
更高效。
注释:
15.3-2
递归树略,无效的原因是没有重叠子问题。
15.3-3
具有最优子结构性质。假设
Aij
是最优解,一定存在一个
k
使
15.3-4
举例为
p0=100,p1=100,p2=5,p3=10,p4=1
分别表示
A1,A2,A3,A4
按教授的意思选择
k=2
有
(A1A2)(A3A4)
,总共
p0⋅p1⋅p2+p2⋅p3⋅p4+p0⋅p2⋅p4=51000
实际存在
A1((A2A3)A4)
,总共
p0⋅p1⋅p4+p1⋅p2⋅p3+p1⋅p2⋅p4=15500
15.3-5
给出一个长度为 4 的价格和限制表。
Length i | 1 | 2 | 3 | 4 |
---|---|---|---|---|
price Pi | 15 | 20 | 33 | 36 |
limit li | 2 | 1 | 1 | 1 |
若没有限制表,长度为 4 的切割方案是 4 个长度为 1 的总价是 60。
现在只能选择长度分别是 1,1,2 总价是 50 的切割方案,原因是在长度为 2 的子问题寻找最优解时不能继续切割成长度为 1,1 的方案。
15.3-6
首先假设在一次兑换中不能重复兑换某一种货币,比如兑换序列为
i→j→i→j...
。这个假设的原因是若
rij>1/rji
,这样银行就要倒闭了。
当对任意
k
都有
利用剪切-粘贴方法证明,即假设最优兑换序列是
ki,ki+1...kj
,又存在另一个兑换序列
ki,k′i+1...k′j−1,kj
使得
rkik′i+1rk′i+1k′i+2...rk′j−1kj>rkiki+1rki+1ki+2...rkj−1kj
,我们用
ki,k′i+1...k′j−1,kj
序列代替
ki,ki+1...kj
得到更优解。
当
ck
为任意值时,此时不一定具有最优子结构,举个例子,从货币 1 兑换到 货币 4,汇率分别是
r12=2,r13=2.5,r14=6,r23=1.5,r24=3,r34=3
,其中
rii=1,rji=1/rij
。令
c1=2,c2=c3=3
。所以兑换货币 1 到货币 4 有 5 种兑换方法,最优解是序列
1,2,3,4
,最后 1 个单位的货币 1 兑换成 6 个单位的货币 4。
然后检查子结构,从货币 1 兑换到货币 3,最优兑换序列就是
1,3
。这个兑换序列并不是
1,2,3
。