我正在寻找用常规堆实现的Dijsktra算法的一系列输入,其中Dijsktras的实际复杂度为Θ((e + v)logv)。
我知道如何实现Dijsktra及其工作原理,我也理解最耗时的操作是将一个顶点添加到堆中并改变顶点的距离。但是,我不确定如何找到Dijkstra最坏情况输入的图形(图形序列)。
此外,如果您有关于如何查找最坏情况复杂性的输入序列的任何一般提示,那将会有所帮助。
答案 0 :(得分:0)
让顶点从1
编号到n
,并且您想要找到从顶点1
到顶点n
的路径。让e[i][j]
为边长,连接i
和j
。最初是e[1][2] = e[2][3] = ... = e[n - 1][n] = 1
。现在我们遍历从n - 2
到1
的顶点。在i
中j
中[i + 2, n]
e[i][j] = e[i][i + 1] + e[i + 1][j] + 1
的{{1}}个O(n)
O(n ^ 2) = O(E)
O(log n)
。{/ 1}
现在我们有完整的图表。在每次迭代中,dijkstra将更新O(n log(n) + E log(n))
个顶点,因此在{{1}}中有{{1}}个动作。
所以最终的渐近线将是{{1}}