『算法设计_伪代码』斐波那契堆
一、堆结构
由一组最小堆有序树组成,每个节点有key值、四个指针(parent,child,left,right)、两个属性(是否被标记,degree)组成,堆对象有两个属性:H.min(有序树roots中最小的那个),H.n(总节点数)
任何节点的degree不大于lgn向下取整
二、势能函数
由树的个数、被标记节点数确定
三、堆操作
1、初始化
由于势能变化为0,所以平摊代价等于实际代价
2、插入操作
PPT上未显式指定左右指针值,应该包含在list操作中
这个插入操作仅仅插入新的树,代价依然是线性的
3、寻找最小节点
4、合并不同堆
合并root链表,修改堆的min和n值
5、抽取最小值
示意:
6、节点key值减小后调整
将被减小节点去mask后添加到root,根据其父节点是否mask决定是否递归向上操作
性能分析:
7、删除节点
修改为负无穷调整,抽取最小值