algorithm - Dijkstra 算法的运行时间测量

标签 algorithm graph complexity-theory time-complexity dijkstra

我根据维基百科 (http://en.wikipedia.org/wiki/Dijkstra 's_algorithm) 上的伪代码编写了 Dijkstra 算法的实现,该算法使用带最小堆的优先级队列。该图用邻接矩阵表示(就像伪代码一样)。当我要测试它以查看运行时间时,我想我需要一些大图来测试,所以我随机生成了一些大小为 n 的图(尽管我用来生成图的方法可能很糟糕) .

现在,根据维基百科,此实现的复杂度为:O((|V|+|E|) log |V|)。

当我在 V = 1000 上运行算法时,例如一个有 1000 个节点的图(虽然我不知道有多少条边),平均需要大约 800 毫秒。当我将 V = 2000 的图形大小加倍时,大约需要 1700 毫秒,而当我将其加倍 (V = 4000) 时,大约需要两倍的时间。

所以我的问题是(我知道我的计算机也在时间测量中发挥了一定作用),运行时间不应该更快吗?这些测量是否合理?

最佳答案

这些测量是合理的;然而,运行时复杂度既是最坏情况又是渐进的。事实上,最有用的方法是评估实际达到最坏情况的实例的运行时间,以通过实验估计运行时复杂度。

关于algorithm - Dijkstra 算法的运行时间测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25527403/

相关文章:

java - 在进行广度优先搜索时,访问节点的时间重要吗?

java - 适用于 BlackBerry 的免费交互式图形和图表

python - 用户输入的输出字典不正确

performance - Java 是否将 new HashSet(someHashSet).contains() 优化为 O(1)?

java - 使用文本更改同步将一组间隔映射到 2D 文本缓冲区

python - 在Python中随机查找列表中可用位置的高效算法

algorithm - 检查一个整数是否是另一个整数的幂

algorithm - 非二叉树搜索和插入

haskell - 如何在 Haskell 中推理空间复杂度

algorithm - 二叉树等式的空间/时间复杂度