最小生成树

引论

这里的最小生成树是图论中的概念,是指在图中找到一个最小的树,这棵树包含所有的点,并且总的边的权重要最小。

这里我们说的图是指无向图。

下图所示为一个无向图的最小生成树。

SpanningTree

下面我们看看解决这个问题的两种算法。

Prim’s algorithm

这个算法有点类似于Dijkstra algorithm。是一步一步的增长树。依次处理每一个顶点,选取最短的路径。

Prim’s algorithm也引入了Dijkstra algorithm中的Table来辅助树的生成。以上图的图为例:

这是初始化的表。

SpanningTree1

首先选择v1点,更新v2,v3,v4。

SpanningTree2

然后选择v4点,更新v3,v5,v6,v7。因为2<3,因此不更新v2.

SpanningTree3

然后选择v2点,没有需要更新的点

然后选择v3点,更新v6点

SpanningTree4

然后选择v7点,更新v6,v5点。

SpanningTree5

还剩下两个点v5,v6;且v5与v6不邻接,因此此处不需要更新,直接选中v5,v6,显示其以处理即可。

SpanningTree6

Kruskal‘s algorithm

这个算法相当容易理解,首先把图的所有顶点看做是只有根的树,然后合并树,合并的原则是选取最小的权重的边,切不能是树形成圈。如下图所示

SpanningTree7

显示 Gitment 评论