当前位置: 首页 > 知识库问答 >
问题:

无权有向图中两节点间最短路径的最有效(大O)算法

姬高澹
2023-03-14

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

我主要分为带堆的Dijkstra和呼吸优先搜索,如果图加权,我通常会使用堆。

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

共有2个答案

柯浩壤
2023-03-14

在一般情况下,对于未加权图中的单源、单目的最优最短路径,没有已知的算法能够优于广度优先搜索(考虑它是有向的还是无向的)。

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

李谦
2023-03-14

根据维基百科,

单源最短路径

  • BFS-O(V E)
  • Dijkstra(with List)-O(V²)
  • Dijkstra(具有修改的二进制堆)-O((E V)logV)
  • Dijkstra(与斐波那契堆)-O(E VlogV)-Fredman

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

选择一个最适合你的。

 类似资料:
  • 我需要帮助在一个未加权无向图中找到两个节点之间的所有最短路径。 我能够使用BFS找到一条最短路径,但到目前为止,我还不知道如何找到并打印出所有路径。 知道我可以使用的算法/伪代码吗?

  • 在一个加权有向图中,我需要找到两个结点s,t之间的最短路径。以下是限制: 权重可以为负值。 路径必须经过一个特定的边,让我们从节点u到V调用her e和shes。 输出路径必须简单,即我们只通过一个节点一次。 因为我希望它最短,所以我将检查在从s到u之前从v到t运行bellman ford是否比相反的方式更快(如果有节点,两个节点都使用where是放置它的最佳位置)。 谢谢你的帮助!

  • Dijkstra算法说 对于图中给定的源节点,算法找到该节点和其他节点之间的最短路径 我得到了算法来找到那个节点和其他节点之间的最短路径。但是我的问题是,如果我需要为Linkedin/facebook这样的大图找到两个特定节点(比如N1和N2)的最短路径,我需要计算该节点N1和领英上其他节点(用户,意味着十亿用户)之间的距离吗首先,将其存储在高速缓存中,然后在询问两个节点的最短距离时从高速缓存中返

  • 在无向赋权图中寻找两个顶点之间的最短路径。还已知权重是小于log(logV)的整数,其中V是顶点的数量。使用贝尔曼-福特或Dijkstra算法很容易解决,但是有没有什么算法可以更快地解决呢? 到目前为止,我一直在考虑使用BFS,将权重大于1的边划分成两个权重为1的边,但如果V是大数,就不是一个好主意。不,这不是我的家庭作业,我只是在想。