查找有向加权图的所有生成树

时间:2011-11-08 18:22:05

标签: graph directed-graph spanning-tree

到目前为止,我找到了this篇论文。它已经过时了吗?有没有更快更好的实施?

顺便说一句,维基百科说在无向图中可以有n ^ n-2个生成树。有向图中可以有多少个生成树?

2 个答案:

答案 0 :(得分:0)

如果您使用您提到的纸张中的术语,并将有向图的生成树定义为以顶点r为根的树,则具有从r到任何其他顶点的唯一路径:

很明显,当有向图具有最大数量的生成树时的最坏情况是完整图(对于任何对,存在a-> b和b->边缘)。 如果我们“忘记”关于方向,我们将得到n ^ {n-2}生成树,就像无向图一样。对于任何这种生成树,我们有n个选项来选择根,这个选项定义了唯一定义我们需要使用的边的方向。不难看出,我们得到的所有树木都是跨越的,独特的,没有其他选择。所以我们得到n ^ {n-1}个生成树。严格的证明需要时间,我希望简单的解释就足够了。

因此,在最坏的情况下,此任务将采用指数时间取决于顶点计数。考虑到输出的大小(所有生成树),我得出结论,对于任意图,算法不能显着更快更好。我认为您需要以某种方式重新表述您的原始问题,以便不处理所有生成树,并且可能仅按某些标准进行搜索。

答案 1 :(得分:0)

仅适用于无向图....

n ^ n-2跨越发辫可能只有完整的图形....找到任何图形的生成树的总数你可以应用这种方法.....

  1. 找到图表的邻接矩阵。
  2. 如果列值由'i'表示,行条目由'j'表示,则......
  3. 如果i = j ...那么该值将是顶点度
  4. 假设,在顶点v1和v2之间存在单个边,则矩阵条目的值将为-1 ...... 7如果有两个边,那么它将是-2 ...&等......
  5. 构造邻接矩阵后....排除任何行和列......即第N行和第N列....
  6. 回答将是跨越发辫的总数。