【问题标题】:what case Kruskal's not getting minimum?什么情况下克鲁斯卡尔没有得到最低限度?
【发布时间】:2019-03-21 14:30:45
【问题描述】:

由于 Kruskal 算法是贪心方法,这意味着我们有时可能无法获得真正的最小路径。

但是谁能给出一个例子来证明这个算法没有得到最小值?

我不是在寻找复杂性,只是需要一个确实没有得到最佳解决方案的案例。

谢谢

【问题讨论】:

  • 并非所有贪心算法都是次优的。 Kruskal 总是找到最小生成树。
  • 好像有些误会。首先,似乎有这样的印象,即贪心算法本身总是无法将其每个实例求解到最优;这不是真的。其次,似乎存在 Kruskal 算法(计算最小生成树)计算路径的假设;请澄清一下。但是,请注意,最小生成树通常不是任意两个顶点之间的最短路径树 - 这就是您的意思吗?

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


【解决方案1】:

我认为克鲁斯卡尔算法总能找到最优解。它甚至适用于具有负边成本的图。 从名为算法设计的教科书中有一个关于克鲁斯卡尔贪心算法的最优性的证明: 考虑由 Kruskal 算法添加的任何边 e = (v, w),让 S 是在添加 e 之前的时刻 v 具有路径的所有节点的集合。显然 v ∈ S,但 w ̸∈ S,因为添加 e 不会创建循环。此外,还没有遇到从 S 到 V - S 的边,因为任何这样的边都可以在不创建循环的情况下添加,因此会被 Kruskal 算法添加。因此 e 是最便宜的边,一端在 S 中,另一端在 V - S 中,因此它属于每个最小生成树。 因此,如果我们能证明 Kruskal 算法的输出 (V, T) 实际上是 G 的生成树,那么我们就完成了。显然 (V, T) 不包含循环,因为该算法被明确设计为避免创建循环。此外,如果 (V , T ) 未连接,则将存在节点 S 的非空子集(不等于所有 V),使得从 S 到 V -S 没有边。但这与算法的行为相矛盾:我们知道,由于 G 是连通的,因此在 S 和 V - S 之间至少有一条边,算法将添加它遇到的第一个边。

【讨论】:

  • OP 询问没有获得最佳解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多