【问题标题】:Is Bottom-up DP solution better than Top-down in terms of Time complexity?就时间复杂度而言,自下而上的 DP 解决方案是否优于自上而下?
【发布时间】:2020-10-19 02:38:18
【问题描述】:

是否存在自下而上解决方案比自上而下(记忆化)解决方案具有更好时间复杂度的动态规划问题?

【问题讨论】:

    标签: algorithm time-complexity dynamic-programming memoization


    【解决方案1】:

    你也许可以编一个,但一般不会。

    当两种解决方案都可用时,最坏情况的时间复杂度相同。

    在最坏的情况下,自下而上的解决方案通常更快,绝对值(不是渐近复杂度),因为记忆是一项相对昂贵的操作。

    自上而下的解决方案在最佳或特殊情况下通常更快,因为它们只评估每个问题实例所需的子问题。

    【讨论】:

      【解决方案2】:

      DP 和 Memoization 都渐近地给出相同的时间复杂度。然而,在运行时,DP 解决方案以某个恒定因素超过了记忆技术。
      这是因为在 DP 的情况下,我们只需要查看表中的子问题的结果,而在 Memoization 的情况下,我们需要调用递归,然后它是否通过直接检查哈希表/数组来返回结果(无论您使用什么)如果它已经计算或通过计算它,这反过来又会消耗更多的 CPU 周期。

      在某些情况下,我们的子问题空间可能非常大,但我们并不需要所有子问题都得到我们的答案,Memoization 可能是有利可图的,因为它只解决了不可避免的问题而不是全部。但是,这种情况很少发生,因为很多时候我们只优化我们的 DP 代码,它不会对所有子问题进行迭代,而是仅对所需的子问题进行迭代。

      因此,一般来说,自下而上的方法,即 DP 解决方案总是比其相应的记忆解决方案运行得更快。

      注意:我使用的词 runs faster em> 而不是 时间复杂度,因为时间复杂度是渐近的,两者相同。

      【讨论】:

        猜你喜欢
        • 2015-02-20
        • 2018-04-09
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        • 2016-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多