【问题标题】:Prim's and Kruskal's algorithmPrim 和 Kruskal 算法
【发布时间】:2012-11-09 19:37:58
【问题描述】:

Prim 和 Kruskal 的算法都产生最小生成树。根据割属性,对于这些算法,树的总成本将是相同的,但是这两种算法是否有可能以相同的总成本给出不同的 MST,因为我们在面临多个选择时按字母顺序选择它.例如,我们比较 max(source,dest),对于边 A->B 和 B->C,我们比较 A->B 中的 A 和 B->C 中的 B。

谢谢

【问题讨论】:

    标签: minimum-spanning-tree prims-algorithm kruskals-algorithm


    【解决方案1】:

    假设您的比较器处理两条边的成本相等且具有相同的 max(source, dest) 字符的情况,它永远不会声明任何两条边相等。为了存在多个 MST 的可能性,图中至少两条边必须相等。因此,MST 是唯一的,Prim 算法和 Kruskal 算法都会返回相同的结果。

    另一方面,如果您的比较器声明边 A->B(成本 1)和 A->C(成本 1)相等,则算法可能会生成不同的 MST,具体取决于哪个边他们首先考虑(A->B 或 A->C)。

    【讨论】:

    • 确实,要存在多个 MST 的可能性,图中至少两条边必须相等。但是,这并不意味着如果比较器声明每个边缘都不同,则只有一个 MST。是否有数学证据表明当比较器声明每条边不同时,Prim 和 Kruskal 必然会生成相同的 MST?
    • 回答上述问题:如果图 G 具有不同的边权重,则它具有唯一的 MST。我认为这意味着无论您从 Prim's 的哪个节点开始,Kruskal's 都会获得相同的唯一 MST。
    • Assuming that your comparator handles the case where both edges are equal in cost and have the same max(source, dest) character, it will never declare any two edges equal的依据是什么? min(source, dest) 怎么样?我们也需要处理吗?
    【解决方案2】:

    一个图肯定有可能有多个 MST,只要这些 MST 的不同表示具有相同的总权重。否则,总重量较低的将是真正的 MST,而另一个将不再是 MST。

    由于 Prim 和 Kruskal 的算法有不同的步骤,在实际遍历过程中可能会选择相同权重的不同边,但仍以相同的总权重结束。

    但是,如果您添加您在问题中陈述的限制(选择字母表中第一个节点),则 Prim 和 Kruskal 的 MST 应该是相同的树,对于每个决策,即使它们是相同的重量,更喜欢 Kruskal 和 Prim 的边缘相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      相关资源
      最近更新 更多