讲一个图的算法思路吧 —— 最小生成树

108 阅读1分钟

image.png

prim 算法是什么?

是一种能得到树的最小生成树的算法。

对于加权图来说,它有不同的加权树,prim 算法就是为了求得它的最小权值生成树。

思路:

  1. 从一个顶点出发,把它加入到已访问数组中,然后在全部已访问元素中寻找下一个权值最小的顶点,把那个顶点加入到已访问数组中
  2. 重复上述过程,直到所有顶点都加入到了已访问数组中

把所有顶点分两部分,一种已经访问,一种尚未访问。

不断地循环:在已访问顶点中检查,它们到达临近顶点(未访问)的权值是多少,找到所有权值中最小的那个顶点(未访问),然后把它加入到已访问顶点中。

循环至所有顶点都加入到已访问顶点的数组中。

有种顺藤摸瓜的感觉,用到的是广度优先遍历

Kruskal 算法 —— 针对边的算法

  1. 将所有边按照权重进行排序,从小到大
  2. 依次将边添加回图中,如果出现环就不添加这条边,开始选下一条
  3. 直到图中添加了 n - 1 条边为止

用到的是贪心算法的思想:在对问题求解的时候,每次都做「当前看起来最好」的选择。

参考资料

算法 | 图的最小生成树算法 - Kruskal 算法