algorithm - 需要帮助了解如何减少斐波那契堆中的键

标签 algorithm data-structures heap fibonacci fibonacci-heap

我正在尝试了解如何实现斐波那契堆操作。鉴于我们有以下堆:

enter image description here

例如,我们如何将 35 减少到 27?由于 27 不大于 30,因此顺序未保留,因此我们必须重建堆。那么27去哪儿了呢? 5 岁以下?

最佳答案

在 Fibonacci 堆中,减少键实际上从树中删除其键减少到父键以下的任何节点。在您的情况下,该节点将作为单个节点放入根列表中。

更一般地,decrease-key 的工作原理如下:

  1. 降低键值。
  2. 如果节点的新键大于其父节点的,则停止。
  3. 如果该节点是根节点,则停止。
  4. 取消标记节点并将其从其父节点中删除。
  5. 如果父级未标记,则标记它。
  6. 如果 parent 被标记,转到(3)。

希望这对您有所帮助!

关于algorithm - 需要帮助了解如何减少斐波那契堆中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24074348/

相关文章:

java - 是否有斐波那契堆的标准 Java 实现?

algorithm - 制作您自己的通配符并识别模式以压缩您的列表

Java:如何实现子集的子集?

algorithm - 在随机数据上高效搜索索引的算法或方法有哪些?

arrays - 证明或反驳 : There is a general sorting algorithm which can sort an array of length n in O(n) if it's min-heap-ordered

c++ - boost circular_buffer 或堆排序性能

wpf - "Week of the year"算法需要改进

算法:找到一条直线的峰值

image - 深度图像压缩达到最大允许误差

algorithm - 判断一个字符串是否是另一个字符串前缀的数据结构