Chapter 4 图
Chapter 4 图
.
1- 图的存储结构
无向图:对称
有向图:……
2- 图的遍历
1 深度优先搜索(DFS)
类似于二叉树的先序遍历
2 广度优先搜索(BFS)
类似于二叉树的层序遍历
3- 最小(代价)生成树(针对无向图)MST
1 Prim算法 O(|V2|)
只与顶点数有关,与边无关
2 Kruskal算法 O(|E|log|E|)
只与边数有关,与顶点数无关
//什么样的图最小生成树唯一?图中所有权值不相等。
4- 最短路径
1 Dijkstra O(|V2|)
单源最短路径
l 要找出所有节点的最短路径,需要对每一个结点用Dijkstra O(|V3|)
l 边上有负权值,不适用
2 Floyd O(|V3|)
求解任意一对顶点间的最短距离
l 允许带有负权值的边,但不允许有负权值边组成的回路
5- 拓扑排序 O(|V|+|E|)
1 AOV网
以顶点表示活动,以边表示活动的先后次序,且没有回路的有向图
2 对有向无环图的拓扑排序
可能不唯一:如果有多个入度为0的顶点,可任选一个输出
6- 关键路径
1 AOE网
活动在边上的网,与AOV网相比
相同点:都是有向无环图
不同点:AOE网边表示活动、有权值,表示活动持续时间。顶点表示事件,事件是图中新活动开始旧活动结束的标志。
AOV网边表示活动之间的相互关系,无权值,顶点表示活动。
l 只存在一个入度为0的点称为源点
求关键路径的步骤:
1 拓扑排序
2 事件Vk的最早发生时间Ve(k)
V1->Vi max
3 时间Vk的最迟发生时间Vl(k)
从后向前算 min = 后-max
4 活动ai的最早开始时间e(i)
边上首结点的Ve(k)
5 活动ai的最迟开始时间l(i)
边上尾结点的Vl(k)-ai
6 d = l(i) - e(i)
//可以通过加快那些在所有关键路径上的关键活动来缩短工期
//关键路径不唯一
注:
1- 邻接矩阵的空间复杂度O(|V2|)
2- 邻接表—方便找出所有邻边(不唯一)
邻接矩阵—给定的两个顶点是否存在边
3- 十字链表—有向图的链式存储
容易求得顶点的入度和出度
图的十字链表表示不唯一,但一个十字链表可以唯一确定一个图。
4- 邻接多重表是无向图的另一种链式存储结构
5- BFS借助一个辅助队列,空间复杂度是O(|V|)
邻接表O(|V|+|E|),邻接矩阵O(|V2|)
6- DFS借助一个栈,空间复杂度是O(|V|)
邻接表O(|V|+|E|),邻接矩阵O(|V2|)
7- 当各边权值相等时,广度优先算法可以解决单源最短路径问题。
8- Prim O(|V2|)
Kruskal O(|E|log|E|)
Dijkstra O(|V2|)
Floyd O(|V3|)
拓扑 O(|V|+|E|)
9- 最短路径一定是简单路径
10- 可以判断有向图是否有环:深度优先搜索,拓扑排序
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步