mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-15 00:26:05 +00:00
build
This commit is contained in:
@@ -56,7 +56,7 @@ $$
|
||||
|
||||
图的常用表示方法包括「邻接矩阵」和「邻接表」。以下使用无向图进行举例。
|
||||
|
||||
### 邻接矩阵
|
||||
### 1. 邻接矩阵
|
||||
|
||||
设图的顶点数量为 $n$ ,「邻接矩阵 Adjacency Matrix」使用一个 $n \times n$ 大小的矩阵来表示图,每一行(列)代表一个顶点,矩阵元素代表边,用 $1$ 或 $0$ 表示两个顶点之间是否存在边。
|
||||
|
||||
@@ -74,7 +74,7 @@ $$
|
||||
|
||||
使用邻接矩阵表示图时,我们可以直接访问矩阵元素以获取边,因此增删查操作的效率很高,时间复杂度均为 $O(1)$ 。然而,矩阵的空间复杂度为 $O(n^2)$ ,内存占用较多。
|
||||
|
||||
### 邻接表
|
||||
### 2. 邻接表
|
||||
|
||||
「邻接表 Adjacency List」使用 $n$ 个链表来表示图,链表节点表示顶点。第 $i$ 条链表对应顶点 $i$ ,其中存储了该顶点的所有邻接顶点(即与该顶点相连的顶点)。
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ comments: true
|
||||
|
||||
<p align="center"> 图:图的广度优先遍历 </p>
|
||||
|
||||
### 算法实现
|
||||
### 1. 算法实现
|
||||
|
||||
BFS 通常借助「队列」来实现。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想异曲同工。
|
||||
|
||||
@@ -433,7 +433,7 @@ BFS 通常借助「队列」来实现。队列具有“先入先出”的性质
|
||||
|
||||
不唯一。广度优先遍历只要求按“由近及远”的顺序遍历,**而多个相同距离的顶点的遍历顺序是允许被任意打乱的**。以上图为例,顶点 $1$ , $3$ 的访问顺序可以交换、顶点 $2$ , $4$ , $6$ 的访问顺序也可以任意交换。
|
||||
|
||||
### 复杂度分析
|
||||
### 2. 复杂度分析
|
||||
|
||||
**时间复杂度:** 所有顶点都会入队并出队一次,使用 $O(|V|)$ 时间;在遍历邻接顶点的过程中,由于是无向图,因此所有边都会被访问 $2$ 次,使用 $O(2|E|)$ 时间;总体使用 $O(|V| + |E|)$ 时间。
|
||||
|
||||
@@ -447,7 +447,7 @@ BFS 通常借助「队列」来实现。队列具有“先入先出”的性质
|
||||
|
||||
<p align="center"> 图:图的深度优先遍历 </p>
|
||||
|
||||
### 算法实现
|
||||
### 1. 算法实现
|
||||
|
||||
这种“走到尽头 + 回溯”的算法形式通常基于递归来实现。与 BFS 类似,在 DFS 中我们也需要借助一个哈希表 `visited` 来记录已被访问的顶点,以避免重复访问顶点。
|
||||
|
||||
@@ -845,7 +845,7 @@ BFS 通常借助「队列」来实现。队列具有“先入先出”的性质
|
||||
|
||||
以树的遍历为例,“根 $\rightarrow$ 左 $\rightarrow$ 右”、“左 $\rightarrow$ 根 $\rightarrow$ 右”、“左 $\rightarrow$ 右 $\rightarrow$ 根”分别对应前序、中序、后序遍历,它们展示了三种不同的遍历优先级,然而这三者都属于深度优先遍历。
|
||||
|
||||
### 复杂度分析
|
||||
### 2. 复杂度分析
|
||||
|
||||
**时间复杂度:** 所有顶点都会被访问 $1$ 次,使用 $O(|V|)$ 时间;所有边都会被访问 $2$ 次,使用 $O(2|E|)$ 时间;总体使用 $O(|V| + |E|)$ 时间。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user