prim 算法是什么?
是一种能得到树的最小生成树的算法。
对于加权图来说,它有不同的加权树,prim 算法就是为了求得它的最小权值生成树。
思路:
- 从一个顶点出发,把它加入到已访问数组中,然后在全部已访问元素中寻找下一个权值最小的顶点,把那个顶点加入到已访问数组中
- 重复上述过程,直到所有顶点都加入到了已访问数组中
把所有顶点分两部分,一种已经访问,一种尚未访问。
不断地循环:在已访问顶点中检查,它们到达临近顶点(未访问)的权值是多少,找到所有权值中最小的那个顶点(未访问),然后把它加入到已访问顶点中。
循环至所有顶点都加入到已访问顶点的数组中。
有种顺藤摸瓜的感觉,用到的是广度优先遍历,
Kruskal 算法 —— 针对边的算法
- 将所有边按照权重进行排序,从小到大
- 依次将边添加回图中,如果出现环就不添加这条边,开始选下一条
- 直到图中添加了 n - 1 条边为止
用到的是贪心算法的思想:在对问题求解的时候,每次都做「当前看起来最好」的选择。