Max-Heap 中删除的最佳情况时间复杂度
Best case time complexity of deletion in Max-Heap
有人告诉我,从最大堆中删除一个元素的最佳时间复杂度是 O(1)。
据我了解,最好的情况应该是 O(logn),因为在删除根并将堆中的最后一个元素放在根之后,我们总是必须向下遍历。
那么问题是 - 最好的情况怎么可能是 O(1)
提前致谢
我假设您在谈论 binary heap,这是一个显示最佳案例行为的简单案例。
假设所有相同元素的二进制堆。
二叉堆的删除是先和最后一个child换头,把这个child去掉,然后再做调整保证还是堆
但在我们的例子中,在用最后一个元素切换头部后我们仍然有 root.value >= root.left.value && root.value >= root.right.value
,所以我们完成了。
对于这种情况,操作数是恒定的(不管堆的大小),所以我们可以得出这种情况是O(1)
,因为最好的情况不可能比O(1)
好(there is no algorithm that runs better than that, in terms of asymptotic notation),我们可以得出结论,最好的情况是O(1)
(紧束缚)。
有人告诉我,从最大堆中删除一个元素的最佳时间复杂度是 O(1)。
据我了解,最好的情况应该是 O(logn),因为在删除根并将堆中的最后一个元素放在根之后,我们总是必须向下遍历。
那么问题是 - 最好的情况怎么可能是 O(1)
提前致谢
我假设您在谈论 binary heap,这是一个显示最佳案例行为的简单案例。
假设所有相同元素的二进制堆。
二叉堆的删除是先和最后一个child换头,把这个child去掉,然后再做调整保证还是堆
但在我们的例子中,在用最后一个元素切换头部后我们仍然有 root.value >= root.left.value && root.value >= root.right.value
,所以我们完成了。
对于这种情况,操作数是恒定的(不管堆的大小),所以我们可以得出这种情况是O(1)
,因为最好的情况不可能比O(1)
好(there is no algorithm that runs better than that, in terms of asymptotic notation),我们可以得出结论,最好的情况是O(1)
(紧束缚)。