【发布时间】:2020-10-19 02:38:18
【问题描述】:
是否存在自下而上解决方案比自上而下(记忆化)解决方案具有更好时间复杂度的动态规划问题?
【问题讨论】:
标签: algorithm time-complexity dynamic-programming memoization
是否存在自下而上解决方案比自上而下(记忆化)解决方案具有更好时间复杂度的动态规划问题?
【问题讨论】:
标签: algorithm time-complexity dynamic-programming memoization
你也许可以编一个,但一般不会。
当两种解决方案都可用时,最坏情况的时间复杂度相同。
在最坏的情况下,自下而上的解决方案通常更快,绝对值(不是渐近复杂度),因为记忆是一项相对昂贵的操作。
自上而下的解决方案在最佳或特殊情况下通常更快,因为它们只评估每个问题实例所需的子问题。
【讨论】:
DP 和 Memoization 都渐近地给出相同的时间复杂度。然而,在运行时,DP 解决方案以某个恒定因素超过了记忆技术。
这是因为在 DP 的情况下,我们只需要查看表中的子问题的结果,而在 Memoization 的情况下,我们需要调用递归,然后它是否通过直接检查哈希表/数组来返回结果(无论您使用什么)如果它已经计算或通过计算它,这反过来又会消耗更多的 CPU 周期。
在某些情况下,我们的子问题空间可能非常大,但我们并不需要所有子问题都得到我们的答案,Memoization 可能是有利可图的,因为它只解决了不可避免的问题而不是全部。但是,这种情况很少发生,因为很多时候我们只优化我们的 DP 代码,它不会对所有子问题进行迭代,而是仅对所需的子问题进行迭代。
因此,一般来说,自下而上的方法,即 DP 解决方案总是比其相应的记忆解决方案运行得更快。
注意:我使用的词 runs faster em> 而不是 时间复杂度,因为时间复杂度是渐近的,两者相同。
【讨论】: