1.贪心算法
只考虑当前最优解,即每次求解局部最优解。可以用深度优先搜索来类比贪心算法的过程,只是深搜,所以可能得到的不是全局最优解。而要想得到全局优,求解的问题必须具有无后效性,也就是说,以后的过程不会影响之前的状态,用局部最优解来合成全局最优。该类算法的复杂度与子问题的个数,即树深,有关。
比如,两个最小生成树算法:prim、kruskal,Dijkstra(最短路径算法)
2.动态规划
将原问题转化成结构相同的子问题,通过子问题的求解得到原问题的解。通常使用二维数组来存储自问题的解,以供之后求解所用,避免了递归求解过程中对子问题的重复求解的缺点。可以用已知优化子结构的树,从叶子节点向上搜索并根据当前结点不断做出选择的过程来理解,所以其复杂度与子问题的个数和选择的个数有关。
比如,最长公共子序列,插入最少字符形成回文串,Triangle(leetcode)
3.回溯算法
可以看成从上到下先深度优先搜索树,当不满足决策条件的时回退至最近开叉的地方,继续深搜,所以是深搜和广搜的结合,可求得最优解。比如,N-皇后问题。