我今天遇到这个术语“单对最短路径问题”。我想知道加权图是否存在单对最短路径算法。我的推理可能有缺陷,但我想如果你想找到A和Z之间的最短路径,你绝对必须知道从A到B,C,D,...... Y的最短路径。
如果您不了解后者,则无法确定您的路径实际上是最短路径。因此,对我来说,任何最短路径算法都必须计算从图中A到每个其他顶点的最短路径,以便获得从A到Z的最短路径。
这是对的吗?
PS:如果是的话,任何研究论文都能证明这一点吗?答案 0 :(得分:4)
对于非负加权边图问题,Dijkstra本身解决了给定的问题。
来自维基的引用
该算法存在许多变体; Dijkstra的原始版本 找到了两个节点之间的最短路径,但是更常见的变种 将单个节点固定为“源”节点,并从中找到最短路径 图中所有其他节点的源,产生最短路径 树。
考虑从wiki下面的伪代码:
while
每次u
(12)的新迭代,首先选择距离剩余集合Q
(13)最短距离的顶点Q
,然后删除该顶点从u
(14)通知已达到u
的最短距离。如果SELECT cust_code, cust_fname, cust_lname
FROM lgcustomer join lginvoice USING (cust_code)
WHERE employee_id IN (83649, 83677)
GROUP BY cust_code, cust_fname, cust_lname
HAVING COUNT(DISTINCT employee_id) = 2
是您的目的地,那么您可以暂停而不考虑更多边缘。
请注意,使用了所有顶点,但并未找到所有顶点和所有顶点的最短路径。
答案 1 :(得分:1)
引用CLRS,第3版,第24章:
单对最短路径问题:找到给定顶点u和v的从u到v的最短路径。如果我们用源顶点u解决单源问题,那么我们将解决此问题也。而且,所有已知的解决此问题的算法都具有与最佳单源算法相同的最坏情况渐近运行时间