【问题标题】:How to efficiently generate all possible spanning trees from a graph如何从图中有效地生成所有可能的生成树
【发布时间】:2014-03-02 13:54:05
【问题描述】:

首先请注意,这个问题不是询问MST,而只是all possible spanning trees

所以这finding all minimal spanning treesAll minimum spanning trees implementation相同


我只需要从图表中生成所有可能的spanning trees

我认为蛮力的方式是直的:

假设我们有V 节点和E 边。

  1. 获取图形的所有边
  2. E 边中获取V-1 的所有可能组合。
  3. 从组合中过滤掉non-spanning-tree(对于生成树,一组V-1 边内的所有节点都应该只出现一次)

但我认为面对大图时它太慢了。

我们有更好的方法吗?

【问题讨论】:

  • 实际上,在将所有边权重设置为相同值后,您链接到的算法将为您工作。权重最明显的选择是 1 或 0,但这完全无关紧要(如果有溢出问题除外)。
  • @G.Bach 您能否将您的评论转换为答案?

标签: algorithm data-structures graph tree


【解决方案1】:

将所有边的权重设置为相同的值,然后使用算法找到所有最小生成树。由于所有生成树都有|V|-1 边并且所有边权重都相等,因此所有生成树都是最小生成树。

【讨论】:

  • 我想这是一个正确的答案,但它让我想起了the joke about a mathematician boiling water,因为我所知道的每个 MST 枚举算法都会枚举安全边子图中的所有生成树。
  • @DavidEisenstat 我从来没有看过任何枚举 MST 的算法,所以只有将它作为一个黑匣子,显而易见的方法就是我的答案。不过,我确实喜欢这个笑话。不确定它是在取笑工程师还是数学家,或两者兼而有之。编辑:感谢那个网站,好久没这么笑了。
  • @DavidEisenstat 你有什么更好的主意吗?
  • @JacksonTale 我不知道枚举 MST 的算法有哪些,但考虑到 David 知道的所有算法都会枚举某个子集的所有生成树,您可能想看看那些详细信息,只需抛出将算法限制在安全边缘的限制。
  • @JacksonTale 我不知何故让我想到 David Eppstein 1995 年的论文 (citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.8848) 比实际简单。在 Knuth 的第 4 卷 TAoCP 中有一个生成生成树的算法。
【解决方案2】:

我对这个问题很感兴趣,但还没有找到真正令人满意的答案。但是,我找到了许多参考资料:TAOCP 第 4 卷第 4 卷中的 Knuth 算法 S 和 S'、paper by Sorensen and JanssensGRAYSPANSPSPANGRAYSPSPAN 的 Knuth。太糟糕了,它们都不是我可以使用的语言的实现......我想我得花一些时间编码这些......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多