我在维基百科(http://en.wikipedia.org/wiki/Dijkstra' s_algorithm)上编写了基于伪代码的Dijkstra算法的实现,该算法使用了具有最小堆的优先级队列。该图用邻接矩阵表示(就像伪代码一样)。当我要测试它以查看运行时间时,我认为我需要一些大图来测试,所以我随机生成了一些大小为n的图形(尽管我用来生成图形的方法可能非常糟糕) 。
现在,这个实现的复杂性是根据维基百科:O((| V | + | E |)log | V |)。
当我在V = 1000上运行算法时,例如一个有1000个节点的图形(虽然我不知道有多少个边缘),平均花了大约800毫秒。当我用V = 2000将图形的大小加倍时,它花了大约1700毫秒,当我加倍(V = 4000)时,花费了大约两倍。
所以我的问题是(我知道我的电脑也会在时间测量中发挥作用),运行时间是否应该更快?这些测量结果合理吗?
答案 0 :(得分:2)
这些测量是合理的;但是,运行时复杂性既是最坏情况又是渐近的。事实上,评估实际达到最坏情况的实例的运行时间对于实验估计运行时复杂性是最有用的。