给定 Cormen 书中的以下算法:
DIJKSTRA(G,w,s)
1. INITIALIZE-SINGLE-SOURCE(G,s)
2. S <-- {0}
3. Q <-- V[G]
4. while (Q != {0})
5. do u <-- extract-min(Q)
6. s <-- s U {u}
7. for each vertex v at Adj(u)
8. do RELAX(u,v,w)
RELAX (u,v,w)
if d[v] > d[u] + w(u,v)
then d[v] <-- d[u] + w(u,v)
pie(v) <--- u
我们的教授告诉我们,如果我们使用 Binary Heap,Relax 操作需要 O(log|V|),因此第 7-8 行的循环需要 O(|E|*log|V|)..(如果我们使用线性队列然后放松需要 O(1))。我已经在谷歌上搜索了一段时间,但找不到一个很好的解释。当我们使用二进制堆时,为什么松弛操作需要 O(log|V|)?很想得到一些帮助。谢谢。