mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-15 05:00:59 +00:00
build
This commit is contained in:
@@ -8,7 +8,7 @@ comments: true
|
||||
|
||||
## 9.2.1 基于邻接矩阵的实现
|
||||
|
||||
给定一个顶点数量为 $n$ 的无向图,则各种操作的实现方式如下图所示。
|
||||
给定一个顶点数量为 $n$ 的无向图,则各种操作的实现方式如图 9-7 所示。
|
||||
|
||||
- **添加或删除边**:直接在邻接矩阵中修改指定的边即可,使用 $O(1)$ 时间。而由于是无向图,因此需要同时更新两个方向的边。
|
||||
- **添加顶点**:在邻接矩阵的尾部添加一行一列,并全部填 $0$ 即可,使用 $O(n)$ 时间。
|
||||
@@ -30,7 +30,7 @@ comments: true
|
||||
=== "删除顶点"
|
||||

|
||||
|
||||
<p align="center"> 图:邻接矩阵的初始化、增删边、增删顶点 </p>
|
||||
<p align="center"> 图 9-7 邻接矩阵的初始化、增删边、增删顶点 </p>
|
||||
|
||||
以下是基于邻接矩阵表示图的实现代码。
|
||||
|
||||
@@ -1126,7 +1126,7 @@ comments: true
|
||||
|
||||
## 9.2.2 基于邻接表的实现
|
||||
|
||||
设无向图的顶点总数为 $n$ 、边总数为 $m$ ,则可根据下图所示的方法实现各种操作。
|
||||
设无向图的顶点总数为 $n$ 、边总数为 $m$ ,则可根据图 9-8 所示的方法实现各种操作。
|
||||
|
||||
- **添加边**:在顶点对应链表的末尾添加边即可,使用 $O(1)$ 时间。因为是无向图,所以需要同时添加两个方向的边。
|
||||
- **删除边**:在顶点对应链表中查找并删除指定边,使用 $O(m)$ 时间。在无向图中,需要同时删除两个方向的边。
|
||||
@@ -1149,7 +1149,7 @@ comments: true
|
||||
=== "删除顶点"
|
||||

|
||||
|
||||
<p align="center"> 图:邻接表的初始化、增删边、增删顶点 </p>
|
||||
<p align="center"> 图 9-8 邻接表的初始化、增删边、增删顶点 </p>
|
||||
|
||||
以下是基于邻接表实现图的代码示例。细心的同学可能注意到,**我们在邻接表中使用 `Vertex` 节点类来表示顶点**,这样做的原因有:
|
||||
|
||||
@@ -2114,9 +2114,9 @@ comments: true
|
||||
|
||||
## 9.2.3 效率对比
|
||||
|
||||
设图中共有 $n$ 个顶点和 $m$ 条边,下表对比了邻接矩阵和邻接表的时间和空间效率。
|
||||
设图中共有 $n$ 个顶点和 $m$ 条边,表 9-2 对比了邻接矩阵和邻接表的时间和空间效率。
|
||||
|
||||
<p align="center"> 表:邻接矩阵与邻接表对比 </p>
|
||||
<p align="center"> 表 9-2 邻接矩阵与邻接表对比 </p>
|
||||
|
||||
<div class="center-table" markdown>
|
||||
|
||||
@@ -2131,4 +2131,4 @@ comments: true
|
||||
|
||||
</div>
|
||||
|
||||
观察上表,似乎邻接表(哈希表)的时间与空间效率最优。但实际上,在邻接矩阵中操作边的效率更高,只需要一次数组访问或赋值操作即可。综合来看,邻接矩阵体现了“以空间换时间”的原则,而邻接表体现了“以时间换空间”的原则。
|
||||
观察表 9-2 ,似乎邻接表(哈希表)的时间与空间效率最优。但实际上,在邻接矩阵中操作边的效率更高,只需要一次数组访问或赋值操作即可。综合来看,邻接矩阵体现了“以空间换时间”的原则,而邻接表体现了“以时间换空间”的原则。
|
||||
|
||||
Reference in New Issue
Block a user