常见算法思想

贪婪算法(greedy algorithm)

1、贪婪算法分阶段地工作,每一个阶段,都可以认为所做的决定是最好的,而不考虑将来的后果,这意味着当算法停止时,局部最优等于全局最优,只有在这样的情况下,算法得到一个最优解,否则得到的是一个次最优解(suboptional solution);

2、典型应用:Dijkstra,Prim,Kruskal ,Huffman编码算法

分治算法(divide and conquer)

1、分治算法一般由2部分组成:

2、典型应用:一些线性时间的树遍历方法,归并排序,快速排序等;

动态规划(dynamic programming)

1、动态规划与分治算法类似,都是将问题分解求解后再从这些子问题的解获取原问题的解,不同之处在于适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的,此时会使用类似表的结构来在需求时再计算问题的解,以节省时间;

2、动态规划一般可分为线性动规,区域动规,树形动规,背包动规四类。

线性动规:拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等;

区域动规:石子合并, 加分二叉树,统计单词个数,炮兵布阵等;

树形动规:贪吃的九头龙,二分查找树,聚会的欢乐,数字三角形等;