我有一个理解Djisktra算法的复杂性的问题,并希望有人能纠正我。Dijkstra的算法 - 复杂度
对于我的例子,我拍了一个有n个顶点的完整图。
您选择一个起始顶点,让我们说a1,标记它,然后计算边上的所有n-1权重。 O(n)
你挑最小的一个。假设顶点a2并标记它。 O(n)
之后,您将计算边上的n-2个新权重并查找下一个未标记的顶点以添加标记的顶点集。
依此类推...
该算法运行直到您可以标记所有顶点。复杂性:n-1 + n-2 + ... + n - (n-1)=在O(n^2)中的Binom(n,2),而不是O(n * ln(n))想。
我读过很多次人们使用堆进行优化,但是我仍然没有看到如何避免Binom(n,2)的计算。
我必须在某些时候是错的,但看不到在哪里。
什么是n,为什么你必须在每个顶点做n次? –