This commit is contained in:
krahets
2023-05-21 19:29:43 +08:00
parent 0c64fc7315
commit 5a68f683b9
26 changed files with 93 additions and 93 deletions

View File

@@ -2,7 +2,7 @@
comments: true
---
# 10.1.   图
# 9.1.   图
「图 Graph」是一种非线性数据结构由「顶点 Vertex」和「边 Edge」组成。我们可以将图 $G$ 抽象地表示为一组顶点 $V$ 和一组边 $E$ 的集合。以下示例展示了一个包含 5 个顶点和 7 条边的图。
@@ -20,7 +20,7 @@ $$
那么,图与其他数据结构的关系是什么?如果我们把「顶点」看作节点,把「边」看作连接各个节点的指针,则可将「图」看作是一种从「链表」拓展而来的数据结构。**相较于线性关系(链表)和分治关系(树),网络关系(图)的自由度更高,从而更为复杂**。
## 10.1.1.   图常见类型
## 9.1.1.   图常见类型
根据边是否具有方向,可分为「无向图 Undirected Graph」和「有向图 Directed Graph」。
@@ -46,13 +46,13 @@ $$
<p align="center"> Fig. 有权图与无权图 </p>
## 10.1.2. &nbsp; 图常用术语
## 9.1.2. &nbsp; 图常用术语
- 「邻接 Adjacency」当两顶点之间存在边相连时称这两顶点“邻接”。在上图中顶点 1 的邻接顶点为顶点 2、3、5。
- 「路径 Path」从顶点 A 到顶点 B 经过的边构成的序列被称为从 A 到 B 的“路径”。在上图中,边序列 1-5-2-4 是顶点 1 到顶点 4 的一条路径。
- 「度 Degree」表示一个顶点拥有的边数。对于有向图「入度 In-Degree」表示有多少条边指向该顶点「出度 Out-Degree」表示有多少条边从该顶点指出。
## 10.1.3. &nbsp; 图的表示
## 9.1.3. &nbsp; 图的表示
图的常用表示方法包括「邻接矩阵」和「邻接表」。以下使用无向图进行举例。
@@ -86,7 +86,7 @@ $$
观察上图可发现,**邻接表结构与哈希表中的「链地址法」非常相似,因此我们也可以采用类似方法来优化效率**。例如,当链表较长时,可以将链表转化为 AVL 树或红黑树,从而将时间效率从 $O(n)$ 优化至 $O(\log n)$ ,还可以通过中序遍历获取有序序列;此外,还可以将链表转换为哈希表,将时间复杂度降低至 $O(1)$ 。
## 10.1.4. &nbsp; 图常见应用
## 9.1.4. &nbsp; 图常见应用
实际应用中,许多系统都可以用图来建模,相应的待求解问题也可以约化为图计算问题。

View File

@@ -2,11 +2,11 @@
comments: true
---
# 10.2. &nbsp; 图基础操作
# 9.2. &nbsp; 图基础操作
图的基础操作可分为对「边」的操作和对「顶点」的操作。在「邻接矩阵」和「邻接表」两种表示方法下,实现方式有所不同。
## 10.2.1. &nbsp; 基于邻接矩阵的实现
## 9.2.1. &nbsp; 基于邻接矩阵的实现
给定一个顶点数量为 $n$ 的无向图,则有:
@@ -762,7 +762,7 @@ comments: true
```
## 10.2.2. &nbsp; 基于邻接表的实现
## 9.2.2. &nbsp; 基于邻接表的实现
设无向图的顶点总数为 $n$ 、边总数为 $m$ ,则有:
@@ -1451,7 +1451,7 @@ comments: true
[class]{GraphAdjList}-[func]{}
```
## 10.2.3. &nbsp; 效率对比
## 9.2.3. &nbsp; 效率对比
设图中共有 $n$ 个顶点和 $m$ 条边,下表为邻接矩阵和邻接表的时间和空间效率对比。

View File

@@ -2,7 +2,7 @@
comments: true
---
# 10.3. &nbsp; 图的遍历
# 9.3. &nbsp; 图的遍历
!!! note "图与树的关系"
@@ -12,7 +12,7 @@ comments: true
与树类似,图的遍历方式也可分为两种,即「广度优先遍历 Breadth-First Traversal」和「深度优先遍历 Depth-First Traversal」也称为「广度优先搜索 Breadth-First Search」和「深度优先搜索 Depth-First Search」简称 BFS 和 DFS。
## 10.3.1. &nbsp; 广度优先遍历
## 9.3.1. &nbsp; 广度优先遍历
**广度优先遍历是一种由近及远的遍历方式,从距离最近的顶点开始访问,并一层层向外扩张**。具体来说,从某个顶点出发,先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻接顶点,以此类推,直至所有顶点访问完毕。
@@ -332,7 +332,7 @@ BFS 通常借助「队列」来实现。队列具有“先入先出”的性质
**空间复杂度:** 列表 `res` ,哈希表 `visited` ,队列 `que` 中的顶点数量最多为 $|V|$ ,使用 $O(|V|)$ 空间。
## 10.3.2. &nbsp; 深度优先遍历
## 9.3.2. &nbsp; 深度优先遍历
**深度优先遍历是一种优先走到底、无路可走再回头的遍历方式**。具体地,从某个顶点出发,访问当前顶点的某个邻接顶点,直到走到尽头时返回,再继续走到尽头并返回,以此类推,直至所有顶点遍历完成。

View File

@@ -2,7 +2,7 @@
comments: true
---
# 10.4. &nbsp; 小结
# 9.4. &nbsp; 小结
- 图由顶点和边组成,可以被表示为一组顶点和一组边构成的集合。
- 相较于线性关系(链表)和分治关系(树),网络关系(图)具有更高的自由度,因而更为复杂。