Min Fibonacci堆-如何实施增键操作?

时间:2019-08-09 14:48:18

标签: algorithm data-structures heap fibonacci-heap

我一直在尝试实现堆数据结构以用于我的研究工作。作为其中的一部分,我正在尝试为最小堆实现增加键操作。我知道min-heap通常支持reduce-key。我能够为二进制最小堆编写增加密钥操作,其中,我以递归方式与最小的子交换交换增加的密钥。

对于Fibonacci堆,在this参考中,他们说Fibonacci堆还支持增加键操作。但是,我在original paper的斐波那契堆上找不到任何内容,在CLRS(Cormen算法简介)中也找不到任何内容。

有人可以告诉我如何有效地执行增加键操作,又不影响其他所有操作的数据结构摊销范围吗?

1 个答案:

答案 0 :(得分:0)

首先,请注意,如果我们希望insert和find-min像在斐波那契堆中一样保持?(1),则增量键必须为?(log?)。

如果不是,您可以通过执行?次插入来排序?(?)时间,然后重复使用find-min来获取最小值,然后使用increase在头部增加key键:?>?将头推到底。

现在,知道增加键必须是?(log?),我们可以为其提供一个简单的渐近最优实现。要将节点increase增加到值?,首先您要减小键(?,−∞),然后先删除delete-min(),再插入(?,?)。
Refer here