【问题标题】:Is independence of subproblems in dynamic programming an issue?动态规划中子问题的独立性是一个问题吗?
【发布时间】:2021-02-03 12:37:23
【问题描述】:

在阅读 CLRS 第 15.3 节“我应该何时使用动态编程”时。并在解释最优子结构时给出了2个例子,它们是未加权的最长简单路径和未加权的最短路径。

他们说,

寻找最长简单路径的子问题不是独立的,而对于最短路径它们

这就是为什么我们不能使用动态规划解决未加权最长简单路径的原因,我对此没有任何问题,但他们也说

第 15.1 节和第 15.2 节中研究的两个问题都有独立的子问题......在棒材切割中,为了确定切割长度为 n 的棒材的最佳方式,我们研究切割长度为I 对于 I = 0, 1,..., n-1。因为长度 -n 问题的最佳解决方案只包括这些子问题解决方案中的一个(在我们切断了第一个部分之后),所以子问题的独立性不是问题。

最后一句话

子问题的独立性不是问题。

子问题的独立性是否存在问题?如果不是问题那么为什么他们说第一句话或者我只是我误解了一些东西。

【问题讨论】:

    标签: algorithm dynamic-programming


    【解决方案1】:

    问题是您不能简单地将两个相关子问题的答案合并。

    如果问题是独立的,那很好。如果你只看一个子问题,同样没问题。但是,如果您需要组合 2 个答案并且它们相互依赖,则必须保持一些额外的状态。

    在最长的简单路径的情况下,“一些额外的状态”可能会成倍地影响您。 :-)

    【讨论】:

    • 你说如果我需要合并 2 个答案并且它们是依赖的,我必须保持一些额外的状态,但这并不意味着我不能通过 DP 解决它们或者它会有如果我在运行时使用 DP 没有影响。我想说的是,如果子问题是依赖的,那么使用 DP 解决它是浪费时间,或者它可以给我更好的运行时间。
    • @ModyElSayed 这取决于依赖的性质。如果附加状态没有爆炸,那么你可以。
    猜你喜欢
    • 2012-08-30
    • 2011-10-06
    • 2011-10-17
    • 2019-03-16
    • 2012-04-09
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多