递归与迭代以获得更高的性能

时间:2014-06-02 16:41:07

标签: performance recursion iteration knapsack-problem

在性能方面哪种方法更适合背包问题:迭代还是递归?

限于1 sec我需要弄清楚背包里应该装满40件物品中的哪一件才能获得最有价值的物品,这是一个典型的背包问题。

我知道如果我蛮力确定要选择哪些项目,我需要解决2^41 - 1个子问题,所以使用这个解决方案是非常麻烦的,但是它是一种减少不需要的分支的方法并使其与迭代形式一样高效?

另一方面,如果权重非常大,矩阵将是巨大的,并且与递归方法一样效率低。

2 个答案:

答案 0 :(得分:0)

遇到这种问题,询问“迭代或递归”并不能让你随处可见。你需要做的是编写代码,衡量它在做什么,开始理解什么需要时间和原因,随着你对问题的理解的增长,你会找到更有效的方法来解决问题。

问题是NP完全,这意味着至少存在无法快速解决的病理情况。但在实践中,很多问题都可以迅速解决。您想要选择具有高价值/重量比的物品,并选择能够很好地填充背包的物品。而且你不想尝试所有可能性,你想找到一个好的解决方案,并借助这个好的解决方案能够快速拒绝大量的可能性。

答案 1 :(得分:0)

如果它是典型的背包问题,那么就不可能使用动态编程以迭代的方式使用先前的结果,因为它们存储在矩阵中并使用递归公式来评估新的价值观?