我被告知从最大堆中删除元素的最佳案例时间复杂度为O(1)。
根据我的理解,最好的情况应该是O(logn),因为我们总是必须在删除根并将最后一个元素放在根中的堆中后进行删除。
然后问题是 - 最好的情况怎么可能是O(1)
提前致谢
答案 0 :(得分:2)
我假设你在谈论binary heap,这是一个显示最佳案例行为的简单案例。
假设所有相同元素的二进制堆。
从二进制堆中删除首先是用最后一个子进行切换,删除这个子进程,然后进行调整以确保它仍然是堆。
但是在我们的例子中,在用最后一个元素切换头之后我们仍然有root.value >= root.left.value && root.value >= root.right.value
,所以我们完成了。
对于这种情况,操作的数量是不变的(无论堆的大小如何),因此我们可以得出结论,这个案例是O(1)
,因为最好的情况不能比O(1)
更好({ {3}}),我们可以得出结论,最好的情况是O(1)
(紧束缚)。