繁体   English   中英

找到MST的关键边缘:可能使用修改的Prim算法?

[英]Find critical edges of an MST: possible with modified Prim's algorithm?

我在找到“关键边缘”问题的解决方案时遇到了这个问题。 我已经解决的原始(C ++)问题是:

考虑图G =(V,E)。 查找有多少边属于所有 MST,有多少边属于任何 MST,有多少边属于某些MST,但不是全部。

让我们分别称为“绿色”,“红色”和“黄色”,以上3个案例中的边缘。

在进行了我的研究之后,我遇到了MST的所有关键边缘 ,它解决了这个问题。 一个人会运行Kruskal算法的修改版本:如果相同权重的两个或多个边连接相同的组件,从而形成一个循环,那么所有这些都是黄色边缘,即可以包含在MST中的边缘(或不包括) 。 无可争议地选择的边缘是“绿色”,在同一组件中创建循环的边缘是“红色”。 所以,原来的问题已经解决了。

上述算法的问题在于它运行在O(| E | * log | V |)中 ,这是Kruskal算法的运行时间(如果我错了请纠正我)。 我正在考虑是否也可以使用Prim的algortihm的修改版本,因为如果使用Fibonacci堆,它具有更好的摊销复杂度O(| E | + | V | log | V |)

我的感觉是这里不能使用Prim算法的修改版本,因为我们不得不根据递增的权重迭代所有边缘; 但是,我无法证明这一点。 那么,有可能进一步降低这个问题的复杂性吗?

这个问题比最小生成树的灵敏度分析问题容易,这是为了确定在最小生成树改变之前每个树/非树干边缘可以增加/减少多少重量。 用于MST灵敏度分析的最着名的算法似乎是由于Seth Pettie(2005,arXived 2014) ,其运行时间为O(| E | log alpha(| E |,| V |))。 这非常接近最优(α是反Ackermann)但仍然是超线性的。 已知几种具有线性预期运行时间的随机算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM