algorithm - 检查图 S 是 G 中的最短路径树(算法 + 正确性)

标签 algorithm graph tree shortest-path correctness

G 是仅具有正权重的连通无向图。 S是最短路径树(不一定是G的SPT)。所以我要设计一个算法来检查图S是否是图G的最短路径树。

我的算法是……

在 G 和 S 上运行 Dijkstra 算法(返回图,而不是最短路径)。检查每个顶点的 dist(v) 值,如果都相同,则 S 是 G 的最短路径树。

我不知道这个算法行不行,但我觉得是合理的。如果是真的我如何证明它的正确性,如果不是,一个反例会很有帮助吗?

* 我也在 CS Exchange 上发布了这个 *

最佳答案

反证法:

假设 S 是 G 的最短路径树(具有相同的根),并且存在一个顶点 v,其中 Dijkstra 算法的 dist(v) 不等于它在 S 中的距离。

让我们检查这两个选项:

  1. Dijkstra 算法在 G 上的 dist(v) 大于它在 S 中的值。如果是这样,这意味着 Dijkstra 算法是错误的,因为到该顶点的路径更短。

    <
  2. Dijkstra 算法在 G 上的 dist(v) 小于它在 S 中的值 - 这意味着 S 不能是有效的最短路径树,因为存在到顶点 v 的更短路径,因此与我们的初始值相矛盾假设。

Q.E.D.

关于algorithm - 检查图 S 是 G 中的最短路径树(算法 + 正确性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986706/

相关文章:

html - 右对齐列表项中的背景颜色

c++ - 在输出中显示二叉树的空子节点

python - 如何过滤嵌套的 JSON 并保留匹配的分支层次结构?

algorithm - AO*算法如何实现?

algorithm - Haskell 粒子模拟 - 计算粒子的速度

algorithm - 层次聚类启发式

algorithm - 求树径的线性算法

Python 不是很随机地从对象列表中抽样

algorithm - 分而治之的数组总和的复杂性

r - 水平分解无法转换为 ggplot barplot 变量顺序