📜  一些有趣的最短路径问题 |设置 1

📅  最后修改于: 2022-05-13 01:57:54.569000             🧑  作者: Mango

一些有趣的最短路径问题 |设置 1

问题 1:给定一个有向加权图。您还将获得从源顶点“s”到目标顶点“t”的最短路径。如果每条边的权重增加 10 个单位,修改后的图中最短路径是否保持不变?
最短路径可能会改变。原因是,从 s 到 t 的不同路径中可能有不同数量的边。例如,让最短路径的权重为 15,并且有 5 条边。假设有另一条有2条边的路径,总权重为25。最短路径的权重增加5*10,变为15 + 50。另一条路径的权重增加2*10,变为25 + 20。所以最短路径更改为权重为 45 的另一条路径。

问题2:这与上面的问题类似。当所有边的权重乘以 10 时,最短路径会改变吗?
如果我们将所有边权重乘以 10,则最短路径不会改变。原因很简单,从 s 到 t 的所有路径的权重乘以相同的数量。路径上的边数无关紧要。这就像改变重量单位。

问题 3:给定一个有向图,其中每条边的权重为 1 或 2,找到从给定源顶点 's' 到给定目标顶点 't' 的最短路径。预期时间复杂度为 O(V+E)。
如果我们应用 Dijkstra 的最短路径算法,我们可以在 O(E + VLogV) 时间内得到最短路径。如何在 O(V+E) 时间内完成?这个想法是使用 BFS 。关于 BFS 的一个重要观察是,BFS 中使用的路径在任意两个顶点之间的边数总是最少的。因此,如果所有边的权重相同,我们可以使用 BFS 找到最短路径。对于这个问题,我们可以修改图,将所有权重为 2 的边分割成两条权重为 1 的边。在修改后的图中,我们可以使用 BFS 来找到最短路径。这种方法如何 O(V+E)?在最坏的情况下,所有边的权重为 2,我们需要执行 O(E) 操作来分割所有边,因此时间复杂度变为 O(E) + O(V+E),即 O(V+E)。

问题4:  给定一个有向无环加权图,如何在 O(V+E) 时间内找到从源 s 到目标 t 的最短路径?
请参阅:有向无环图中的最短路径

更多问题有关更多问题,请参阅以下链接。
http://algs4.cs.princeton.edu/44sp/
https://www.geeksforgeeks.org/algorithms-gq/graph-shortest-paths-gq/