引论
这里的最小生成树是图论中的概念,是指在图中找到一个最小的树,这棵树包含所有的点,并且总的边的权重要最小。
这里我们说的图是指无向图。
下图所示为一个无向图的最小生成树。
下面我们看看解决这个问题的两种算法。
Prim’s algorithm
这个算法有点类似于Dijkstra algorithm。是一步一步的增长树。依次处理每一个顶点,选取最短的路径。
Prim’s algorithm也引入了Dijkstra algorithm中的Table来辅助树的生成。以上图的图为例:
这是初始化的表。
首先选择v1点,更新v2,v3,v4。
然后选择v4点,更新v3,v5,v6,v7。因为2<3,因此不更新v2.
然后选择v2点,没有需要更新的点
然后选择v3点,更新v6点
然后选择v7点,更新v6,v5点。
还剩下两个点v5,v6;且v5与v6不邻接,因此此处不需要更新,直接选中v5,v6,显示其以处理即可。
Kruskal‘s algorithm
这个算法相当容易理解,首先把图的所有顶点看做是只有根的树,然后合并树,合并的原则是选取最小的权重的边,切不能是树形成圈。如下图所示