再上一次学习时了解到,如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。我们在探讨背包问题,发现在三种办法求得结果中,贪心算法不是得到量最多的,反而使用动态规划。这里搜索到了两种算法的简单比较。
贪心选择当前最优的决策;动态规划则是枚举所有状态进行更新。两者都有最优子问题。贪心一般没有子问题重叠,动态规划一般有。贪心一般复杂度较低,动态规划一般较高(相互之间比较)。这两种算法都是用于解决最优化问题。
贪心
决策选择当前最优的决策
最优子问题有
子问题重叠一般没有
空间复杂度一般较低
时间复杂度一般较低
后效性有
正确性需要证明
动态规划
决策 枚举所有状态进行更新
最优子问题 有
子问题重叠 一般有
空间复杂度 一般较高
时间复杂度 一般较高
后效性 无
正确性 只要状态转移正确,则正确
在我的认知中,两种算法都是多步骤的,分阶段,在每一个步骤中寻找最优解。动态规划相比于贪心,还需要找出所有方案中的最优,而且舍弃掉每一步骤中不可能得到全局最优的局部解。相比于贪心更复杂一点,可以通过思路直接实现,贪心有时在所有贪心出来的路径中再比较得出最优的