最有效(Big O)算法,用于在未加权有向图中找到两个节点之间的最短路径

时间:2016-10-17 09:31:33

标签: algorithm graph path big-o

我正在寻找最有效的算法,根据Big O Notation,找到未加权有向图中两个节点之间的最短路径。

我主要是在Dijkstra与堆之间分配,如果图表被加权,我通常会使用它,并且先调制口径。

图表未加权是否会使Dijkstra在这种情况下使用效率低于BFS?

2 个答案:

答案 0 :(得分:1)

根据Wikipedia

单源最短路径

  • BFS - O(V + E)
  • Dijkstra(带列表) - O(V²)
  • Dijkstra(带有修改的二进制堆) - O((E+V)logV)
  • Dijkstra(With Fibonacci Heap) - O(E + VlogV) - Fredman& Tarjan实施
  • Dijkstra(With Fibonacci Heap) - O(EloglogV) - Johnson,Karlsson和Poblete Implementation

A *的时间复杂度取决于启发式。在无界搜索空间的最坏情况下,扩展的节点数在解的深度呈指数(最短路径) d O(b d ,其中b是分支因子(每个州的平均后继数)。

选择最适合你的那个。

答案 1 :(得分:0)

在一般情况下,没有已知的算法能够胜过宽度优先搜索单一来源,单一目的地最佳最短路径(无论是指向的还是无向的)。

但是,如果您有一个特殊情况,您可以提供可接受的启发式,那么您将能够使用A *搜索实现更有效的搜索。