Skip to content

Commit d5e9252

Browse files
committed
修复和优化语句表述
1 parent ffc2f5c commit d5e9252

File tree

1 file changed

+81
-73
lines changed

1 file changed

+81
-73
lines changed

docs/06_graph/06_01_graph_basic.md

Lines changed: 81 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,146 +1,154 @@
11
## 1. 图的定义
22

3-
> **图(Graph)**:由顶点集合 $V$ 与边集合 $E$(顶点之间的关系)构成的数据结构。图的形式化定义为 $G = (V, E)$。
3+
> **图(Graph)**:由顶点集合 $V$ 和边集合 $E$(即顶点之间的连接关系)组成的数据结构,通常记作 $G = (V, E)$。
44
5-
- **顶点(Vertex)**图中的基本元素,通常称为顶点,表示对象或节点。顶点的集合 $V$ 是有限非空集合,包含 $n > 0$ 个顶点。如下面的示意图所示,通常我们使用圆圈来表示顶点
6-
- **边(Edge)**顶点之间的关系或连接。边的形式化定义为:$e = \langle u, v \rangle$,表示从 $u$ 到 $v$ 的一条边,其中 $u$ 称为起始点,$v$ 称为终止点。如下面的示意图所示,通常我们使用连接两个顶点的线段来表示边
5+
- **顶点(Vertex)**图的基本单元,表示对象或节点。顶点集合 $V$ 是有限且非空的,包含 $n > 0$ 个顶点。通常用圆圈表示顶点
6+
- **边(Edge)**连接两个顶点的线段,表示它们之间的关系。边可记为 $e = \langle u, v \rangle$,表示从 $u$ 到 $v$ 的一条边,其中 $u$ 是起点,$v$ 是终点
77

