贪心算法被定义为一种解决优化问题的方法,无论最终结果如何,它都会做出能带来最明显和最直接利益的决策。它是一种用于优化问题的简单、直观的算法。
分而治之是一种算法范式,其中使用分、征服和组合策略解决问题。典型的分而治之算法使用以下三个步骤解决问题:
- 划分:这涉及将问题划分为更小的子问题。
- 征服:通过递归调用解决子问题,直到解决。
- 组合:将子问题组合起来得到整个问题的最终解。
动态规划算法主要是对普通递归的优化。每当我们看到有时会重复调用相同输入状态的递归解决方案时,都可以使用动态规划对其进行优化。目的是简单地存储子问题的结果,这样就不必在以后需要时重新计算它们。这种简单的优化将时间复杂度从指数级降低到多项式级。
贪心算法、分而治之算法、动态规划算法的区别
1.贪心算法遵循自上而下的方法;分而治之算法遵循自上而下的方法;动态规划算法遵循自下而上的方法。
2.贪心算法用于解决优化问题;分而治之算法用于解决决策问题;动态规划算法用于解决优化问题。
3.贪心算法无需重新访问先前生成的解决方案即可生成最佳解决方案,因此避免了重新计算;分而治之算法子问题的解不止一次被递归计算;动态规划算法子问题的解被计算一次并存储在一个表中供以后使用。
4.贪心算法可能会生成最佳解决方案;分而治之算法用于获得给定问题的解决方案,而不是针对最优解;动态规划算法总是产生最优解。
5.贪心算法本质上是迭代的;分而治之算法本质上是递归的;动态规划算法本质上是递归的。
6.从效率上看,动态规划算法>贪心算法>分而治之算法。贪心算法比分而治之算法高效和快速;分而治之算法效率较低且速度较慢;动态规划算法比贪婪算法更有效和更快;
7.贪心算法不需要额外的内存;分而治之算法需要一些内存;动态规划算法需要更多内存来存储子问题供以后使用。