algorithm - 最短路径算法 : Dynamic Programming vs Dijkstra's algorithm

标签 algorithm time-complexity dynamic-programming dijkstra

通过使用记忆化的动态编程在有向无环图 (DAG) 上运行最短路径算法,其运行时复杂度为 O(V + E),可以验证使用以下等式:

d(s,v) = min{ d(s,u) + w(u,v) }, over all vertices u->v

现在,Dijkstra 算法还要求图是有向的。使用最小优先级队列,该算法的运行时复杂度为 O(E + V.log(V)),这显然比 DP 的内存版本慢。

根据wiki :

This is asymptotically the fastest known single-source shortest-path algorithm for arbitrary directed graphs with unbounded non-negative weights.

我在这里遗漏了什么吗?我只是无法消化这里的矛盾..

最佳答案

Dijkstra 算法不限于 DAG;它可以在任何没有负路径权重、循环或其他方式的图上运行。您最有可能提到的拓扑排序不符合您的 Wiki 引用中的“任意”子句。

关于algorithm - 最短路径算法 : Dynamic Programming vs Dijkstra's algorithm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28145491/

相关文章:

Python算法——根据对象属性从列表中挑选对象

algorithm - 跳转搜索中如何找到跳转 block 大小的最优值?

c++ - multimap 的时间复杂度问题

c++ - 如何将 O(1) 中的数组置零?

string - Kickstart 2017(apac) 模式重叠

algorithm - Uva 10364 判断是否可以使用不同长度的木棍来制作正方形

python - Eratosthenes 筛法 - X 和 N 之间的素数

algorithm - 数独多项式算法?

c - 给定 BLAST 的时间复杂度是多少?

algorithm - 将一系列旋转表盘设置为给定序列的最少步骤