88
![](https://qcdn.itcharge.cn/images/20220307145142.png)
99

10-
- **子图(Sub Graph)**对于图 $G = (V, E)$ 与 $G^{'} = (V^{'}, E^{'})$,如果满足 $V^{'} \subseteq V$,$E^{'} \subseteq E$,则称图 $G^{'}$ 是图 $G$ 的一个子图。直观的说,子图是由原图的一部分顶点和边组成的,同时边的两端顶点必须属于子图的顶点集合 $V^{'}$。特别地,根据定义,图 $G$ 本身也是其一个子图。在下图中,我们展示了一个图 $G$ 及其子图 $G^{'}$。
10+
- **子图(Sub Graph)**如果图 $G' = (V', E')$ 满足 $V' \subseteq V$ 且 $E' \subseteq E$, $G'$ 是 $G$ 的子图。也就是说,子图由原图部分顶点和边组成,且边的两个端点都属于 $V'$。特别地,$G$ 本身也是它的一个子图。下图展示了图 $G$ 及其子图 $G'$。
1111

1212
![](https://qcdn.itcharge.cn/images/20220317163120.png)
1313

1414
## 2. 图的分类
1515

16-
### 2.1 无向图和有向图
16+
### 2.1 无向图与有向图
1717

18-
根据边是否具有方向性,图可以分为两种类型:「无向图」和「有向图」。
18+
按边是否有方向,可以将图分为「无向图」和「有向图」。
1919

20-
> **无向图(Undirected Graph)**如果图中每条边都没有方向性,则称为无向图。例如,表示朋友关系或者城市间双向行驶的路线图常用无向图建模
20+
- **无向图(Undirected Graph)**边没有方向,常用于表示朋友关系、城市间双向道路等。无向图的边由两个顶点组成的无序对表示,如下图左侧中的顶点 $(v_1, v_2)$
2121

22-
在无向图中,每条边都是由两个顶点组成的无序对。例如下图左侧中的顶点 $v_1$ 和顶点 $v_2$ 之间的边记为 $(v_1, v_2)$ 或 $(v_2, v_1)$。
23-
24-
> **有向图(Directed Graph)**:如果图中的每条边都具有方向性,则称为有向图。例如,表示任务流程的流程图或网络请求的依赖图是典型的有向图。
25-
26-
在有向图中,有向边(又称弧)是由两个顶点组成的有序对,例如下图右侧中从顶点 $v_1$ 到顶点 $v_2$ 的弧,记为 $\langle v_1, v_2 \rangle$,$v_1$ 被称为弧尾,$v_2$ 被称为弧头,如下图所示。
22+
- **有向图(Directed Graph)**:边有方向,常用于表示任务流程、依赖关系等。有向图的边(弧)由两个顶点组成的有序对表示,如下图右侧中的顶点 $\langle v_1, v_2 \rangle$,其中 $v_1$ 为弧尾,$v_2$ 为弧头。
2723

2824
![](https://qcdn.itcharge.cn/images/20220307160017.png)
2925

30-
如果图中有 $n$ 个顶点,则根据图的类型,其边(或弧)的最大数量可以定义如下
26+
如果图有 $n$ 个顶点,
3127

32-
- **无向图中边的最大数量**:在无向图中,任意两个顶点之间最多存在一条边,因此最多可以有 $\frac{n \times (n - 1)}{2}$ 条边。具有 $\frac{n \times (n - 1)}{2}$ 条边的无向图称为 **「完全无向图(Completed Undirected Graph)」**
28+
- **无向图最大边数**:$\frac{n \times (n - 1)}{2}$。达到最大边数的无向图称为 **完全无向图**
29+
- **有向图最大边数**:$n \times (n - 1)$。达到最大边数的有向图称为 **完全有向图**
3330

34-
- **有向图中边的最大数量**:在有向图中,任意两个顶点之间可以存在一对方向相反的弧,因此最多可以有 $n \times (n - 1)$ 条弧。具有 $n \times (n - 1)$ 条弧的有向图称为 **「完全有向图(Completed Directed Graph)」**
35-
36-
下图展示了两个示例:左侧为包含 $4$ 个顶点的完全无向图,右侧为包含 $4$ 个顶点的完全有向图。
31+
下图左为 $4$ 个顶点的完全无向图,右为 $4$ 个顶点的完全有向图:
3732

3833
![](https://qcdn.itcharge.cn/images/20220308151436.png)
3934

40-
下面介绍一下无向图和有向图中一个重要概念 **「顶点的度」**
41-
42-
> **顶点的度**:与该顶点 $v_i$ 相关联的边的数量,记为 $TD(v_i)$。
35+
**顶点的度** 是图的一个重要概念:
4336

44-
- **无向图中顶点的度**:在无向图中,顶点的都是与该顶点相连的边的数量。例如,在上图左侧的完全无向图中,顶点 $v_3$ 的度为 $3$,因为有 $3$ 个其他的顶点与 $v_3$ 相连接。
45-
46-
- **有向图中顶点的度**:在有向图中,顶点的度可以分为「出度」和「入度」两个部分。
47-
- **出度(Out Degree)**:以该顶点 $v_i$ 为出发点的边的条数,记为 $OD(v_i)$。
48-
- **入度(In Degree)**:以该顶点 $v_i$ 为终止点的边的条数,记为 $ID(v_i)$。
49-
50-
在有向图中,顶点 $v_i$ 的度是该点出度和入度之和,即:$TD(v_i) = OD(v_i) + ID(v_i)$。
51-
52-
例如,在上图右侧的完全有向图中,顶点 $v_3$ 的出度为 $3$,入度为 $3$,因此顶点 $v_3$ 的度为 $3 + 3 = 6$。
37+
- **无向图中,顶点的度**:与该顶点相连的边的数量,记为 $TD(v_i)$。
38+
- 如上图左,$v_3$ 的度为 $3$。
39+
- **有向图中,顶点的度** 分为:
40+
- **出度(Out Degree)**:以该顶点为起点的边数,记为 $OD(v_i)$。
41+
- **入度(In Degree)**:以该顶点为终点的边数,记为 $ID(v_i)$。
42+
- 顶点总度:$TD(v_i) = OD(v_i) + ID(v_i)$。
43+
- 如上图右,$v_3$ 的出度为 $3$,入度为 $3$,总度为 $6$。
5344

5445
### 2.2 环形图和无环图
5546

56-
> **路径** :图中的一个重要概念,对于图 $G = (V, E)$,如果存在顶点序列 $v_{i_0}, v_{i_1}, v_{i_2}, …, v_{i_m}$,并且每对相邻的顶点都有图中的边连接,即 $(v_{i_0}, v_{i_1}), (v_{i_1}, v_{i_2}), …, (v_{i_{m-1}}, v_{i_m}) \in E$(对于有向图则是 $\langle v_{i_0}, v_{i_1} \rangle, \langle v_{i_1}, v_{i_2} \rangle, …, \langle v_{i_{m-1}}, v_{i_m} \rangle \in E$),则称该顶点序列为从顶点 $v_{i_0}$ 和顶点 $v_{i_m}$ 之间的一条路径,其中 $v_{i_0}$ 是这条路径的起始点,$v_{i_m}$ 是这条路径的终止点。
57-
58-
简而言之,如果顶点 $v_{i_0}$ 可以通过一系列的顶点和边到达顶点 $v_{i_m}$,则称这两个顶点之间有一条路径,其中经过的顶点序列则称为两个顶点之间的路径。
47+
> **路径**:路径是图论中的核心概念。对于图 $G = (V, E)$,如果存在顶点序列 $v_{i_0}, v_{i_1}, v_{i_2}, \ldots, v_{i_m}$,使得任意相邻顶点对之间都存在边相连(无向图为 $(v_{i_{k-1}}, v_{i_k}) \in E$,有向图为 $\langle v_{i_{k-1}}, v_{i_k} \rangle \in E$,$1 \leq k \leq m$),则称该顶点序列为从 $v_{i_0}$ 到 $v_{i_m}$ 的一条路径。其中,$v_{i_0}$ 为起点,$v_{i_m}$ 为终点。
5948
60-
- **环(Circle)**:如果一条路径的起始点和终止点相同(即 $v_{i_0} == v_{i_m}$ ),则称这条路径为「回路」或「环」
49+
简而言之,如果从顶点 $v_{i_0}$ 出发,经过若干顶点和边能够到达顶点 $v_{i_m}$,则称 $v_{i_0}$ 与 $v_{i_m}$ 之间存在一条路径,所经过的顶点序列即为这条路径
6150

62-
- **简单路径**:顶点序列中顶点不重复出现的路径称为「简单路径」。
51+
- **环(Cycle)**:如果一条路径的起点和终点重合(即 $v_{i_0} = v_{i_m}$),则称该路径为「环」或「回路」。
52+
- **简单路径**:路径上所有顶点均不重复出现(除非是环的首尾重合),称为「简单路径」。
6353

64-
根据图中是否有环,我们可以将图分为「环形图」和「无环图」
54+
根据图中是否存在环,可以将图分为「环形图」和「无环图」
6555

66-
- **环形图(Circular Graph)**如果图中存在至少一条环路,则该图称为「环形图」
67-
- **无环图(Acyclic Graph)**如果图中不存在环路,则该图称为「无环图」
56+
- **环形图(Circular Graph)**如果图中至少存在一条环,则称为环形图
57+
- **无环图(Acyclic Graph)**如果图中不存在任何环,则称为无环图
6858

69-
在有向图中,如果不存在环路,则将该图称为「有向无环图(Directed Acyclic Graph, DAG)」。有向无环图因其独特的拓扑结构,广泛应用于诸如动态规划、最短路径问题、数据压缩等算法场景
59+
对于有向图,如果不存在环,则称为「有向无环图(Directed Acyclic Graph, DAG)」。DAG 结构在动态规划、最短路径、数据压缩等算法中有着广泛应用
7060

71-
下图展示了四种图的类型:无向无环图、无向环形图、有向无环图和有向环形图。在有向环形图中,顶点 $v_1$、$v_2$、$v_3$ 与相连的边构成了一个环
61+
下图展示了四类典型图结构:无向无环图、无向环形图、有向无环图和有向环形图。其中有向环形图中,顶点 $v_1$、$v_2$、$v_3$ 及其相连的边构成了一个环
7262

7363
![环形图和无环图](https://qcdn.itcharge.cn/images/20220317115641.png)
7464

75-
### 2.3 连通图和非连通图
65+
### 2.3 连通图与非连通图
7666

7767
#### 2.3.1 连通无向图
7868

79-
在无向图中,如果存在一条从顶点 $v_i$ 到顶点 $v_j$ 的路径,则称顶点 $v_i$ 和 $v_j$ 是连通的
69+
在无向图中,如果从顶点 $v_i$ 能通过一条路径到达顶点 $v_j$,则称 $v_i$ 和 $v_j$ 连通
8070

81-
- **连通无向图**如果无向图中任意两个顶点之间都是连通的(即任意两个顶点之间都有路径连接),则称该图为「连通无向图」
82-
- **非连通无向图**如果无向图中存在至少一对顶点之间没有任何路径连接,则称该图为「非连通无向图」
71+
- **连通无向图**任意两个顶点之间都有路径相连的无向图
72+
- **非连通无向图**存在至少一对顶点之间没有路径相连的无向图
8373

84-
下图展示了两种情况:
85-
86-
- 在左侧图中,顶点 $v_1$ 与所有其他顶点 $v_2$、$v_3$、$v_4$、$v_5$、$v_6$ 都是连通的,因此该图为连通无向图。
87-
- 在右侧图中,顶点 $v_1$ 与 $v_2$、$v_3$、$v_4$ 是连通的,但与 $v_5$、$v_6$ 没有任何路径连接,因此该图为非连通无向图。
74+
下图左侧为连通无向图,$v_1$ 能与所有其他顶点连通;右侧为非连通无向图,$v_1$ 只能与 $v_2$、$v_3$、$v_4$ 连通,无法到达 $v_5$、$v_6$。
8875

8976
![](https://qcdn.itcharge.cn/images/20220317163249.png)
9077

9178
#### 2.3.2 无向图的连通分量
9279

93-
在无向图中,某些图可能不是连通的,但它们的子图可能是连通的。这样的子图称为「连通子图」。对于其中某个连通子图,如果不存在任何包含他的更大连通子图,则该连通子图称为「连通分量」。
80+
在无向图中,整体可能不是连通的,但其中的某些子图是连通的,这些子图称为「连通子图」。如果一个连通子图无法再被包含于更大的连通子图中,则称其为「连通分量」,即无向图中的极大连通子图
9481

95-
- **连通子图**如果无向图的子图是连通的,则该子图称为连通子图
96-
- **连通分量**无向图中的一个极大连通子图(不存在任何包含它的更大的连通子图)称为该图的连通分量
97-
- **极⼤连通⼦图**无向图中的一个连通子图,且不存在包含它的更大的连通子图
82+
- **连通子图**无向图的一个子图,且该子图是连通的
83+
- **极大连通子图**连通子图中,如果不存在包含它的更大的连通子图,则称为极大连通子图
84+
- **连通分量**无向图中的极大连通子图,即为该图的连通分量
9885

99-
例如,上图右侧的非连通无向图中,尽管整体图是非连通的,但顶点 $v_1$、$v_2$、$v_3$、$v_4$ 与其相连的边构成的子图是连通的,并且不存在任何包含它的更大的连通子图,因此该子图是原图的一个连通分量。类似地,顶点 $v_5$、$v_6$ 与其相连的边也构成了原图的另一个连通分量
86+
举例来说,上图右侧的非连通无向图中,顶点 $v_1$、$v_2$、$v_3$、$v_4$ 及其相连的边构成了一个连通子图,且无法再扩展为更大的连通子图,因此它是原图的一个连通分量。同理,顶点 $v_5$、$v_6$ 及其相连的边也构成了另一个连通分量
10087

10188
#### 2.3.3 强连通有向图
10289

103-
在有向图中,如果从顶点 $v_i$ 到 $v_j$ 存在路径,且从顶点 $v_j$ 到 $v_i$ 也有路径,则称顶点 $v_i$ 与 $v_j$ 是「强连通」的。
104-
105-
- **强连通有向图**:如果图中任意两个顶点 $v_i$ 和 $v_j$ 都满足从 $v_i$ 到 $v_j$ 和从 $v_j$ 到 $v_i$ 均有路径,则称该图为「强连通有向图」。
106-
- **非强连通有向图**:如果图中存在至少一对顶点之间没有路径连接(即无法相互到达),则称该图为「非强连通有向图」。
90+
在有向图中,如果顶点 $v_i$ 能到达 $v_j$,且 $v_j$ 也能到达 $v_i$,则称 $v_i$ 和 $v_j$ 是「强连通」的。
10791

108-
下图展示了两种情况:
92+
- **强连通有向图**:任意两个顶点都能互相到达的有向图。
93+
- **非强连通有向图**:存在至少一对顶点不能互相到达的有向图。
10994

110-
- 左侧图中,任意两个顶点之间都存在路径,因此该图为强连通有向图。
111-
- 右侧图中,顶点 $v_7$ 无法通过路径到达其他顶点,因此该图为非强连通有向图。
95+
下图左为强连通有向图,任意两点可互达;右图中 $v_7$ 无法到达其他顶点,因此不是强连通有向图。
11296

11397
![](https://qcdn.itcharge.cn/images/20220317133500.png)
11498

11599
#### 2.3.4 有向图的强连通分量
116100

117-
在有向图中,「强联通分量」是指其内部任意两个顶点之间都强连通的极大强连通子图。以下是具体定义:
101+
在有向图中,「强连通分量」指的是:图中某个极大子图,子图内任意两个顶点都可以互相到达(即强连通),并且无法再加入其他顶点使其仍然强连通。
118102

119-
- **强连通子图**:有向图的一个子图,且该子图中任意两个顶点都是强连通的。
120-
- **极⼤强连通⼦图**:如果一个强联通子图不能被包含在任何更大的强连通子图中,则称其为极大强连通子图。
121-
- **强连通分量**:有向图中的一个极⼤强连通⼦图,称为该图的强连通分量。
103+
简要定义如下:
122104

123-
举个例子来解释一下。
105+
- **强连通子图**:有向图的一个子图,子图内任意两点互相可达。
106+
- **极大强连通子图**:不能再加入其他顶点的强连通子图。
107+
- **强连通分量**:有向图中的极大强连通子图。
124108

125-
例如,上图右侧的非强连通有向图,其本身不是强连通的(因为顶点 $v_7$ 无法通过路径到达其他顶点)。但顶点 $v_1$、$v_2$、$v_3$、$v_4$、$v_5$、$v_6$ 与它们之间的边构成了一个强连通子图(即上图的左侧图),且不存在包含它的更大的强连通子图,因此这是右侧图的一个强连通分量。类似地,顶点 $v_7$ 构成了一个只有一个顶点的强连通子图,因此它自身也是右侧图的一个强连通分量。
109+
举例说明:上图右侧的有向图不是强连通图(如 $v_7$ 无法到达其他顶点),但 $v_1$、$v_2$、
110+
$v_3$、$v_4$、$v_5$、$v_6$ 及其边构成了一个强连通分量(即左侧图)。而 $v_7$ 自身也单独构成一个强连通分量。
126111

127112
### 2.4 带权图
128113

129-
有时,图不仅需要表示顶点之间是否存在某种关系,还需要表示这一关系的具体细节。有时候我们需要给边赋予一些数据信息,这些数据信息被称为 ****。在具体应用中,权值可以具有某种具体意义,比如权值可以代表距离、时间以及价格等不同属性
114+
有些图不仅表示顶点之间是否有关系,还需要描述这种关系的「强度」或「代价」,这就是「权」。权值可以表示距离、时间、费用等
130115

131-
- **带权图**如果图的每条边都被赋以⼀个权值,则该图称为带权图。权值通常表示一个非负实数,但在某些场景下也可以是负数
132-
- **网络**带权的连通⽆向图被称为⽹络
116+
- **带权图**每条边都带有权值的图。权值一般为非负数,有时也可以为负数
117+
- **网络**带权且连通的无向图称为网络
133118

134-
在下面的示意图中,我们给出了一个带权图的例子。
119+
下图展示了一个带权图的例子:
135120

136121
![](https://qcdn.itcharge.cn/images/20220317135207.png)
137122

138-
### 2.5 稠密图和稀疏图
123+
### 2.5 稠密图与稀疏图
124+
125+
图按边的多少可分为「稠密图」和「稀疏图」,这一划分没有严格的界限,仅为便于理解。
126+
127+
- **稠密图(Dense Graph)**:边数接近完全图的图,即大多数顶点之间都有边相连。
128+
- **稀疏图(Sparse Graph)**:边数远少于完全图的图(常见如 $e < n \times \log_2 n$),大部分顶点之间没有直接连接。
129+
130+
## 3. 总结
131+
132+
图是计算机科学中最重要的数据结构之一,由顶点和边组成,用于表示对象间的关系。本文介绍了图的基本概念和分类:
133+
134+
### 核心概念
135+
- **顶点(Vertex)**:图的基本单元,表示对象或节点
136+
- **边(Edge)**:连接顶点的线段,表示对象间的关系
137+
- **路径**:顶点序列,表示从一个顶点到另一个顶点的遍历过程
138+
139+
### 主要分类
140+
1. **按方向性**:无向图(双向关系)vs 有向图(单向关系)
141+
2. **按连通性**:连通图(任意两点可达)vs 非连通图(存在孤立部分)
142+
3. **按环结构**:环形图(存在回路)vs 无环图(无回路,如DAG)
143+
4. **按权值**:带权图(边有权重)vs 无权图(边无权重)
144+
5. **按密度**:稠密图(边多)vs 稀疏图(边少)
139145

140-
根据图中边的稀疏程度,我们可以将图分为「稠密图」和「稀疏图」。这是一个模糊的概念,目前为止还没有给出一个量化的定义。
146+
### 重要特性
147+
- ****:无向图中顶点的连接数,有向图中分为入度和出度
148+
- **连通分量**:无向图中的极大连通子图
149+
- **强连通分量**:有向图中任意两点互相可达的极大子图
141150

142-
- **稠密图(Dense Graph)**:有很多条边或弧(边的条数 $e$ 接近于完全图的边数)的图称为稠密图。
143-
- **稀疏图(Sparse Graph)**:有很少条边或弧(边的条数 $e$ 远小于完全图的边数,如 $e < n \times \log_2n$)的图称为稀疏图。
151+
理解这些基础概念是学习图算法(如 DFS、BFS、最短路径、最小生成树等)的重要前提。
144152

145153
## 参考资料
146154

0 commit comments

Comments
 (0)