六.图论
1. 基本概念
无向完全图、有向完全图、(强/非/非强)连通图
极小连通子图:任意删除一条边,不再连通
生成树:包含无向图所有顶点的极小连通子图
2.遍历
dfs:一次走到顶->回退->走到顶->回退->...没有未走过的点
bfs:一次遍历一层->遍历下一层->...->遍历完所有层
数据结构用struct{}定义
3.邻接矩阵、邻接表
邻接矩阵的空间复杂度更高,实现较容易
4.最小生成树
算法:Prim算法、Kruskal算法
①Prim算法
核心思想:以点为基本单位,初始将某个节点加入可到达集合中,每次选出当前点的最小边并将边的另一顶点作为当前节点(边的另一个顶点不在可到达集合中),直到所有顶点都加入到可到达集合中,即算法完毕。
②Kruskal算法
核心思想:以边为基本单位,每次在所有边中寻找未连通的点构成的边且权值最小的,最终所有点连通表示算法完毕。
5.拓扑排序
排序要求:先决条件必须在前面。(先修课需要在前面)
关键路径AOE:源点到收点的最大路径。
七.查找(数组)
1.顺序查找
2.折半查找(二分)
要求:有序
3.分块查找
要求:块间有序
4.哈希表
核心:以空间换时间
关键点:映射函数、冲突的发生和解决
5.排序树
(1)二叉排序树
所有节点值大小满足:左节点<根<右节点
中序遍历可实现递增输出
(2)平衡二叉树
左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
八.排序
(若数组长度为n)
1.直接插入排序
2.折半插入排序(二分)
要求:有序
3.冒泡排序
核心:每次从左至右遍历,若发现二者大小与顺序不符,调换,直至一轮中不再变化(使用flag记录)(或不使用变量记录,n-1轮可确保排序完成)
4.堆排序
(共n个节点)
实质:模拟具有特殊性质的完全二叉树
核心过程:建初堆->得到堆顶->调整堆->得到堆顶->...(n-1次)
分为:大根堆(堆顶最大值)、小根堆(堆顶最小值)
调整堆:从n/2的下界(最后一个具有子节点的结点)开始,从右至左,从下至上,若某节点值不符合节点值>左右节点值(大根堆) or 节点值<左右节点值(小根堆),则调换顺序(根和子节点中较大/小的结点调换)
得到堆顶:堆顶值为min or max,将其放到末尾。
5.归并排序(分治)
划分->排序->归并->排序