<Introduction to algorithms>笔记
Part4 高级设计和分析技术
part1-3中学习的普遍应用的算法思想和技术如下:
- 分治法 divide and conquer
- 随机化 randomize
- 递归求解 recursion
在面对一个计算问题时, 一般的直接解法是暴力破解,即穷举法.从一定意义上讲,所有的最优化问题都可以通过穷举法来解决,但是这在时间上是不可接受的.要更高效的求解问题, 需要学习对高效算法的设计分析技术
所有的高效算法都是为了加快速度:
- 动态规划:保存子问题的解,以备重复使用
- 贪心算法:用局部最优解来求全局最优解
- 平摊分析是用来分析算法的工具,它本身并不是一种算法.
动态规划 dynamic programming
- 动态规划通常应用于最优化问题,即要做出一组选择以达到一个最优解时.在做选择的同时,经常出现同样形式的子问题.关键技术是存储这些子问题每一个的解,以备它重复出现.
贪心算法 greedy algorithm
- 贪心算法通常也是应用于最优化问题,该算法的思想是以局部最优的方式来做每一个选择.采用贪心算法可以比动态规划更快地得出一个最优解,但是关键是不容易判断贪心算法所得到的是否真的是最优解.
平摊分析 amortized analysis
- 平摊分析是一种用来分析执行一系列类似操作的算法的工具.在一个操作序列中,不可能每一个都以其已知的最坏情况运行,某些操作的代价高些,而其它的低一些.平摊分析不分别计算每一次操作的代价确定一系列代价的界,而是对整个操作序列的真实代价限界.