这是问题所在。
给出加权无向连通图G.权重是不变的。任务是提出一种算法,该算法可以找到满足这两个条件的G生成树的总权重(按优先级排序):
我已经坚持了很长一段时间了。我已经为图形实现了Boruvka的MST搜索算法,现在我不确定在找到MST之后是否应该执行任何操作,或者最好修改MST搜索算法本身。
欢迎任何建议!
答案 0 :(得分:1)
这可以在O(m^2)
中天真地完成,而且O(mn)
不需要太多努力。似乎可以更快地完成它,可能像O(m log^2(n))
甚至O(m log(n))
那样只需要一点工作。
基本理念是这样的。对于任何权重k
,让MST(k)
为生成树,其中包含权重k
的最大可能边数,否则具有最小总权重。可能有多个这样的树,但它们都具有相同的总重量,因此您选择哪一个并不重要。通过使用任何MST算法并将权重MST(k)
的所有边缘视为权重k
,可以找到-Infinity
。
对于某些MST(k)
,此问题的解决方案为k
。因此,天真的解决方案是生成所有MST(k)
并选择具有最大数量的相同边缘权重然后最小总重量的那个O(m^2)
。使用Kruskal算法,您可以在O(mn)
中执行此操作,因为您只需对边进行一次排序。
首先使用原始权重找到MST,然后对每个k
,通过减少每个边缘的权重,将树修改为MST(k)
,可以将其改进为k
。权重-Infinity
到O(n)
。为减少边缘权重更新MST是O(mn)
操作,因为您只需要在相应的fundamental cycle中找到最大权重边缘。
要使用此方法比g = sns.pairplot(iris, hue="species", palette="Set2", diag_kind="kde", size=2.5)
做得更好,您必须以这样的方式预处理原始MST,以便可以更快地执行这些边缘权重减少。似乎像heavy path decomposition这样的东西应该在这里起作用,但是有一些细节需要解决。