一、基础知识
1、算法时间复杂度
常对幂指阶
2、算法空间复杂度--》定义了多少空间
3、渐进符号
4、递归的时间复杂度和空间复杂度
int i = 0;
while(i <= n){
}
return n*(f(n-1));
}
递归主方法
二、线性结构
1、线性表
1、定义与特点
2、存储方式
查找操作的时间复杂度
最好、最坏、平均都是O(1)
插入、删除操作的时间复杂度:
注意:在没有说明什么时间复杂度,默认是平均。
2、栈和队列
1、栈以及其定义、基本运算和存储结构
2、队列以及其定义、基本运算和存储结构
3、栈和队列的联动
3、串
1、串的模式匹配和朴素匹配
2、手算next值
三、数组、矩阵
1、数组
1、定义和基本运算
2、数组的顺序存储
2、矩阵
1、特殊矩阵
1、对称矩阵
2、三对角矩阵
2、稀疏矩阵
三、树
1、树以及二叉树的定义
1、树的性质
2、二叉树的性质与存储结构
1、性质
2、存储结构
1、顺序存储
2、链式存储
3、二叉树的遍历
4、平衡二叉树
5、二叉排序树(二叉查找树)
6、最优二叉树(哈夫曼树)-->带权路径最短的树
最优二叉树的特点 1、只用度为0、2的结点 2、总结点数为 2n-1(n为需要构成最优二叉树的集合的元素个数)
1、如何构造最优二叉树
2、哈夫曼编码(左0右1,从根到尾)
3、哈夫曼编码的压缩比
7、线索二叉树(了解即可--干扰选项)
四、图
无论是有向图还是无向图都满足 总度数 = 2e (e为边数)
1、图的定义
1、有向图(用<>表示)
2、无向图(用()表示)
3、完全图(每个顶点与n-1个顶点都有边)
1、有向完全图
含有n个顶点的有向完全图具有 n(n-1) 条边
2、无向完全图
含有n个顶点的有向完全图具有 (n(n-1))/ 2 条边
4、连通图(针对无向图)
- 顶点之间有一条任意长度的路径即可(有路径即可,不强调点对点之间)
- 边数最多(无向完全图):(n(n-1))/ 2 条
- 边数最少(形成一个简单路径):n-1 条
5、强连通图(针对有向图)
- 顶点之间有一条任意长度的路径即可(有路径即可,不强调点对点之间)
- 边数最多(无向完全图):(n(n-1) 条
- 边数最少(形成一个闭环):n 条
注意:
- 无向完全图一定是连通图,但连通图不一定是无向完全图
- 有向完全图一定是强连通图,但强连通图不一定是有向完全图
2、图的存储
1、邻接矩阵
特点:
- 无向图的邻接矩阵是对称的,有向图不一定。
- 有向图的邻接矩阵中非零元素有e个,无向图的邻接矩阵中非零元素右2e个(e是边数)。
2、邻接表
3、网
4、图的遍历
1、广度遍历-->用邻接矩阵存储时间复杂度O(n^2),使用邻接表存储时间复杂度O(n+e)
2、深度遍历-->使用邻接矩阵存储时间复杂度O(n^2),使用邻接表存储时间复杂度O(n+e)
只要当前的节点依旧存在边并且有未访问的节点,就一直往下访问
5、拓扑排序及其算法
**简而言之,就是从无入度的结点开始淘汰,淘汰时连同对应的出度一起淘汰,直至最后一个**
五、查找
查找
- 静态查找表:顺序查找、折半(二分)查找、分块查找
- 动态查找表:二叉排序树、平衡二叉树、B_树、哈希表
1、顺序查找
2、折半查找-->需要先进排序-->最多比较次数: log(n+1) 取上整
3、哈希表-->冲突是不可避免
六、排序
1、直接插入排序-->稳定,不归位
2、冒泡排序-->稳定,归位
3、简单选择排序-->不稳定,归位
当前趟数-1:由于趟数从1开始的,而存元素的空间的下标是从0开始的。
4、希尔排序-->不稳定,不归位
5、快速排序-->不稳定,归位
6、堆排序
7、归并排序
用空间换时间