基本算法主要分为如下四类:算法
1、子结构类算法:分治法,动态规划,贪心法spa
子结构问题主要是要知道怎么从子结构问题的解推出如今问题的解,最粗糙的是简单递归,在递归的基础上进行改进就造成了分治、动态规划和贪心。排序
分治法着重于从中间开始考虑递归
动态规划着重从头尾考虑获得子结构,着重考虑从子结构推出现有结构,须要记录子结构值。动态规划本质上只是减小了在递归过程当中对子结构问题的重复求解,可是并无缩小子结构问题的求解空间,因此有一些问题使用动态规划一般时间复杂度并无减小到最小,这些问题一般须要更加巧妙的解法来实现最优的时间复杂度。索引
贪心法着重于从总体开始考虑,找出最优值后获得子结构队列
2、搜索类算法:回溯法,分支限界法, 深度优先搜索 ,广度优先搜索基础
搜索类算法最粗糙的是暴力枚举。主要须要明确是否能有序穷举解空间。扩展
回溯法创建在深度优先搜索的基础上;搜索
分支限界法创建在广度优先的基础上(分支限界维护一个优先队列,按照广度优先扩展并计算优先值,而后放入优先队列中并选出最优势做为下一个扩展点)。 Dijkstra算法最好归结为分支限界,每次从队列中选择最短路径的最小值进行扩展。遍历
3、排序类算法:
冒泡、插入、选择
快排、归并、堆、希尔
计数、基数、桶
四、查找类算法:
遍历查找、二分查找
索引查找、哈希表