【发布时间】:2011-09-06 03:50:01
【问题描述】:
在this earlier question 中,OP 询问如何在图中找到从 u 到 v 并且还通过某个节点 w 的最短路径。公认的答案非常好,是运行 Dijkstra 算法两次——一次从 u 到 w,一次从 w 到 v。这具有等于 Dijkstra 算法的两次调用的时间复杂度,即 O(m + n 记录 n)。
现在考虑一个相关问题 - 给定一系列节点 u1、u2、...、uk 和想找到从 u1 到 uk 的最短路径,使得路径经过 u1, u2, ..., uk 的顺序。显然,这可以通过运行 Dijkstra 算法的 k-1 个实例来完成,每对相邻顶点一个,然后将最短路径连接在一起。这需要时间 O(km + k n log n)。或者,您可以使用像约翰逊算法这样的全对最短路径算法来计算所有最短路径,然后在 O(mn + n2 log n) 时间内将适当的最短路径连接在一起,这很好k 远大于 n。
我的问题是,当 k 较小时,是否有一种算法可以比上述方法更快地解决这个问题。这样的算法存在吗?还是迭代的 Dijkstra 尽可能好?
【问题讨论】:
-
@SauceMaster- 这不是完全的 TSP,因为我们可以重新访问节点并且因为节点的顺序是指定的。不过谢谢!
-
@templatetypdef:同意。相似但不一样。
-
我怀疑这样的算法是否存在。也许试试 cstheory.stackexchange?
-
k不能比n大很多
标签: algorithm graph shortest-path graph-algorithm dijkstra