Chinaunix首页 | 论坛 | 博客
  • 博客访问: 131511
  • 博文数量: 33
  • 博客积分: 1240
  • 博客等级: 中尉
  • 技术积分: 297
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-28 18:13
文章分类

全部博文(33)

文章存档

2012年(22)

2011年(4)

2010年(7)

分类:

2012-05-26 16:17:10

原文地址:Fibonacci 堆 作者:datao0907

     在所有的堆数据结构中,效率最高的为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);

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


阅读(1709) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~