图论

65 阅读3分钟

图的基本概念

注意:线性表可以是空表,树可以是空树,但图不可以是空图。就是说,图中不能一个顶点也没有,图的顶点集V一定非空,但边集E可以为空,此时图中只有顶点而没有边。

有向图、无向图

简单图、多重图

完全图

子图、生成子图

连通、连通图、连通分量

极大连通子图极小连通子图是在无向图中进行讨论的。

无向图中,连通图的极大连通子图就是他自己,非连通图有多个极大连通子图。

无向图中,只有连通图才有极小连通子图这个概念。

这个极大是指的边数(edge)极大,这个极大是在原图的边中的极大(也就是说,子图里面已经包括了原图中所有和子图中顶点有关的边)。

连通的无向图只有一个极大连通子图,即它本身。因为不存在另一个连通的子图包含的点和边比它本身还要多,所以叫作极大连通子图。

不连通的无向图可以拆分为若干个连通的无向图,如果我们在拆分时注意把能连通的点边都放在一个连通子图中,使这个连通子图足够大,以至于再多包含一个点或边它就变成不连通的了,我们称这个连通子图为极大连通子图,也叫连通分量。

连通的无向图才有极小连通子图,之所以说它极小,是因为极小连通子图只要求包含图中所有顶点及其比顶点数量少一个的边(且不能成环),也就是说如果给极小连通子图任意两个顶点间加入一条边,则必有环。

这个极大是指的边数(edge)极大,这个极大是在原图的边中的极大(也就是说,子图里面已经包括了原图中所有和子图中顶点有关的边)。

极大是用最多边保证连通,极小是用最少的边保证连通。

极大的意思是使连通分量尽量包含更多的边和顶点,用尽量多的边保证尽量多的点连通。
极小的意思是使连通图能达到连通的最小边数,是用最少的边保证连通。

极大连通子图是讨论连通分量的,极小连通子图是讨论生成树的。图全部顶点所确定的极小连通子图即为连通图的生成树。

极大强连通子图是在有向图中进行讨论的。

强连通、强连通图、强连通分量

1、强连通图的极大强连通子图为其本身。(是唯一的)
2、非强连通图有多个极大强连通子图。(非强连通图的极大强连通子图叫做强连通分量)
3、不存在极小强连通子图这个概念。

生成树、生成森林

顶点的度、入度、出度

边的权和网

在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值。这种边上带有权值的图称为带权图,也称网。

稠密图、稀疏图

边数很少的图称为稀疏图,反之称为稠密图 。

没有绝对的界限,一般来说|E| < |V|log|V|时,可以将G视为稀疏图。

路径、路径长度、回路

简单路径、简单回路

距离

有向树

有一个顶点的入度为0,其余顶点的入度均为1的有向图称为有向树。


图的存储

邻接矩阵法

空间复杂度:O(|V|2) ——只和顶点数相关,和实际的边数无关。

适合用于存储稠密图。

无向图的邻接矩阵是对称矩阵,可以压缩存储(只存储上三角区/下三角区)。

邻接矩阵的性质:

邻接表法

十字链表(有向图)

邻接多重表(无向图)


图的基本操作

主要围绕邻接矩阵和邻接表的操作。


图的遍历

广度优先搜索算法(BFS)

广度优先生成树

若图是非连通的,使用广度优先搜索,则会产生广度优先生成森林。

图的邻接矩阵表示是唯一的,故广度优先生成树也唯一。

图的邻接表表示不唯一,故广度优先生成树也不唯一。

广度优先搜索也可以找无权图的最小生成树。

深度优先搜索算法(DFS)

图的深度优先遍历类似于树的先根遍历。

深度优先生成树和生成森林

同⼀个图的邻接矩阵表示⽅式唯⼀,因此深度优先遍历序列唯⼀,深度优先生成树也唯⼀。

同⼀个图邻接表表示⽅式不唯⼀,因此深度优先遍历序列不唯⼀,深度优先生成树也不唯⼀。

图的遍历与连通性


图的应用

最小生成树

一个连通图的生成树是图的极小连通子图,它包含图中所有顶点和尽可 能少的边,且一个连通图可能有多个生成树。

普利姆算法(Prim)

克鲁斯卡尔算法(Kruskal)

最短路径问题

BFS算法

迪杰斯特拉算法(Dijkstra)

迪杰斯特拉算法是解决单源寻找最短途径。 如果要找出所有结点对之间的最短路径,时间复杂度为O(|𝑉|3) 。

无权图、不带负权值的有权图都可适用。

有向图、无向图都可适用。

弗洛伊德算法(Floyd)

Floyd算法是基于动态规划思想的算法。

Floyd算法不能解决带有“负权回路”的图(有负权值的边组成回路),这种图有可能没有最短路径。

有向无环图(DAG)

使用DAG表示运算表达式

拓扑排序(无权DAG用)

AOV网(Activity on Vertex Network,用顶点表示活动的网)

在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序:

1、每个顶点出现且只出现一次。

2、若顶点A在序列中排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径。

或定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得若存在一条从顶点A到顶点B的路径,则在排序中顶点B出现在顶点A的后面。每个AOV网都有一个或多个拓扑排序序列。

拓扑排序:找到做事的先后顺序

关键路径(有权DAG用)

带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销,称之为用边表示活动的网络,简称AOE网(Activity On Edge NetWork)

注意:

1、若关键活动耗时增加,则整个工程的工期将增长。

2、缩短关键活动的时间,可以缩短整个工程的工期。

3、当缩短到一定程度时,关键活动可能会变成非关键活动。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情