第二部分:常用算法类型
图片
递归算法:子问题的解决依赖于递归算法,典型例子阶乘函数、斐波那契数列。需设置终止条件,否则会出现栈溢出。
贪心算法:在当前选项中做最佳选择,典型例子硬币找零、最小生成树。...动态规划:通过拆分为子问题并保存子问题解避免重复计算,典型例子背包问题、最长公共子序列。需定义状态转移方程并初始化 base case。...通过局部最优取得全局最优,不一定最优,需证明贪心策略正确。
硬币找零:每次取面值最大的硬币,直到零钱数为0。
Prim算法:每次选取与当前树相连的权值最小的边,直到所有点被选取。...快速排序:从数组中选取一个pivot,小于pivot放左区间,大于pivot放右区间,递归左区间和右区间。
动态规划:通过拆分为子问题并保存子问题解避免重复计算,典型例子背包问题、最长公共子序列。...KMP算法:通过生成前缀函数 skipi表示模式串中i之前的字符串中最长的相同前后缀长度, 降低回溯次数。
排序:给元素序列按一定顺序进行排列。