码迷,mamicode.com
首页 > 其他好文 > 详细

斐波那契堆

时间:2014-09-17 23:14:12      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   使用   ar   strong   2014   sp   

斐波纳契堆(Fibonacci Heap)于 1984 年由 Michael L. Fredman 与 Robert E. Tarjan 提出,1987 年公开发表,名字来源于运行时分析所使用的斐波那契数。

斐波那契堆同二项堆(Binomial Heap)一样,也是一种可合并堆(Mergeable Heap)。与二项堆一样,斐波那契堆是由一组最小堆有序树构成,但堆中的树并不一定是二项树。与二项堆中树都是有序的不同,斐波那契堆中的树都是有根而无序的。

bubuko.com,布布扣

实际上,斐波那契堆松散地基于二项堆。如果不对斐波那契堆做任何 DECREASE-KEY 或 DELETE 操作,则堆中每棵树就和二项树一样。但是如果执行这两种操作,在一些状态下必须要破坏二项树的特征,比如DECREASE-KEY 或 DELETE 后,有的树高为 k,但是结点个数却少于 2k。这种情况下,堆中的树不是二项树。

斐波那契堆的优势是:不涉及删除元素的操作仅需要 O(1) 的平摊运行时间。

OperationBinary
Binomial
Fibonacci
Pairing
Brodal
Rank-pairing
find-min Θ(1) Θ(1) Θ(1) Θ(1) Θ(1) Θ(1)
delete-min Θ(log n) Θ(log n) O(log n)
O(log n)
O(log n) O(log n)
insert Θ(log n) Θ(1)
Θ(1) Θ(1) Θ(1) Θ(1)
decrease-key Θ(log n) Θ(log n) Θ(1)
Unknown
Θ(1) Θ(1)
merge Θ(mlog(n+m))
O(log n)
Θ(1) Θ(1) Θ(1) Θ(1)

对于斐波那契堆上的各种可合并操作,关键思想是尽可能久地将工作推后。例如,当向斐波那契堆中插入新结点或合并两个斐波那契堆时,并不去合并树,而是将这个工作留给 EXTRACT-MIN 操作。

斐波那契堆

标签:style   blog   http   io   使用   ar   strong   2014   sp   

原文地址:http://www.cnblogs.com/gaochundong/p/fibonacci_heap.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!