Kruskal的最小生成树中的交叉点

时间:2017-11-06 09:43:15

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

我发现最小生成树(MST)的某些边缘使用详细here的联合查找方法重叠,并使用float代替integer权重进行修改,使用{{1值而不是integer ID。下图中的灰线是MST边缘,绿色/蓝色边缘是形状边界。

边缘成本是节点之间的欧氏距离。

显示顶点ID的示例。边缘权重添加如下:enter image description here

代替节点87 - > 138(重量= 17.7)和55 - > 134(重量= 9.49),如果不是55 - > 138和87 - > 134?实现是错误的还是算法本身会发生这种情况?

除了顶点数之外,请忽略括号中的数字(它们是连接到每个节点的边的组合权重)。

相同示例,缩小以显示其他边缘权重(删除顶点数字以消除杂乱): enter image description here

P.S。我发现55 - >之间的距离138和87 - > 134完全相同(12.20656)。

2 个答案:

答案 0 :(得分:1)

根据AakashM提出的问题回答我自己的问题。

具体而言,这是因为边缘成本在55 - >之间。 138和87 - > 134完全一样。这种情况发生在我的情况下,因为我使用图像生成一个形状,因此点之间的距离是量化的。

受此启发,我在边缘添加了非常小的随机权重(小于像素之间的最小距离)(编辑:没有)解决了这个问题!

因此,该算法仍然适用于欧几里德MST,我的具体实现包含一个警告。

答案 1 :(得分:0)

查看第二张图片(特别是靠近顶部的未连接岛屿),看起来您正在将边缘列表修剪为不跨越形状边界的那些。

这样,边缘55- 。 138和78< - > 138不可用于Kruskal算法,并且将顶点138连接到图的其余部分的唯一边连接到顶点87.