我试图从加权无定向图中找到第二个最佳跨度为3的最小值。我知道如何使用Kruskal算法计算MST,我正在考虑以这种方式找到第二个最佳最小算法:
步骤:
对所有图形边缘进行排序。
使用Kruskal
从不在第一个MST中的图表中获取最小权重边缘并将其添加到MST(现在MST有一个周期)
删除新成型周期中的最大重量边缘
这应该是第二好的MST吗?
顺便说一下,我知道的主题是指出一个算法在每个MST边缘之间进行迭代,并在图形上运行Kruskal而没有选择边缘,我只是问我的是否有效。
答案 0 :(得分:1)
它不起作用。
在第3步之后,新添加的边可能成为仅包含成本非常低的边的周期的一部分,因此在步骤3和4之后,MST的总成本可能会显着增加。
另一方面,图表可能包含与步骤3中选择的成本相似的另一个边缘,当在MST中添加时,该边缘将是另一个周期的一部分,例如,包含具有相对高成本的边缘。为步骤3选择此边缘,然后应用步骤4将导致另一个生成树,优于所提议算法生成的生成树。
答案 1 :(得分:1)
不,你的算法不起作用。
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替换为3会导致比用4替换1更低的总成本。