文章目录
图的基本概念
- 无向图的全部顶点的度的和等于边数的2倍
- 顶点v的度等于其入度和出度之和,即TD(v) = ID(v) + OD(v)。
- <v, w>,其中v、w是顶点,v称为弧尾,w称为弧头
- 一个图中不可能一个顶点都没有,图的顶点集V一定非空,而边集可以为空
- 连通分量和强联通分量区别
- 若有满足V(G’) = V(G)的子图G’,则称其为G的生成子图
- 生成子图:顶点数不变,边是子集
- 有向图和无向图都有子图和生成子图,定义是类似的
- 生成树和生成森林的概念
- 带权路径长度——当图是带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度
- 路径长度——路径上边的数目
- n个顶点的树,必有n-1条边。
- 常见考点:n个顶点的图,若 |E|>n-1,则一定有回路
常考考点
图的存储
无向图的邻接矩阵是对称矩阵,可以压缩存储(只存储上三角区/下三角区)
无权图:主对角线元素为0,其余位置,有边则是1,无边则为0
有权图:主对角线元素为0,其余位置,有边则是权值,无边则为无穷
邻接矩阵法性能分析
空间复杂度:O(|V| 2 ) ——只和顶点数相关,和实际的边数无关
适合用于存储稠密图
压缩存储
邻接矩阵法的性质An的含义
邻接表
- 注意:
无向图中,边结点的数量是2|E|,整体空间复杂度为O(|V| + 2|E|)
有向图中,边结点的数量是|E|,整体空间复杂度为O(|V| + |E|)
十字链表(存储有向图)
邻接多重表(无向图)
图的遍历
BFS广度优先遍历
- 同⼀个图的邻接矩阵表示⽅式唯⼀,因此⼴度优先遍历序列唯⼀
- 同⼀个图邻接表表示⽅式不唯⼀,因此⼴度优先遍历序列不唯⼀
- 对于⽆向图,调⽤BFS函数的次数=连通分量数
- 算法思路:
性能分析
- 空间复杂度:最坏情况,辅助队列⼤⼩为 O(|V|)
广度优先生成树和生成森林
DFS深度优先遍历
1.算法性能分析
2. 对⽆向图进⾏BFS/DFS遍历
调⽤BFS/DFS函数的次数=连通分量数
3. 无向图中,对于连通图,只需调⽤1次 BFS/DFS
4. 有向图中,对于强连通图,从任⼀结点出发都只需调⽤1次 BFS/DFS
BFS类似于树的层序遍历
DFS类似于树的先序遍历
图的应用
最小生成树(PK)
Prim
从某⼀个顶点开始构建⽣成树;每次将代价最⼩的新顶点纳⼊⽣成树,直到所有顶点都纳⼊为⽌。
Kruskal
每次选择⼀条权值最⼩的边,使这条边的两头连通(原本已经连通的就不选)
直到所有结点都连通
最小生成树的性质
最短路径(德芙DF)
BFS求无权图的最短路径
- ⽆权图可以视为⼀种特殊的带权图,只是每条边的权值都为1
- BFS解决的是无权图的单源点最短路径问题
- BFS算法求单源最短路径也可以解决所有边的权值都相同的图
Dijkstra算法(电源点-时:O(|V| 2 ))看视频理解!!!一定要会!
Floyd算法(每对顶点,时: O(|V| 3 ))
有向无环图(DAG)描述表达式
有向⽆环图:若⼀个有向图中不存在环,则称为有向⽆环图,简称DAG图(Directed Acyclic Graph)
拓扑排序(AOV网)
AOV⽹(Activity On Vertex NetWork,⽤顶点表示活动的⽹):
- 入度为0表示这个顶点所表示的活动在他之前不需要任何的准备活动
- 每个AOV⽹都有⼀个或多个 拓扑排序序列
- DAG(有向无环图)才能进行拓扑排序
上面一个是使用邻接表法的时间复杂度度
逆拓扑排序
注意:
- 拓扑排序和逆拓扑排序序列可能是不唯一的
- 若图中有环,则不存在拓扑or逆拓扑排序序列
关键路径(AOE网)
从前往后去较大的,从后往前去较小的!!
- AOE⽹ (Activity On Edge NetWork)
- 在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如
完成活动所需的时间),称之为⽤边表示活动的⽹络,简称AOE⽹ (Activity On Edge NetWork)
求关键路径的步骤
注意:汇点的最早最迟发生时间是相同的
关键活动、关键路径的特性
快速求解关键路径
从前往后去较大的,从后往前去较小的!!
只看事件的最早发生事件
快速求解的关键:从前往后取到较大的路径之后,划掉小的路径