我最近看到了一个杆切割问题,其中B(i)=切割长度为i单位的杆的最佳价格,而p(i)=长度为i单位的杆的价格。
给出的算法是这样的: B(i)= max(1 <= k <= i){p(k)+ B(i-k)}
不应该是这样的:
B(i)= max(1 <= k <= floor(i / 2)){B(k)+ B(i-k)}
其中B(1)= p(1);
因此,对于一个零件的单个杆和第二个零件的最佳成本,这两个部件都是最优的成本而不是成本。
for example: B(4) = max{ (B(1) + B(3)); (B(2) + B(2)) }
instead of max{ (p(1) + B(3)); (p(2) + B(2)); (p(3) + B(1)) }
有人可以解释一下吗?
答案 0 :(得分:3)
实际上公式是正确的。你有B(i)= max(1&lt; = k&lt; = i){p(k)+ B(i-k)}。我们假设您有一根长度为i
的绳索。如果要剪切它,那么你将剪切一段k
,其中k在1
和i
之间,并将继续切割绳索的剩余部分。总的来说,它花费你p(k)(削减你决定不再削减的初始部分的价格)和削减剩余B(i-k)
的价格。这正是公式所做的。
您的解决方案也可以完成这项工作,但它有一点点缺点 - 每个子问题的解决方案取决于两个(而不是一个)更简单的子问题的解决方案。我相信因为它平均会表现更差。当然,有一个子问题取决于几个更简单的问题是不被禁止或错误的。
答案 1 :(得分:1)
让我们假设长杆i
的最佳价格将通过将杆切割成长度为p
的{{1}}部分来获得,l1, l2, .., lp
和{ {1}}(为简单起见)。
在最佳解决方案中存在长度为i= l1+ l2 +..+ lp
的杆件意味着如果长度为l1<l2<l3<…<lp
的杆件进一步被分成更小的件,那么长度为{{{ 1}}会减少。因此,对于长度为l1
的杆件,我们可以说l1
。同样我们已经建立,l1
是最优的.................. ..Condition 1
现在考虑长度为l1
的杆的情况。声明b[l1] = p[l1]
是最佳的。让我们假设情况并非如此。存在b[l2] = p[l2], b[l3]= p[l3], ….., b[lp]= p[lp]. => b(i) = b(l1) + b(l2) +..+ b(lp)
使得l1+l2
是最佳的。这意味着存在长度为b(l1+l2) = b(l1) + b(l2)
和L
的杆,以便:
b(l1+l2) = b(L) + b(l1+l2-L)
L
。(l1+l2-L)
是最佳的b(L) + b(l1+l2-L)>b(l1)+b(l2).
是最佳的,依此类推。现在我们有一个重复b(l1) + b(l2) + b(l3) +..+ b(lp) < b(L) + b(l1+l2-L) +b(l3) +…+ b(lp)
。
b(l1+l2) = b(l1) + b(l2)
。b(l2+l3+l4) = b(l2) + b(l3) + b(l4)
b(i) = b(k) + b(i-k) for 1<=k<i
k=l1, b(i) = b(l1) + b(i-l1) = p[l1] + b(i-l1)
k=l1+l2, b(i) = b(l1+l2) + b(i-l1-l2)
= b(l1+l2) + b(l3 + l4 +…+lp)
= [b(l1) + b(l2)] + b(l3 + l4 +…+lp)
= b(l1) + [b(l2) + b(l3 + l4 +…+lp)]
= b(l1) + b(l2+l3+l4+…+lp)
= b(l1) + b(i-l1)
。总而言之,如果我们想要找到长度为= p[l1] + b(i-l1)
的杆的最佳解,我们会尝试将长度为k= l1+l2, b(i) = p[k’] + b(i-k’)
的杆分成长度为k’=l1
的两部分{ {1}}然后我们递归地找到两个杆件的最佳解,我们最终找到一个长度i
的最佳杆件和长度为i
的杆的最佳解。因此我们可以说:
(l1+l2)
答案 2 :(得分:1)
公式正确。我认为,当我们认为两个公式都可以替代另一个公式时,就会引起混淆。
尽管他们计数相同的现象,但是可以通过两种不同的方式完成:
让,B(i)=切割长度为i单位的棒的最佳价格, p(i)=长度为i单位的棒的价格。
公式1:B(i)= max(1 <= k <= floor(i / 2)){B(k)+ B(i-k)}和P(i)
公式2:B(i)= max(1 <= k <= i){p(k)+ B(i-k)})
考虑一根长度为4的杆 可以通过以下方式削减它:
1)长度为4的未切割
2)3,1
3)2、2
4)2、1、1
5)1、3
6)1、2、1
7)1、1、2
8)1,1,1,1
根据公式1:
选项1对应于P(4)
选项2,5,6,7,8对应于B(1)+ B(3)
选项3,4,6,7,8对应于B(2)+ B(2)
根据公式2:
选项1对应于P(4)
选项2对应于P(3)+ B(1)
选项3,4对应于P(2)+ B(2)
选项5,6,7,8对应于P(1)+ B(3)
因此,可以得出结论,1和2在计算最佳解决方案,但是以不同的方式,与1相比,2更紧凑,递归调用更少。