Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph 求有向加权图的所有生成树_Graph_Directed Graph_Spanning Tree - Fatal编程技术网

Graph 求有向加权图的所有生成树

Graph 求有向加权图的所有生成树,graph,directed-graph,spanning-tree,Graph,Directed Graph,Spanning Tree,到目前为止我已经找到纸了。它过时了吗?是否有更快更好的实现 顺便说一句,维基百科说在一个无向图中可能有n^n-2个生成树。一个有向图中可以有多少棵生成树?如果您使用您提到的论文中的术语,并将有向图的生成树定义为根在顶点r上的树,从r到任何其他顶点具有唯一路径,则: 很明显,当有向图的生成树数目最多时,最坏的情况是完全图(任何一对都有a->b和b->a边)。 如果我们“忘记”方向,我们将得到n^{n-2}生成树,就像无向图一样。对于任何一个生成树,我们有n个选项来选择根,这个选项定义了我们需要使用

到目前为止我已经找到纸了。它过时了吗?是否有更快更好的实现


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

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

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


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

仅针对无向图

n^n-2生成树只对完全图是可能的…要找到任何图的生成树的总数,你可以应用这个方法

  • 求图的邻接矩阵
  • 如果列值由“i”表示,行条目由“j”表示,则
  • 如果i=j…那么该值将是顶点的阶数
  • 假设在顶点v1和v2之间有一条边,那么矩阵条目的值将是-1…7如果有两条边,那么它将是-2…&依此类推
  • 构造邻接矩阵后…排除任何行和列…即第n行和第n列
  • 答案将是跨越树的总数