设为首页 加入收藏

TOP

经典算法研究系列:二之续、彻底理解Dijkstra算法(二)
2014-11-23 21:45:59 来源: 作者: 【 】 浏览:24
Tags:经典 算法 研究 系列 彻底 理解 Dijkstra

=> O(V^2)
III、斐波那契堆:O(V*lgV + E)

当|V|<<|E|时,采用DIJKSTRA(G,w,s)+ FIB-HEAP-EXTRACT-MIN(Q),即斐波那契堆实现最小优先队列的话,
优势就体现出来了。


五、Dijkstra 算法 + FIB-HEAP-EXTRACT-MIN(H),斐波那契堆实现最小优先队列
由以上内容,我们已经知道,用斐波那契堆来实现最小优先队列,可以将运行时间提升到O(VlgV+E)。
|V|个EXTRACT-MIN 操作,每个平摊代价为O(lgV),|E|个DECREASE-KEY操作的每个平摊时间为O(1)。

下面,重点阐述DIJKSTRA(G, w, s)中,斐波那契堆实现最小优先队列的操作。

由上,我们已经知道,DIJKSTRA算法包含以下的三个步骤:
INSERT (第3行), EXTRACT-MIN (第5行), 和DECREASE-KEY(第8行的RELAX)。

先直接给出Dijkstra 算法 + FIB-HEAP-EXTRACT-MIN(H)的算法:
DIJKSTRA(G, w, s)
1 INITIALIZE-SINGLE-SOURCE(G, s)
2 S ←
3 Q ← V[G] //第3行,INSERT操作,O(1)
4 while Q ≠
5 do u ← EXTRACT-MIN(Q) //第5行,EXTRACT-MIN操作,V*lgV
6 S ← S ∪{u}
7 for each vertex v ∈ Adj[u]
8 &

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇经典算法研究系列:二、Dijkstra .. 下一篇经典算法研究系列:二之三续、Dij..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: