Skip to content

Commit

Permalink
Update 01.Graph-Minimum-Spanning-Tree.md
Browse files Browse the repository at this point in the history
  • Loading branch information
itcharge committed Dec 25, 2023
1 parent 9c93e5c commit 7b76732
Showing 1 changed file with 11 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,20 @@
3. **无环图**:生成树一个无环图。
4. **边数最少**:在包含所有顶点的情况下,生成树的边数最少,其边数为顶点数减 $1$。

![](https://qcdn.itcharge.cn/images/20231211100145.png)

如上图所示,左侧图 $G$ 是包含 $v_1…v_6$ 共 $6$ 个顶点 $7$ 条边在内的有权图。右侧是图 $G$ 的两个生成树,两者都包含了 $6$ 个顶点 $5$ 条边。

> **最小生成树(Minimum Spanning Tree)**:无向连通图 G 的所有生成树中,边的权值之和最小的生成树,被称为最小生成树。
最小生成树除了包含生成树的特点之外,还具有一个特点。

1. **边的权值之和最小**:在包含所有顶点的情况下,最小生成树的边的权重之和是所有可能的生成树中最小的。

![](https://qcdn.itcharge.cn/images/20231211101937.png)

如上图所示,左侧图 $G$ 是包含 $v_1…v_6$ 共 $6$ 个顶点 $7$ 条边在内的有权图。右侧是图 $G$ 的最小生成树,包含了 $6$ 个顶点 $5$ 条边,并且所有边的权值和最小。

为了找到无向图的最小生成树,常用的算法有「Prim 算法」和「Kruskal 算法」。

- **Prim 算法**:从一个起始顶点出发,逐步选择与已经构建的树连接的最短边,直到包含所有顶点为止。
Expand All @@ -34,9 +42,9 @@
### 2.2 Prim 算法的实现步骤

1. 维护两个集合,一个是已经加入到最小生成树的顶点集合 $MST$,另一个是还未加入生成树的顶点集合
2. 选择起始顶点,将其加入到最小生成树的顶点集合 $MST$ 中。
3. 从 $MST$ 的顶点集合中选择一个顶点,然后找到连接这个顶点与 $MST$ 之间的边中权重最小的边。
1. 将图 $G$ 中所有的顶点 $V$ 分为两个顶点集合 $V_A$ 和 $V_B$。其中 $V_A$ 为已经加入到最小生成树的顶点集合,$V_B$ 是还未加入生成树的顶点集合
2. 选择起始顶点 $start$,将其加入到最小生成树的顶点集合 $V_A$ 中。
3. 从 $V_A$ 的顶点集合中选择一个顶点 $u$,然后找到连接顶点 $u$ 与 $V_B$ 之间的边中权重最小的边。
4. 让上一步中找到的顶点和边加入到 $MST$ 中,更新 $MST$ 的顶点集合和边集合。
5. 重复第 $3 \sim 4$ 步,直到 $MST$ 的顶点集合中包含了图中的所有顶点为止。

Expand Down

0 comments on commit 7b76732

Please sign in to comment.