【问题标题】:Algorithm to find the second best minimum spanning tree from a weighted graph从加权图中找到第二好的最小生成树的算法
【发布时间】:2017-09-14 18:14:01
【问题描述】:

我试图从加权无向图中找到跨越三个的第二好的最小值。我知道如何使用 Kruskal 算法计算 MST,我正在考虑以这种方式找到第二好的最小算法:

步骤:

  1. 对所有图边进行排序。

  2. 使用 Kruskal 计算 MST

  3. 从图中获取不在第一个MST中的最小权重边并添加到MST中(现在MST有循环了)

  4. 去除新形成的循环中的最大权重边缘

这应该是第二好的 MST 吧?

顺便说一句,我知道有一个主题指出了一种算法,该算法在每个 MST 边之间迭代并在未选择边的情况下在图上运行 Kruskal,我只是在问我的是否有效。

【问题讨论】:

  • 说出你的MST=(a,b),(b,c),(c,d),(d,e) 权重w(a,b)=w(b,c)=1w(c,d)=w(d,e)=4。假设边(a,c)(c,e) 也存在权重w(a,c)=4w(c,e)=5。您的算法将添加(a,c) 并删除权重为1 的边之一,但正确的方法是添加(c,e) 并删除权重为4 的边之一。
  • 是的,你是对的,谢谢!

标签: algorithm graph computer-science


【解决方案1】:

它不起作用。

在第 3 步之后,新添加的边可能会成为仅包含成本非常低的边的循环的一部分,因此在第 3 步和第 4 步之后,MST 的总成本会显着增加。

另一方面,该图可能包含另一条边,其成本与在步骤 3 中选择的边相似,当添加到 MST 中时,它将成为另一个循环的一部分,例如,包含成本相对较高的边。为第 3 步选择这条边,然后应用第 4 步将导致生成另一棵生成树,比所提出的算法生成的要好。

【讨论】:

  • 哦,我现在明白了.. 是的,看来我必须检查第一个 mst 的所有边缘并选择找到的最小 mst
【解决方案2】:

不,你的算法不起作用。

  1        3
 /--\  2  /--\
.    .---.    .
 \--/     \--/
  4        5

MST 是 1,2,3 => 6。

次优是 1,2,5 => 8。

您的算法将返回 2,3,4 => 9。

(我假设您的第 4 步是返回不是您刚刚添加的最大重量边缘)


这里的关键是 1 和 4 (3) 之间的差异大于 3 和 5 (2) 之间的差异,因此将 3 替换为 5 比将 1 替换为 4 导致整体成本更低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多