算法导论期末复习(斐波那契堆)

本文深入解析了斐波那契堆的结构,包括无序二项树的特点,以及节点的属性。详细介绍了斐波那契堆的关键操作,如创建、插入、合并、查找最小节点和抽取最小节点,并分析了操作的平摊代价。同时,讨论了关键字减值与删除操作的实现和代价分析。最后,提到了最大度数的界及其相关引理。
摘要由CSDN通过智能技术生成

斐波那契堆

1、斐波那契堆结构

斐波那契堆是由一组最小有序树构成的—无序二项树
其中有序对应的是,父母节点都比孩子节点小。无序是兄弟结点之间并没有先后顺序之分。

与二项堆类似每个斐波那契堆中的结点 x x x 都有以下结构:

1.父节点指针p[x]。如果结点为堆中无序树的根节点则p[x]=nil。

2.指向任意一个孩子结点的指针child[x]。

3.左右兄弟结点left[x],right[x]。如果没有左右兄弟,则left[x]=right[x]=nil。并且最右边孩子结点的right[x]=树中第一个节点。

4.记录孩子结点个数的域degree[x]

5.标记结点mark[x]。如果该节点成为另一个节点的孩子结点后,失去了结点,则该节点标记为true。

6.min[H],指向斐波那契堆 H 中的最小值所在结点的指针。

具体实例可看下图:
在这里插入图片描述
此外还需要了解表示斐波那契堆属性的符号:

  1. t(H) 根表中树的个数(根表存储堆中无序树的根节点)。

  2. n(H) 堆中结点的个数

  3. m(H) 表示堆中被标记结点的个数

  4. D(n)表示根表中根结点结点的最大度数的上界 (斐波那契堆中D(n)= l g n lgn lgn

由上面所描述,我们定义斐波那契堆的势函数为:

f ( H ) = t ( H ) + m ( H ) f(H)= t(H) + m(H) f(H)=t(H)+m(H)

当H=0时,该势函数显然成立。

2、斐波那契堆的操作

1)可合并堆的操作

①.、创建斐波那契堆

创建一个空的斐波那契堆。所有参数都为空。

②、插入节点

如果该节点已被分配,直接将该节点插入根表中。比较和min(H)的大小,确定min(H)的值。
操作的平摊代价分析:O(1)

③、寻找最小结点

min(H)

④、合并两个斐波那契堆

简单的将两个斐波那契堆的根表合并。由势函数的定义可知道,堆势

⑤、抽取最小节点

过程描述:
由于是最小结点一定在树的根节点,所以将最小结点的孩子结点都加入到根节点,抽取最小结点 x 。将min(H)=right(x) , 然后

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值