Skip to content

Commit

Permalink
Update 02.Graph-Structure.md
Browse files Browse the repository at this point in the history
  • Loading branch information
itcharge committed Sep 1, 2023
1 parent 76ca59c commit 789fca8
Showing 1 changed file with 11 additions and 14 deletions.
25 changes: 11 additions & 14 deletions Contents/08.Graph/01.Graph-Basic/02.Graph-Structure.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@

#### 1.1.1 邻接矩阵的原理描述

> **邻接矩阵(Adjacency Matrix)**:使用一个二维数组 `adj_matrix` 来存储顶点之间的邻接关系。
> **邻接矩阵(Adjacency Matrix)**:使用一个二维数组 $adj\underline{}matrix$ 来存储顶点之间的邻接关系。
>
> - 对于无权图来说,如果 `adj_matrix[i][j]``1`,则说明顶点 $v_i$ 到 $v_j$ 存在边,如果 `adj_matrix[i][j]``0`,则说明顶点 $v_i$ 到 $v_j$ 不存在边。
> - 对于带权图来说,如果 `adj_matrix[i][j]``w`,并且 `w != float('inf')`,则说明顶点 $v_i$ 到 $v_j$ 的权值为 `w`。如果 `adj_matrix[i][j]``float('inf')` ,则说明顶点 $v_i$ 到 $v_j$ 不存在边。
> - 对于无权图来说,如果 $adj\underline{}matrix[i][j]$$1$,则说明顶点 $v_i$ 到 $v_j$ 存在边,如果 $adj\underline{}matrix[i][j]$$0$,则说明顶点 $v_i$ 到 $v_j$ 不存在边。
> - 对于带权图来说,如果 $adj\underline{}matrix[i][j]$$w$,并且 $w \ne \infty$(即 `w != float('inf')`,则说明顶点 $v_i$ 到 $v_j$ 的权值为 $w$。如果 $adj\underline{}matrix[i][j]$$\infty$(即 `float('inf')`,则说明顶点 $v_i$ 到 $v_j$ 不存在边。
在下面的示意图中,左侧是一个无向图,右侧则是该无向图对应的邻接矩阵结构。

Expand All @@ -22,20 +22,17 @@
邻接矩阵的特点:

- 优点:实现简单,并且可以直接查询顶点 $v_i$ 与 $v_j$ 之间是否有边存在,还可以直接查询边的权值。
- 缺点:初始化效率和遍历效率较低,空间开销大,空间利用率低,并且不能存储重复边,也不便于增删节点。如果当顶点数目过大(比如当 $n > 10^5$)时,使用邻接矩阵建立一个 `n * n` 的二维数组不太现实。
- 缺点:初始化效率和遍历效率较低,空间开销大,空间利用率低,并且不能存储重复边,也不便于增删节点。如果当顶点数目过大(比如当 $n > 10^5$)时,使用邻接矩阵建立一个 $n \times n$ 的二维数组不太现实。

#### 1.1.2 邻接矩阵的算法分析

邻接矩阵的时间复杂度:
- **时间复杂度**
- **初始化操作**:$O(n^2)$。
- **查询、添加或删除边操作**:$O(1)$。
- **获取某个点的所有边操作**:$O(n)$。
- **图的遍历操作** :$O(n^2)$。

- 图的初始化和创建操作:$O(n^2)$。
- 查询是否存在某条边:$O(1)$。
- 遍历某个点的所有边:$O(n)$。
- 遍历整张图:$O(n^2)$。

邻接矩阵的空间复杂度:

- 空间复杂度:$O(n^2)$。
- **空间复杂度**:$O(n^2)$。

#### 1.1.3 邻接矩阵的代码实现

Expand Down Expand Up @@ -89,7 +86,7 @@ graph.printGraph()

#### 1.2.1 边集数组的原理描述

> **边集数组(Edgeset Array)**:使用一个数组来存储存储顶点之间的邻接关系。数组中每个元素都包含一条边的起点 `vi`、终点 `vj` 和边的权值 `val`(如果是带权图)。
> **边集数组(Edgeset Array)**:使用一个数组来存储存储顶点之间的邻接关系。数组中每个元素都包含一条边的起点 $v_i$、终点 $v_j$ 和边的权值 $val$(如果是带权图)。
在下面的示意图中,左侧是一个有向图,右侧则是该有向图对应的边集数组结构。

Expand Down

0 comments on commit 789fca8

Please sign in to comment.