王道课整理自用
1、时间复杂度和空间复杂度
时间复杂度
关注递归调用的次数
eg:
1、嵌套循环
2、单层循环
可以忽略幂次较小的项简化计算
3、简单递归
分析递归次数和问题规模n的关系,找到了递归的次数就可以确定时间复杂度
空间复杂度
关注递归调用的深度
考法:结合算法题,分析自己设计的算法
注意影响辅助空间大小的两个方面:
1、算法运行过程中各种变量所占空间(如:辅助数组)
2、递归工作栈带来的空间复杂度(通常和递归深度同等数量级)
eg:
可以选不复杂的暴力法
2、线性表的顺序表示
顺序表的基本操作
3、线性表的链式表示
考法:
1、代码定义链表结点
2、单链表的遍历
3、删除或插入某结点
4、逆置单链表(头插法)
头插法
头插防断链
尾插法
单链表基本操作
例题:
逆置
4、栈和队列基本性质
栈:LIFO
队列:FIFO
考法:输出序列合法性可能性
5、栈和队列的存储结构
难点:循环队列的初始状态、入队/出队、判空/判满
6、双端队列
输入受限,代入选项即可
8、特殊矩阵的压缩存储
对称矩阵的压缩存储
三角矩阵的压缩存储
三对角矩阵的压缩存储
稀疏矩阵
三元组或十字链表
9、多维数组存储
普通矩阵(多维数组)的存储
10、串的模式匹配
朴素匹配
KMP算法
11、树的性质
1、除根结点外,每个结点都有一条边指向,一条边对应一个度,因此结点总数总度数加1
2、度为m的树中有多少个结点、多少个叶子结点、分支节点第h层最多有多少个结点等问题
c
12、二叉树定义和性质
如果二叉树有n个结点,判断是否是分支结点:i<=n/2向下取整,则该结点为分支结点eg:13/2向下取整为6,则小于等于6的结点均为分支结点
二叉树结点的度:
完全二叉树最多只有一个度为1的结点,结点总数n为偶数,则有一个度为1的结点,反之若n为偶数,则没有度为1的结点
有n个结点的二叉树,h=log2n(向下取整)+1或log2(n+1)(向上取整)
二叉树的顺序存储
13、二叉树遍历
先中后序遍历
层序遍历
14、森林二叉树的转换
孩子关系挂到左边,兄弟关系挂到右边
重点题
15、线索二叉树
16、哈夫曼编码(重点)
哈夫曼树的构造:
例题:多叉哈夫曼树构造
哈夫曼树的性质:
考察性质2,2*n2+1=115
哈夫曼编码:
17、并查集(408新考点)
画图题:
18、图的基本概念
19、图的存储和基本操作
领接矩阵存储法
领接表存储
常见出题点:使用不同的存储结构对某算法时间复杂度的影响
B
C
矩阵不对称对应有向图,统计入度和出度之和
20、图的遍历(重点)
BFS
DFS
21、最小生成树(Prim,克鲁斯卡尔)
Prim:每次挑选一个顶点加入生成树并保证加入的代价最小,即点->边->点...
克鲁斯卡尔Kruskal:每次挑选一个边加入生成树并保证加入的代价最小
最小生成树的性质
22、最短路径(迪杰斯特拉,弗洛伊德)
Dijkstra
Floyd
适用范围
23、拓扑排序
每次删除入度为0的结点
24、关键路径
eg:番茄炒蛋
25、有向无环图
30、顺序查找、折半查找
顺序查找
优化方法
折半查找
代码(五星重要)
判定树
画出判定树,A选项中180应该在200的右子树,但200的右子树应该都是大于200的值,故A错误
27、二叉排序树
二叉排序树的插入
二叉排序树的删除
28、平衡二叉树
平衡二叉树的插入和旋转
30、B树和B+树(自命题不考)
n表示有分支结点中有多少分支
B树和B+树的区别
3阶-2叉-1个关键字-二叉树
A
D
B树的查找
B树的插入
B树的删除
D