Fibonacci 堆

2484阅读 0评论2012-04-14 datao0907
分类:C/C++

     在所有的堆数据结构中,效率最高的为Fibonacci堆,插入复杂度为O(1),删除复杂度为O(lgn),Fibnacci堆中将插入的元素调整转移到删除操作中,这样就将所有的堆调整转移到同一操作上,这也是它效率最高的原因之一,而且其中用到一个小技巧,设置了一个标志位,标志该节点从上次成为孩子节点后是否有丢失的孩子,用来提高调整的效率。

Fibonacci堆的数据结构:

点击(此处)折叠或打开

  1. struct fh_root {
  2.   struct fh_node *min;
  3.   struct list root;
  4.   unsigned long num;
  5. };

  6. struct fh_node {
  7.   unsigned long fh_parent_mark;
  8.   struct list sibling;
  9.   struct list child;
  10.   struct list list; //for parent list
  11.   unsigned long value;
  12.   unsigned long degree;
  13. } __attribute__((aligned(sizeof(long))));

支持的操作主要为:

提取Fibonacci堆的最小元素:

点击(此处)折叠或打开

  1. struct fh_node *fh_extract_min(struct fh_root * root);

Fibonacci堆插入一个元素:


  1. void fh_insert(struct fh_root *root,struct fh_node *node);

删除一个元素:


  1. int fh_erase(struct fh_root *root,struct fh_node *node);

代码较多,具体详见这里:


上一篇:宏的妙用
下一篇:select 系统调用分析