【发布时间】:2022-01-22 05:43:09
【问题描述】:
当我们用时间复杂度O(1)的数组实现堆时,是否可以向堆中插入元素或从堆中删除元素?
【问题讨论】:
-
如果可以,那么您可以使用比 o(n log n) 更快的排序算法。因此,必须对键的值有额外的假设。比如限制他们的范围
标签: c time-complexity heap
当我们用时间复杂度O(1)的数组实现堆时,是否可以向堆中插入元素或从堆中删除元素?
【问题讨论】:
标签: c time-complexity heap
插入?不。如果你希望它是一个堆,你需要在插入时进行排序,所以我猜你最终还是有 log-n。
删除?可能是。如果将堆与一个映射关联,其中插入的值是映射键,映射值是插入值在堆中的位置,那么您可以在常数时间内找到元素的位置,并将其删除恒定时间
不,这是不可能的 - 至少,假设确定元素相对顺序的唯一方法是进行比较。
假设你可以这样做。然后我们可以在 O(n) 时间内对包含 n 个项目的列表进行排序,如下所示:
总的来说,这将给出一个基于 O(n) 时间比较的排序算法,这是不可能的,因为不存在这样的算法。
【讨论】: