在最小堆中找到第7个最小元素的时间复杂度?

时间:2016-10-13 19:03:11

标签: algorithm time-complexity

如果我们假设min heap包含重复项,我有兴趣在min heap中找到第7个最小的元素吗?

我不知道如何接近。任何人都可以提供一个想法吗?

2 个答案:

答案 0 :(得分:4)

由于第七个最小元素位于最小堆的前7个级别,因此它是前7个级别中127个元素中的第7个最小元素。由于此数字是固定的(与原始堆的大小无关),因此复杂度为O(1)。

答案 1 :(得分:1)

有一个简单的O(k * log k)算法来从堆中选择第k个最小元素:

# h = input heap
q = new min-heap()
q.insert(h.root)
for i := 1 to k - 1
    top = q.delete-min()
    q.insert(top.left)
    q.insert(top.right)
report q.top

当然,对于k = 7的情况,这是恒定的时间。如果你想要第k个最小的不同的元素,而不是总体上第k个最小的元素,那么你将需要线性时间,因为除了叶子之外,堆中的所有元素都可以相等,然后你需要找到(k-1)st最小的叶子,如果所有内部节点都具有相同的值,这在o(n)中是不可能的。