当图形具有多个连接的组件时,我不确定如何实现Kruskal算法
根据我对Kruskal算法的理解,它反复将最小边缘添加到集合中。然后,在检查完所有边缘后,它将返回最有效的一组边缘。
但是,如果我的图表断开连接怎么办?说我有:
A - B - C - D
E - F
并且说Cost(A-B)= Cost(E-F)= 1,并且其余边缘大于1
[当我运行Kruskal时,我将获得所有边缘的成本,但是我想获得所连接组件的EACH成本,因此,我对所有所连接组件进行平均最小成本。
嗯,Kruskal的算法如下:
Kruskal's Algorithm Pseudo-Code
听起来您似乎希望为每组连接的顶点创建一个最小生成树(这样您就可以使用这些单独的树的合计,最小加权成本),对吗?” >
因此,您选择Kruskal而不是Primer时是正确的(后者不会在未连接的图形上运行)。
Kruskal将在断开连接的图上运行良好;它将为每个连接的组件
找到一个最小生成树。“对于未连接的图形,Kruskal的算法返回的森林生成树-图的每个组成部分。” (a great paper on Spanning Trees by Michael P. Fourman— a Prof. of CS at University of Edinburgh)
或者,您可以在仅包含连接的组件的每个子图中运行Prim's。
祝您好运(如果您还没很长时间就想出问题所在的话)。