大O表示法及时间空间复杂度
空间复杂度是看新开了多少空间,假如它本身有一个数组,但是我在这个过程中只新开了一个变量,那么空间复杂度是O(1)
渐近符号
O表示要大于等于它本身的复杂度,Ω表示要小于等于它本身的复杂度,第三个表示只能等于它本身的复杂度
递归式时间空间复杂度
解释一下这里为什么空间复杂度是O(n),因为这里的定义变量在递归里,循环了n次
这里左上角的是那个什么公式,感觉有点难记,而且都好久没考了,我赌它不考
线性结构和线性关系
线性表的顺序存储
顺序表插入时间复杂度:
顺序表删除时间复杂度:
顺序表查找时间复杂度:
线性表的链式存储
单链表插入时间复杂度:
单链表删除时间复杂度:
单链表查找时间复杂度:
循环单链表
双链表
栈
队列
两个栈可以模拟队列,两个队列不能模拟栈
串
可以采用特例法算答案,也可以找规律 (首项+末项)*长度/2
串的模式匹配与朴素模式匹配
手算next数组值及KMP
感觉应该不会考这个,可以了解一下
很好理解很好算,上手做几个就知道了
数组
如果实在不会的话也可以找特例代进去试试看
对称矩阵
三对角矩阵
只有主对角线及其两边有数据,其余都是0
三对角矩阵的存放方式如下图:(其实就是按行横着下去的)
稀疏矩阵
三元组顺序表和十字链表是对稀疏矩阵进行压缩存储的方式
可以背公式也可以直接找特例代进去算答案
对于下面这个题,注意这个坑 i<=j
背一下下面这个知识点
树
树的性质1:树中的节点总数=树中所有节点的度数之和+1
树的性质2: 度为m的树中第i层上最多有m^(i-1)个节点(i>=1)
树的性质3:高度为h的m次树最多有(m^h-1)/m-1个节点
树的性质4:具有n个节点、度为m的树的最小高度为
可以根据性质算,也可以根据所给条件画一个树出来
特例法yyds
二叉树
满二叉树即每层都是满的
完全二叉树是从上到下,从左到右依次放
如下图中的c激素因为3的左孩子为空,故不是完全二叉树
下面采用的是卡特兰数计算方法计算出来的结果
我通过画图也可以画出来所有结果
二叉树的存储结构
关于下面这题第二问怎么来的呢,其实很好做,因为1没有父节点,空指针1个;2没有左右孩子,空指针2个;3没有左孩子,空指针1个;14没有左右孩子,空指针2个;15没有左右孩子,空指针2个,加起来一共8个空指针
下面这个也很好做,其实就是算缺多少个左右孩子
二叉树的遍历
先序遍历:根左右
中序遍历:左根右
后序遍历:左右根
层次遍历:从上到下,从左到右依次遍历
平衡二叉树
平衡二叉树:二叉树中任意一个节点的左右子树高度之差的绝对值不超过1
完全二叉树也是平衡二叉树
二叉排序树
二叉排序树(二叉查找树,也叫二叉检索树):根节点的关键字大于左子树所有节点的关键字,小于右子树所有节点的关键字,且左右子树也是二叉排序树(中序遍历得到的序列是有序序列)
二叉排序树例图:
关于二叉排序树的构建,就是比当前关键字大的就放右边,小就放左边,依次比就行
最优二叉树
最优二叉树(哈夫曼树):带权路径长度最短的树
哈夫曼树的构造:每次取两个权值最小的节点
哈夫曼编码:左0右1
哈夫曼压缩比:
第一步:求等长编码:2的多少次方>=字符数,求出x,如何拿x乘以频率和即为等长编码
第二步:求哈夫曼编码,构造出哈夫曼树,然后求哈夫曼编码即可
第三步:算压缩比:压缩比=(等长编码-哈夫曼编码)/等长编码
对于下面这个题,特例法:n取1就得到答案了
对于下面这个题:
等长编码=300
哈夫曼编码=136
算出压缩比=21%
线索二叉树
了解即可,一般是作为干扰选项出现
对于下面这个题:
图
完全图:每个顶点都与其他所有顶点相连
n个顶点的无向完全图共有n(n-1)/2个边
n个顶点的有向完全图共有n(n-1)个边
对图来说,顶点的度=入度+出度;总度数=2*边数
连通图:在无向图中,如果任意两个顶点都是连通的(可以是间接连通,比如说a、e联通可以说a到c再到e),则称为连通图。假如n个顶点,最少有n-1条边,最多有n(n-1)/2条边
强连通图:在有向图中,如果任意两个顶点之间都有来回路径,则为强连通图。假如n个顶点,最少有n条边,最多有n(n-1)条边
邻接矩阵和邻接表
稠密图和稀疏图
稠密图边多,用邻接矩阵
稀疏图边少,用邻接表
网
了解一下就行,只出过一次
图的遍历
深度优先搜索和广度优先搜索的时间复杂度相同:
邻接矩阵存储时,时间复杂度为O(n^2)
邻接表存储时,时间复杂度为O(n+e)
拓扑排序
有向无环图