Boruvka算法有向图的最小生成树

时间:2012-12-11 03:22:24

标签: python algorithm graph cuda breadth-first-search

Boruvka算法(http://en.wikipedia.org/wiki/Bor%C5%AFvka's_algorithm)是否仅适用于无向图?

例如,如果我们的图形结构如下所示:

node 1 -> node 2 (weight 1), node 3 (weight 1), node 4 (weight 1)

node 2 -> node 3 (weight 2)

node 3 -> node 4 (weight 2)

node 4 -> node 2 (weight 2)

然后最小生成树应该包括边缘:

1 -> 2

1 -> 3

1 -> 4

然而,Boruvka的算法将吐出

1 -> 2

2 -> 3

3 -> 4

因为,Boruvka首先查看每个单独的节点,并将从该节点传出的最短边缘添加到MST。

我知道在维基百科的文章中它说边缘权重必须是不同的,但只要从节点1出来的所有边权重都小于“外部”边权重(来自节点2-4),那么它似乎Boruvka的算法失败了。这是因为它是一个不定向的有向图吗?

3 个答案:

答案 0 :(得分:2)

  

这是因为它是一个不定向的有向图吗?

是。对于有向图,您必须考虑传入和传出边,然后算法将以相同的方式工作。最简单的方法是考虑基础无向图。

答案 1 :(得分:1)

您应该问自己的问题是“最小生成树”对有向图的意义是什么?你应该使用的算法取决于这个问题的答案。

答案 2 :(得分:1)

最小生成树仅在无向图上定义,因此将此问题考虑在内是没有意义的。可能你正在寻找别的东西,例如原始图的强连通诱导子图具有相同的顶点集和最小的边权重和。在这种情况下,您不必获取树,实际上树也被定义为无向图。解决这个问题的恕我直言算法将是计算上更难的问题。