KRUSKAL 最小生成树算法
KRUSKAL 最小生成树算法
https://labuladong.gitee.io/algo/2/20/42/
最小生成树算法:在图中找一棵包含图中的所有节点的树(无环连通图),且使得边的权重最小。
KRUSKAL 最小生成树算法:
- 将边按权重从小到大排序。
- 然后从最小权重的边开始,如果连通它的两个端点不会产生环(用并查集实现,如果它们已经是连通状态了,则连通它们会产生环),则这条边就是最小生成树的一部分;否则不使用这条边。
- 最终查看并查集的连通分量是否为 1 来判断是不是所有的节点都已被连通。
连接所有点的最小费用
https://leetcode-cn.com/problems/min-cost-to-connect-all-points/
先构造出所有可能的边以及权重(曼哈顿距离),然后按权重排序后,直接利用并查集完成。
1 |
|
复杂度
对于一副节点个数为 V
,边数为 E
的图:
空间复杂度:装载 E
条边和并查集装载的 V
个节点的空间复杂度为 O(E + V)
。
时间复杂度:主要是对 E
条边排序的复杂度,为 O(E * logE)
;并查集的合并和查找操作都是 O(1)
,操作 E
次为 O(E)
。总体复杂度为 O(E * logE)
。