微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 ?=(?,?) 的其他生成树寻找生成树

如何解决使用 ?=(?,?) 的其他生成树寻找生成树

我在想出一个多项式时间算法来解决以下问题时遇到了麻烦:

?=(?,?)一个无向无权图,顶点为 ?。令 ?_1,?_2,...,?_??=?−1 不同的 ? 生成树。找到找到生成树的多项式时间算法
? 中的 ?=(?,?_?) 包含来自每个生成?_? 的至少一条边。

我真的很感激这方面的任何帮助!

解决方法

生成树具有 matroid 结构。因此,下面的贪心算法有效:从一个空的森林开始,对于每个输入生成树,通过任何一个不创建循环的树边扩展森林。正确性或多或少直接来自于增强特性和独立性的定义。

,

这是一个基本的解决方案。

//if the graph is given in input:
//    If any bridge exists in the graph:
//        return any spanning tree from the list of input spanning trees
    
while the size of result set is less than |V|-1:
    for every tree in the list of spanning trees:
        for every edge in the tree:
            if edge is not a part of result set:
                if adding this edge to the result set doesn't form a cycle:
                    add the edge to result set
                    break
        if size of result set is V-1:
            break
  • 生成树列表的大小
  • 生成树列表的大小> |V|-1:需要证明“上述算法返回的结果集至少包含生成树列表中所有剩余树的一条边”。我会在闲暇时尝试这个证明。

如果对于给定的图 |E|

一个有趣的例子是 |E| >= 2*(|V|-1)。如下图所示,对于一些生成树L的输入列表,假设绿色边的集合是上述算法返回的结果集。可以在不使用任何绿色边的情况下形成蓝色边的生成树。

enter image description here

刚刚发布了这个答案,以便它可以作为试图回答这个问题的人们的一些基本基础工作。否则,可能被视为蛮力解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。