【问题标题】:Understanding the bottom-up rod cut implementation了解自下而上的切杆实现
【发布时间】:2011-07-27 07:26:37
【问题描述】:

Introduction to Algorithms(CLRS),Cormen 等人。讨论解决切杆问题如下(第369页)

EXTENDED-BOTTOM-UP-CUT-ROD(p, n)
    let r[0...n] and s[0....n] be new arrays
    r[0] = 0

    for j = 1 to n:
        q = -infinity   

        for i = 1 to j:
            if q < p[i] + r[j - i]:  // (6)
                q = p[i] + r[j - i]
                s[j] = i
        r[j] = q

    return r and s

这里p[i] 是切割长度为 i 的杆的价格,r[i] 是切割长度为 i 的杆的收入,s[i] 为我们提供了第一块切割的最佳尺寸。

我的问题是关于将j1 迭代到n 的外循环以及从1n 的内循环i

在第 6 行,我们将 q(迄今为止获得的最大收入)与 r[j - i](上一次削减期间获得的最大收入)进行比较。

j = 1 and i = 1 时,它似乎很好,但是j = 1 and i = 2 的内部循环的下一次迭代不会r[j - i] be r[1 - 2] = r[-1]

我不确定负索引在这里是否有意义。这是 CLRS 中的错字还是我在这里遗漏了什么?

我想你们中的一些人不知道切割杆的问题是什么,这里是example

【问题讨论】:

    标签: algorithm language-agnostic dynamic-programming


    【解决方案1】:

    这是关键:for i = 1 to j

    i 将从 1 开始,并增加值达到但不超过j 的值。

    i 永远不会大于j,因此j-i 永远不会小于零。

    【讨论】:

    • 代码实验室 - 是的!一个愚蠢的疏忽。感谢您指出这一点。
    • 没问题,我们有时都会忽略一些事情:)
    【解决方案2】:

    由于内部循环,变量 i 不会大于变量 j,因此索引 r 永远不会小于零。

    【讨论】:

      【解决方案3】:

      您缺少内部 for 循环中的条件。其中,i 的值仅上升到 j。所以如果超过j,循环就会终止。因此,您提到的负指数毫无疑问。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 2010-09-15
        • 2021-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-13
        相关资源
        最近更新 更多