使用d-ary堆实现Dijkstra的算法

时间:2012-12-06 21:04:28

标签: complexity-theory time-complexity dijkstra asymptotic-complexity

正如您在此链接中所看到的:http://en.wikipedia.org/wiki/D-ary_heap#Applications 它在维基百科中说d的最佳选择是d = m / n(它导致总时间复杂度为O(m logm / n n))

在我看来,这种猜测是凭空消失的。是否有一种简单的方法可以证明(甚至解释)这确实是最佳的d?

提前致谢

1 个答案:

答案 0 :(得分:3)

根据解释本身,您可以推断出您有n个删除最小操作,每个操作都需要O(d log(n)/log(d)),并且m减少O(log(n)/log(d))的优先级操作。然后合并后的工作是(m*log(n)+n*d*log(n))/log(d)

如果填写建议的d值,则全局行为与O(m*log(n)/log(d))一致。如果您采用任何其他d,其中一个术语比平均值更大,导致复杂性增加。