【发布时间】:2012-11-13 13:44:48
【问题描述】:
我正在努力解决这个问题:
Gaedel 教授编写了一个程序,他声称该程序实现了 Dijkstra 算法。 该程序为 V 中的每个顶点 v 生成 v.d 和 v.π。给出一个 O.(V + E)-时间算法来检查教授程序的输出。这应该 确定 d 和 π 属性是否与某些最短路径树的属性匹配。 你可以假设所有边的权重都是非负的。
v.d 是从起始节点到 v 的最短距离。 v.π 是 v 在从起始节点到 v 的最短路径中的前任
我的想法是: 对于每个顶点 (i),将 i.d 与 (i.π).d 进行比较。如果 i 的前任有更大的 d 值,那么我们就不可能有最短路径树。
我相信这可以检查教授的输出是否不是最短路径树,但我认为它不能确认输出是最短路径树。如果没有更多信息,我想不出办法。
我走对了吗?
【问题讨论】:
-
你打算在什么时候实现这个,使用什么?运行 SPA 并查看它是否是树。它是有效的,并且是最著名的。
-
我不确定 SPA 是什么。这个问题来自于算法介绍第 3 版。我想我只需要提供一个通用的算法;我不需要指定数据结构。我提出的解决方案在 O (E + V) 中运行,因为我访问了每个顶点和边一次,但我不确定它是否正确。
-
最短路径算法。迪杰斯特拉的。最著名的算法之一。
-
Dijkstra 在 O (E + VlogV) 中运行,所以我不能使用它。它还可能生成与教授生成的不相等的最短路径树。
标签: algorithm graph computer-science dijkstra