2024-05-15 02:12:14 发布
网友
我一直在寻找一个实现(我正在使用networkx库),它将找到无向加权图的所有最小生成树(MST)。
我只能找到Kruskal算法和Prim算法的实现,它们都只返回一个MST。
我看过一些解决这个问题的论文(比如Representing all minimum spanning trees with applications to counting and generation),但是我的脑袋在想如何把它翻译成代码时,总有爆炸的倾向。
事实上我找不到任何语言的实现!
Ronald Rivest在Python中有一个很好的实现,mst.py
我不知道这是不是解决方案,但这是解决方案(我想说,这是蛮力的图形版本):
O(Elog(V) + V + n) for n = number of spanning trees
注意:懒洋洋的!生成所有可能的树,然后过滤结果将占用O(V^2)内存,多项式空间要求是有害的-生成树,检查其权重,如果是MST,将其添加到结果列表中,如果不是-丢弃它。 总时间复杂度:O(Elog(V) + V + n) for G(V,E) with n spanning trees
O(Elog(V) + V + n) for G(V,E) with n spanning trees
你可以在Sorensen and Janssens (2005)的作品中找到一个想法。
其思想是按递增的顺序生成STs,一旦得到ST的较大值,就停止枚举。
Ronald Rivest在Python中有一个很好的实现,mst.py
我不知道这是不是解决方案,但这是解决方案(我想说,这是蛮力的图形版本):
O(Elog(V) + V + n) for n = number of spanning trees
中完成,据我从2分钟的google了解,这可能会得到改进。注意:懒洋洋的!生成所有可能的树,然后过滤结果将占用O(V^2)内存,多项式空间要求是有害的-生成树,检查其权重,如果是MST,将其添加到结果列表中,如果不是-丢弃它。
总时间复杂度:
O(Elog(V) + V + n) for G(V,E) with n spanning trees
你可以在Sorensen and Janssens (2005)的作品中找到一个想法。
其思想是按递增的顺序生成STs,一旦得到ST的较大值,就停止枚举。
相关问题 更多 >
编程相关推荐