背包问题是一个组合优化问题,必须在不超过其容量的情况下最大化背包中对象的利益。我们知道,有很多方法可以解决此问题,包括遗传算法,动态编程和贪婪方法。我想知道与动态编程相比,使用遗传算法的优点和缺点是什么?空间复杂度,时间复杂度和最优性?
答案 0 :(得分:2)
因此,要回答这个问题,重要的是要考虑您认为最重要的内容:速度或准确性
遗传算法do not guarantee finding the most optimal solution,但是它们通常运行很快。
对遗传算法的一些快速描述可能会产生:
O( O(Fitness) * (O(mutation) + O(crossover)))
但是,动态编程 不能保证 找到运行时间更长的最佳解决方案。对动态编程的一些快速描述可能会产生:
O(numItems * knapsackCapacity)
,而存储器复杂度则类似O(knapsackCapacity)
(为此而获得this post的积分)如果您要问什么是首选,那是特定于学科的。如果您想快速做出足够好的猜测,那么GA可能是您的最佳选择。但是,如果您需要一个有保证且可验证的解决方案,那么DP是可行的方法。
这应该满足基本的比较。