第六章
6.4.1最小生成树
1.定义
2.最小生成树算法
(1)prim(普里姆)算法:先选顶点
(2)Kruskal(克鲁斯卡尔)算法:先选边
(3)算法的实现思想
3.时间复杂度
6.4.2最短路径问题
1.两种问题
(1)单源最短路径?
--BFS算法(无权图)
--Dijkstra算法(带权图、无权图)
(2)每对顶点之间的最短路径?
--Floyd算法(带权图、无权图)
2.算法
(1)BFS算法
(2)Dijkstra算法(不适用带负权值的图)
初始化:
计算机实现和时间复杂度:
(3)Floyd算法(不能解决带有负权的回路)
#初始:A(-1)表示不允许有中转点的最短路径矩阵
#0:允许在v0中转后,v2到v1的最短路径是5+6=11,中转点是0
1)遍历上一阶段即初始化阶段留下来的矩阵A(-1),检查其中每个元素(即两点最短路径长度);
2)若找到一个点满足,说明经过v0中转后,i、j两点间的最短路径变小
#1:允许v0、v1为中转点
过程可由#0类推。
#2:允许v0、v1、v2为中转点
过程类推。
核心代码:
复杂度分析
1)时间复杂度:有3层循环,n是节点数。
2)空间复杂度:需要两个辅助矩阵A和Path,大小都是n行n列。
增加节点的实例:不想看 P67 12:50
(4)重点总结
6.4.5有向无环图描述表达式
1.定义
2.描述表达式
不考研先不看 P68 03:20
6.4.6拓扑排序
1.概念补充
(1)AOV网:![](https://img-blog.csdnimg.cn/direct/b76547e3b4724098a5c0f5b30f7daa04.png)
2.拓扑排序
(1)代码实现:
省略对两个数组indegree[]、print[]的声明,对栈S的定义(也可用队列或数组):
(2)时间复杂度:
(3)DFS算法实现
还没讲到。
3.逆拓扑排序
(1)代码实现:
自己尝试
(2)时间复杂度:
自己思考
补充:逆邻接表(可回顾懒猫老师的十字链表讲解)
(3)DFS算法实现:
思考:如何判断回路
4.小结
6.4.7关键路径
暂时不看
第七章
7.1查找的基本概念
1.基础概念
2.对查找表的常见操作
3.查找算法的评价指标
太水不小结
7.2.1顺序查找
1.概念
也叫“线性查找”,通常用于线性表。线性表分为顺序存储和链式存储。去看P19
2.代码实现
(1)顺序存储:
(2)顺序存储(“哨兵”):
3.查找效率分析
4.优化顺序查找
(对于有序表)
查找判定树:
(被查的概率不相等)
5.小结
7.2.2折半查找(二分查找)只适用于有序的顺序表
查找成功
查找失败
1.代码实现:
查找表升序排列
2.查找效率分析:
ASL成功
ASL失败
时间复杂度
3.折半查找判定树的构造
mid那个式子表示向下取整
练习/模板:
特性:
4.小结
7.2.3分块查找(不咋考代码)
1.算法思想
2.效率分析:
特殊情况(顺序查找)
特殊情况(折半查找)
小结
7.3红黑树(复杂)
1.特性
是二叉排序树的优化
2.补充概念:黑高
性质
性质2解释补充:
4.基本操作
(1)查找![](https://img-blog.csdnimg.cn/direct/8fdd7f489b1a4085b66ea6fdada84321.png)
(2)插入
实例:建议去看他讲的平衡二叉树更好理解 回看印度哥的视频
(3)删除 难!!
5.小结
7.4.1 B树
先空着
7.5.1散列查找
1.定义
2.冲突处理
(1)拉链法
新元素放在链头也可
(2)开放定址法
①线性探测法(常考):
查找操作:
删除操作:
逻辑删除
②平方探测法(常考):
非重点小坑
③伪随机序列法:
(3)再散列法
3.平均查找长度
(1)拉链法
成功
顺序查找的ASL大概是6
最理想的情况是常数级:
失败
装填因子越大说明散列表越满
(2)开放定址法
①线性探测法
成功
失败
②平方探测法
4.设计散列函数——尽可能减少关键字冲突
(1)除留余数法
用质数取模,分布更均匀;但在实际应用中要根据关键字分布特点来设计散列函数(哈希函数)
(2)直接定址法
例题中key=学号
(3)数字分析法
手机号后四位分布更均匀
(4)平方取中法
5.小结
8.1排序的基本概念
1.概念
字面意思,不记
2.算法的评价指标
3.分类
8.2.1插入排序
1.算法思想
2.算法实现
不带哨兵:
带哨兵:
3.效率分析
(1)空间复杂度:O(1)
(2)时间复杂度:
4.优化——折半插入排序
(1)思路
(2)实现
(3)效率
5.练习——对链表的插入排序
代码实现
自己写
效率分析![](https://img-blog.csdnimg.cn/direct/4f94d50c40224ecfa2afa8c4c52143d1.png)
6.小结
8.2.2希尔排序
1.算法思想
2.代码实现
3.性能分析
(1)空间复杂度:O(1)
(2)时间复杂度:
(3)算法稳定性:不稳定
8.3交换排序
-
冒泡排序(例子是从后往前的递增)
1.算法思想:
2.代码实现:
3.算法性能 :
也适用于链表,实现代码自行练习
4.小结:
-
快速排序
1.算法思想