如何制定更快的算法

时间:2019-03-18 06:13:52

标签: algorithm shortest-path dijkstra

Let =(,)是具有边权重的有向图,并且是的顶点。所有边缘权重都是1到20之间的整数。设计一种算法,用于从找到最短路径。算法的运行时间应比Dijkstra的运行时间渐近加快。

我知道Dijkstra的运行时间为O(e + v log v),并尝试找到一种更快的算法。

如果所有权重均为1或仅包含0和1,则可以在有向图中使用BFS O(e + v),但是如何为边缘权重创建更快的算法是1到20之间的整数。

1 个答案:

答案 0 :(得分:4)

  1. 好吧,假设您有一条从u到v随重量变化的边 w
  2. 我们可以在节点u和v之间插入w-1个额外的节点
  3. 所以之后 修改每个边(需要O(20 * E)),我们有一个图 每个边缘都是1
  4. 在这样的图表上,我们可以使用常规的BFS,我们将有最多20 * N 新节点和20 * E个新边,因此复杂度仍为O(V + E)

enter image description here

这变成了这个:

enter image description here