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