二进制堆是否支持reduce-key操作?

时间:2011-05-05 12:25:56

标签: data-structures priority-queue

根据http://en.wikipedia.org/wiki/Heap_%28data_structure%29#Comparison_of_theoretic_bounds_for_variants,它需要Θ(logn)(转换为O(logn))来执行减小键操作。但是,似乎没有包含带减少键操作的二进制堆实现的站点。

因此,由于Web上缺少实现,是否可以在二进制堆中执行reduce-key操作?

1 个答案:

答案 0 :(得分:10)

我想出来了:

  • 为了在O(logn)中执行减少键,我们必须事先知道相应元素的位置。哈希映射和良好的哈希函数可以保证O(1)摊销时间。每次修改后,我们都必须更新哈希映射,它需要O(logn)。
  • 在确定元素的位置之后,我们将元素向上移动,以防它的优先级高于其父元素(以类似于插入的方式),或者如果它的优先级低于其子元素(在与删除类似的方式)并更新哈希映射中修改后的元素的位置。