贪婪算法(greedy algorithm)
1、贪婪算法分阶段地工作,每一个阶段,都可以认为所做的决定是最好的,而不考虑将来的后果,这意味着当算法停止时,局部最优等于全局最优,只有在这样的情况下,算法得到一个最优解,否则得到的是一个次最优解(suboptional solution);
2、典型应用:Dijkstra,Prim,Kruskal ,Huffman编码算法
分治算法(divide and conquer)
1、分治算法一般由2部分组成:
2、典型应用:一些线性时间的树遍历方法,归并排序,快速排序等;
动态规划(dynamic programming)
1、动态规划与分治算法类似,都是将问题分解求解后再从这些子问题的解获取原问题的解,不同之处在于适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的,此时会使用类似表的结构来在需求时再计算问题的解,以节省时间;
2、动态规划一般可分为线性动规,区域动规,树形动规,背包动规四类。
线性动规:拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等;
区域动规:石子合并, 加分二叉树,统计单词个数,炮兵布阵等;
树形动规:贪吃的九头龙,二分查找树,聚会的欢乐,数字三角形等;