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