graph-algorithm - 如果降低特定的边缘成本,判断 MST 是否会改善的简单方法?
问题描述
G
是一个在所有边上具有正成本的无向连通图。给定的是e
成本严格大于 10 的边。我们需要回答如果成本e
减少 10,MST 成本是否会提高。
我知道一个解决方案,它涉及生成一个只有边的新图cost<cost(e)-10
。这个更简单的解决方案有什么问题:取一个e
's vertices v
。找到 的最小成本边事件v
。现在降低e
成本并v
再次找到最低成本边缘事件。如果有变化,则意味着prim
会找到更好的MST,并且成本会有所提高。如果不是,则意味着 prim 将找到相同的 MST,并且成本保持不变。
这个逻辑有什么问题?
解决方案
我不认为你的解决方案是正确的。
考虑下图 G = (V, E), V = {a, b, c, d, e}, E = {ab, bc, cd, de, ae, bd} 并且各自的权重是 {5, 10 , 10, 5, 17}。
通过运行 Kruskal 或 Prim,我们发现我们的 MST 是 {ab, bc, cd, de},他的权重是 30。
现在,让我们将边 bd 的权重从 17 减少到 7,并再次检查边。
使用 G' 运行 Prim 或 Kruskal 将输出一个重 27 的 MST(实际上我们有 2 个这样的 MST {ab, bd, de, cd} 和 {ab, bd, de, bc})。
但是如果我们使用你的算法,我们会得到完全相同的树,因为当我们检查节点 b 或 d 时,边 bd 不是与这些节点中的任何一个相邻的最轻的边。
推荐阅读
- c++ - 绘制 OBJ 模型时,OpenGL 无法正确剔除面
- spring - LAST_ACCESS_TIME 列在控制器方法完成后更新
- openiddict - 自定义流程 - 委托
- android - 如何将使用 intellij Spring Framework Api (PostgreSQL) 创建的 localhost 与 Android Studio 连接?
- stm32 - STM32F4在半双工/单工模式下停用SPI的正确方法
- mongodb - 从查询 MongoDB 中获取 $_id
- metadata - 使用视频缩放时 GStreamer GstMeta 丢失
- javascript - Gatsby JS,无法在回调中创建节点
- javascript - 为国家选择数字时,将 jQuery 后面的数字放在后面
- c++ - 当我有一个虚拟方法时,构造函数被编译器删除了?