|
10 | 10 |
|
11 | 11 | #### 1.1.1 邻接矩阵的原理描述
|
12 | 12 |
|
13 | | -> **邻接矩阵(Adjacency Matrix)**:使用一个二维数组 `adj_matrix` 来存储顶点之间的邻接关系。 |
| 13 | +> **邻接矩阵(Adjacency Matrix)**:使用一个二维数组 $adj\underline{}matrix$ 来存储顶点之间的邻接关系。 |
14 | 14 | >
|
15 | | -> - 对于无权图来说,如果 `adj_matrix[i][j]` 为 `1`,则说明顶点 $v_i$ 到 $v_j$ 存在边,如果 `adj_matrix[i][j]` 为 `0`,则说明顶点 $v_i$ 到 $v_j$ 不存在边。 |
16 | | -> - 对于带权图来说,如果 `adj_matrix[i][j]` 为 `w`,并且 `w != float('inf')`,则说明顶点 $v_i$ 到 $v_j$ 的权值为 `w`。如果 `adj_matrix[i][j]` 为 `float('inf')`,则说明顶点 $v_i$ 到 $v_j$ 不存在边。 |
| 15 | +> - 对于无权图来说,如果 $adj\underline{}matrix[i][j]$ 为 1ドル$,则说明顶点 $v_i$ 到 $v_j$ 存在边,如果 $adj\underline{}matrix[i][j]$ 为 0ドル$,则说明顶点 $v_i$ 到 $v_j$ 不存在边。 |
| 16 | +> - 对于带权图来说,如果 $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$ 不存在边。 |
17 | 17 |
|
18 | 18 | 在下面的示意图中,左侧是一个无向图,右侧则是该无向图对应的邻接矩阵结构。
|
19 | 19 |
|
|
22 | 22 | 邻接矩阵的特点:
|
23 | 23 |
|
24 | 24 | - 优点:实现简单,并且可以直接查询顶点 $v_i$ 与 $v_j$ 之间是否有边存在,还可以直接查询边的权值。
|
25 | | -- 缺点:初始化效率和遍历效率较低,空间开销大,空间利用率低,并且不能存储重复边,也不便于增删节点。如果当顶点数目过大(比如当 $n > 10^5$)时,使用邻接矩阵建立一个 `n * n` 的二维数组不太现实。 |
| 25 | +- 缺点:初始化效率和遍历效率较低,空间开销大,空间利用率低,并且不能存储重复边,也不便于增删节点。如果当顶点数目过大(比如当 $n > 10^5$)时,使用邻接矩阵建立一个 $n \times n$ 的二维数组不太现实。 |
26 | 26 |
|
27 | 27 | #### 1.1.2 邻接矩阵的算法分析
|
28 | 28 |
|
29 | | -邻接矩阵的时间复杂度: |
| 29 | +- **时间复杂度**: |
| 30 | + - **初始化操作**:$O(n^2)$。 |
| 31 | + - **查询、添加或删除边操作**:$O(1)$。 |
| 32 | + - **获取某个点的所有边操作**:$O(n)$。 |
| 33 | + - **图的遍历操作** :$O(n^2)$。 |
30 | 34 |
|
31 | | -- 图的初始化和创建操作:$O(n^2)$。 |
32 | | -- 查询是否存在某条边:$O(1)$。 |
33 | | -- 遍历某个点的所有边:$O(n)$。 |
34 | | -- 遍历整张图:$O(n^2)$。 |
35 | | - |
36 | | -邻接矩阵的空间复杂度: |
37 | | - |
38 | | -- 空间复杂度:$O(n^2)$。 |
| 35 | +- **空间复杂度**:$O(n^2)$。 |
39 | 36 |
|
40 | 37 | #### 1.1.3 邻接矩阵的代码实现
|
41 | 38 |
|
@@ -89,7 +86,7 @@ graph.printGraph()
|
89 | 86 |
|
90 | 87 | #### 1.2.1 边集数组的原理描述
|
91 | 88 |
|
92 | | -> **边集数组(Edgeset Array)**:使用一个数组来存储存储顶点之间的邻接关系。数组中每个元素都包含一条边的起点 `vi`、终点 `vj` 和边的权值 `val`(如果是带权图)。 |
| 89 | +> **边集数组(Edgeset Array)**:使用一个数组来存储存储顶点之间的邻接关系。数组中每个元素都包含一条边的起点 $v_i$、终点 $v_j$ 和边的权值 $val$(如果是带权图)。 |
93 | 90 |
|
94 | 91 | 在下面的示意图中,左侧是一个有向图,右侧则是该有向图对应的边集数组结构。
|
95 | 92 |
|
|
0 commit comments