Kruskal的断开图算法

时间:2014-03-07 00:11:01

标签: algorithm graph minimum-spanning-tree kruskals-algorithm

当图表有多个连通组件时,我不确定如何实现Kruskal的算法

根据我对Kruskal算法的理解,它重复地将最小边缘添加到集合中。然后,当检查所有边时,它返回最有效的边集。

但是,如果我的图表断开连接怎么办?说我有:

A - B - C - D

E - F

并说成本(A - B)=成本(E - F)= 1,其余边缘大于1

当我运行Kruskal时,我会得到所有边缘的成本,但我想获得每个连接组件的成本,所以我平均花费最小的成本超过所有连接组件。

1 个答案:

答案 0 :(得分:0)

Kruskal的算法如下:

它将添加(联合)一条边,并专门维护不交集。

听起来好像您正在为每组个连接的顶点建立一个最小生成树(这样您就可以使用这些单独的树的聚合最小加权费用),对吗?

因此,您选择Kruskal而不是Primer时是正确的(后者不会在未连接的图形上运行)。

Kruskal将在断开连接的图表上正常运行;它将为每个连接的组件找到一个最小生成树

”对于未连接的图形,Kruskal算法返回的森林为 生成树-图的每个组成部分都是一棵。” (a great paper on Spanning Trees by Michael P. Fourman— a Prof. of CS at University of Edinburgh)

或者,您可以在仅包含连接组件的每个子图中运行Prim's。

最好的运气(如果您还没有很长的时间来解决您的问题)。

Kruskal's Algorithm Pseudo-Code