调整MST以考虑O(1)更改边缘权重

时间:2012-10-22 05:13:14

标签: graph tree minimum-spanning-tree

G = (V,E)成为无向图。设w(e)为具有正权重的加权函数。让T成为G相对于w的最小生成树。

给定一组边S,其中SE(G)的子集,如果{{1},则将新的加权函数Q定义为Q(e) = w(e)如果e位于S,{}不在Q(e) = w(e)+100e。设计一个接受输入的算法SGT和一组wS并输出最小生成树w.r.t. |S| = 10。让它在Q时间内运行。

好的:自从我最初提出这个问题以来,我所学到的是,对MST进行分区是为了“分离”单个边缘,这会产生两个独立的组件,每个MST的顶点都在它们自己的组件中。因此,在这个问题中,S中的边缘可能会将MST分解为较小的MST(11,对吗?)。我必须找到将一个组件连接到另一个组件的最轻边缘。

我的计划是从一个顶点开始并使用BFS扩展,直到我覆盖整个这些组件。对于组件中的每个u,O(V+E)。然后,我返回并使用BFS再次覆盖组件,这次找到连接到未着色为黑色的顶点的所有边,因此不包含在组件中,并穿过现有剪切。这些边缘相对的顶点放在队列R中。一旦完成,我u.color = black,运行u = RemoveMin(R)。因为每次我覆盖一个组件时它都会被调用,所以它总体上会以O(lgE)的最大值运行,这仍然是10*O(lgE)。所以一旦我删除了你,我就在新组件上执行BFS,以便该组件中的所有u.color = black。我再次遍历所有黑色顶点,以便我可以将所有带有更新密钥的白色顶点排队到R.我做O(lgE)

所以我认为这是可行的并且是可证明的。任何人都可以建议类似的东西吗?

任何帮助,无论多么小,都会表示赞赏。

0 个答案:

没有答案