斐波那契堆

本文详细介绍了斐波那契堆的概念、结构和可合并堆操作,包括创建堆、插入结点、寻找最小结点、堆的合并及抽取最小结点等,并分析了相关操作的摊还时间复杂度。此外,还讨论了关键字减值和删除结点的过程,揭示了斐波那契堆在算法中的高效性能。
摘要由CSDN通过智能技术生成

斐波那契堆


作者大树先生
博客http://blog.csdn.net/koala_tree
GitHubhttps://github.com/koalatree
2017 年 09 月 13 日


自《算法导论》.

斐波那契堆有两种用途:第一种,支持一系列操作,这些操作构成了所谓的“可合并堆”。第二种,斐波那契堆的一些操作可以在常数摊还时间内完成。

可合并堆的两种实现方式下各操作的运行时间。在操作时堆中的项数用n表示。

这里写图片描述

一、斐波那契堆结构

一个斐波那契堆是一系列具有最小堆序的有根树的集合。也就是说,每棵树均遵循最小堆性质:每个结点的关键字大于或等于它的父结点的关键字。

这里写图片描述

结点属性

  • x.p:指向其父结点的指针;
  • x.child:指向其某一个孩子结点的指针;x结点所有的孩子链接成一个环形双向链表,称为孩子链表;
  • y.left、y.right:每个孩子y包含,分别指向y的左兄弟和右兄弟,若只有一个孩子,则y.left=y.right=y;
  • x.degree:结点x的孩子链表中的孩子树木;
  • x.mark:结点x自从上一次成为另一个结点的孩子后,是否失去过孩子;
  • H.min:用来访问给定的斐波那契堆,指向具有最小关键字的树的根结点,称为最小结点;
  • H.n:表示H中当前结点数目。

势函数

使用势方法来分析斐波那契堆操作的性能。

  • t(H) :表示H中跟链表中树的数目;
  • m(H) :表示H中已标记的结点数目;
  • 势函数 Φ(H)
    Φ(H)=t(H)+2m(H)

最大度数

在一个n个结点的斐波那契堆中任何结点的最大度数都有上界 D(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值