为什么deleteMin of heap需要O(logn)?

时间:2017-07-31 14:21:22

标签: algorithm data-structures runtime heap binary-heap

在我班级的演讲幻灯片中,我有一个堆,它有一个名为deleteMin()的方法。 它做什么,它删除堆中的最小值。它说需要O(logn)。

这是我无法理解的。 在堆结构中,最小值始终位于树的根处,因为堆执行的操作称为" Upheap"和" Downheap",如果子节点的值小于父节点,它总是将子节点与其父节点交换。这意味着树的根将始终具有最小值。我想我们可以在找到最小值和删除时获取该值,只需要O(1)。

但为什么说O(logn)?

1 个答案:

答案 0 :(得分:2)

因为如果取出顶部节点,则必须将剩余的两个堆重组为一个堆。要保留堆的属性,必须将底行中最右边的元素设置为根,然后使用O(log n)进行downheap。我认为你正在考虑一种更好的方法来实现这一目标,但上述方法是目前最快的方法。我希望这篇文章对你有所帮助!