【问题标题】:Which Minimum Spanning tree algorithm to use in which situation在哪种情况下使用哪种最小生成树算法
【发布时间】:2013-01-03 16:07:41
【问题描述】:

我是最小生成树的新手,并试图找出在任何特定情况下使用哪种 MST 算法。任何人都可以在任何特定情况下提供一些示例,其中一种 MST 算法比其他算法更适合

【问题讨论】:

  • 您考虑过哪些算法?那些在维基百科上列出的?只有 Borůvka 和 Kruskal?

标签: algorithm data-structures graph graph-algorithm


【解决方案1】:

看看这个pdf

快速总结(引用页面):

“Boruvka 和 Kruskal 的算法显然是 如果应用于现实世界会更有用,而 Prim 的运行时间随着订单增长太快 在串行处理环境中使用的图形。"

“在这三种算法中,当考虑并行计算时,Boruvka 最有希望。 它在设计上是可并行化的,涉及在本地搜索最小的边,然后 在每一步之后组合生成的树。多台计算机之间的任务分工 处理节点将是 Boruvka 算法的逻辑扩展。然而,可以看出 从这篇论文中可以看出,Kruskal 的算法在串行环境中效率更高。”

【讨论】:

  • Kruskal 和 Prim 具有相同的复杂性。我会挑战你在这里给出的第一个陈述。
  • 老实说,我对 MST 的了解还不够多,无法对此进行争论。我只是找到了这篇文章并想分享。
  • @izomorphius 大哦符号忽略了常量。如果您最多可以达到 800 个节点,那么算法从 10k 节点开始获胜并不重要。
  • @JanDvorak 当然。然而,我已经多次比较了这两种算法,并相信如果你很好地实现它们,它们不会有显着差异。
  • 另一种情况请考虑这一点....适用于单源最短路径的 Dijakstra 算法也可以从许多 MST 中创建一个 MST ...这也可用于查找 MST 跨度>
【解决方案2】:

我会说最小生成树问题的两个主要解决方案在图表的表示方式上有所不同。虽然Kruskal 可以很好地与边缘列表一起使用,但Prim 的算法将更好地与邻域列表一起使用。如果让我决定图形表示,我更喜欢实现 Kruskal,因为我发现它更容易实现,但在这方面差异真的很小——所以这取决于你。

【讨论】:

  • 首先感谢您的回复....我只是想找出一个例子,当 kruskal 比 prim 更好,反之亦然..
  • @anujpradhan 如果您已经将图形存储在邻域列表或边缘列表中,您应该分别更喜欢 Prim 或 Kruskal。
  • @izmorphius 假设我得到了一个图表而不是任何其他信息,那么我们不能假设有一个排序的边列表,邻居......那么哪个?
  • 我使用 Kruskal 是因为我实现它的速度更快,但可能有人会告诉你选择 Prim。
猜你喜欢
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2016-01-06
相关资源
最近更新 更多