数据结构
原创2025/1/10约 1221 字大约 5 分钟
数据结构
2024考研「数据结构」笔记&复习要点。
完整笔记见考研数据结构,本文是一个简要大纲。
概论
复杂度
- 时间复杂度 
- 常规的直接数
 - 循环嵌套最好展开算前n项和和N的量级关系
 
 
线性表
双链表
- 前驱指针|数据|后继指针
 
顺序表
- 随机存取,增删。
 
栈、队列和数组
栈
- 入栈、出栈序列可相互判断是否可能
 
数组
- 稀疏矩阵 
- 存储行数、列数和三元组
 
 
树
遍历
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根
定二求一
- 通过一个找到根,分割另一个序列
 - 依次类推从根建树
 - 得到新的遍历序列
 
哈夫曼树
- 带权路径长度为经过边数*权值
 - 加权平均长度即
带权长度和/权值和 
哈夫曼编码
- 编码按是否等长分为:
固定长度编码和可变长度编码 - 若前缀串无歧义(无须分隔符)则称为前缀编码
 - 哈夫曼编码即根结点到每个结点的路径编码(例如左0右1),是一种可变长度前缀编码
 - 哈夫曼树的WPL为二进制编码长度,构造出的哈夫曼树可能不同,但WPL一定相同。
 
图
存储
- 邻接矩阵 
- 一维数组存储顶点信息,二位数组存储边的信息(带权图可以用0或代表不可达)
 - 空间复杂度
 - 第行和代表第个顶点出度,第列和代表第个顶点入度
 
 
分类
- 无向图 
- 一定不连通
 
 
搜索
- BFS 
- 若边权均为1,可得到到其他顶点的最短路径
 
 
最小生成树
- 最小边权和的连通子图
 
AOE网
- 性质 
- 顶点表示时间,边表示活动,权值表示活动开销
 - 只有顶点开始之后,该顶点出边的活动才能开始
 - 只有顶点入边全部结束后,该顶点事件才能开始
 - AOE中仅有一个入度为0的点(源点),仅有一个出度为0的点(汇点)
 
 - 计算 
- 最早开始时间
 - 最迟开始时间
 - 活动时间余量
 
 
查找
折半查找
- 平均成功长度为
 - 最坏比较次数
 
散列表
散列函数
- 直接定址法 
H(key) = key或H(key)=a*key + b- 计算简单不会冲突,适合关键字连续,否则会浪费空间。
 
 - 除留余数法 
H(key) = key%pp为素数使关键字能够均匀分布
 - 数字分析法 
- 设r进制关键字,选取分布较均匀的若干位作为散列地址
 - 需要已知关键字集合,更换关键字后需重新构造散列函数
 
 - 平方取中法 
- 取平方值中间几位
 - 适合关键字每位都不均匀或小于散列地址位数时
 
 
冲突处理
- 开放定址法
- 线性探测法 
- 可能元素堆积,降低查找效率
 
 - 平方探测法(二次探测法) 
- 要求且为素数
 - 不能探测所有单元,但能至少探测一半
 
 - 双散列法 
- 利用另一个散列函数计算增量序列
 
 - 伪随机序列法 
- 等于伪随机序列
 
 
 - 线性探测法 
 - 拉链法 
- 冲突的关键字存储到线性表
 
 - 开放定址不会删除元素,因为查找需要依赖冲突二次定位,所以求ASL时删除的算作正常元素求
 - 影响ASL的因素 
- 装填因子
 - 散列函数
 - 冲突解决策略
 
 
排序
分类
- 稳定:插入、冒泡、归并和基数排序
 - 不稳定:简单选择、快速、希尔和堆排序
 
插入排序
- 直接插入排序(稳定) 
- 从列表开始维护一个有序子序列直至完全有序
 - 复杂度 
- 空间复杂度
 - 时间复杂度:平均
 - 最好:已经有序,元素较少,此时
 
 
 
交换排序
- 快速排序(不稳定) 
- 每次划分以为枢轴,小的放左边,大的放右边
 - 不会产生有序子序列,但每次划分能将放在正确的位置
 - 空间复杂度 
- 需要递归调用,栈空间,最坏栈空间
 
 - 时间复杂度 
- 平均
 - 最好:随机数据
 - 最坏:基本有序或基本逆序时间,空间
 
 
 
