1.贪心算法
贪心算法分为几个阶段,在每一个阶段,可以认为所做的决定是最好的,而不考虑将来的后果。一般来说,这意味着是某个局部最优,这种“眼下能够拿到的就拿”的策略就是这类算法名称的来源。当算法终止时,我们希望局部最优就是全局最优,如果真是这样的话,那么算法就是正确的了;否则,算法得到的就是一个次最优解。如果不要求绝对的最佳答案,那么有时用简单的贪心算法就可以生成近似答案,而不是用一般来说生成准确答案的复杂算法。
2.分治算法
分而治之方法与软件设计的模块化方法非常相似。为了解决一个大的问题,可以:
1) 把它分成两个或多个更小的问题;
2) 分别解决每个小问题;
3) 把各小问题的解答组合起来,即可得到原问题的解答。
小问题通常与原问题相似,可以递归地使用分而治之策略来解决。
分而治之方法很自然地导致了递归算法的使用。在许多例子里,这些递归算法在递归程序中得到了很好的运用。实际上,在许多情况下,所有为了得到一个非递归程序的企图都会导致采用一个模拟递归栈。不过在有些情况下,不使用这样的递归栈而采用一个非递归程序来完成分而治之算法也是可能的,并且在这种方式下,程序得到结果的速度会比递归方式更快。解决金块问题的分而治之算法(例 1 4 - 2)和归并排序方法(1 4 . 3节)就可以不利用递归而通过一个非递归程序来更快地完成。
3.动态规划
问题的最优解如果可以由子问题的最优解推导得到,则可以先求解子问题的最优解,在构造原问题的最优解;若子问题有较多的重复出现,则可以自底向上从最终子问题向原问题逐步求解.
动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。
动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解
经典算法概览
本文介绍了三种常见的算法:贪心算法,其策略是在每个阶段选择局部最优;分治算法,通过递归解决小问题并组合答案;动态规划,通过解决子问题的最优解来构建原问题的最优解。
6488

被折叠的 条评论
为什么被折叠?



