在具有N个元素的整数数组中,找到最小的k个元素?

时间:2012-08-21 14:34:03

标签: arrays algorithm numbers

  

可能重复:
  Worst-case O(n) algorithm for doing k-selection

鉴于以下问题:

In an integer array with N elements , find the minimum k elements (k << N)

您可以假设N是一个很大的数字。

我正在考虑最小堆,任何人都有更好的解决方案?

此致

3 个答案:

答案 0 :(得分:5)

如果K <&lt; N,min heap足够好,因为堆的创建是O(n),并且如果K <&lt; N选择前K个项目最多为O(N),否则您可以使用selection algorithmO(n)中找到Kth最小元素,然后选择小于找到项目的数字。 (当然,如果某些数字等于Kth元素选择直到填充K项目)。

答案 1 :(得分:0)

这个怎么样:

对数组进行排序(quicksort或heapsort非常适合整数数组),并迭代到k

答案 2 :(得分:0)

我认为你可以在O(N * log(K))中做到这一点。伪代码:

haz array[N]
haz output[k] (itz a list)

i iteratez on array with array[N] az element:
    i insertz element into output (i maintainz strict ordering)
    i removez largest element of output when output size iz bigger than k

需要:

  • 从结尾删除N列表(N * O(1))
  • 最多N个排序维护列表插入(N * O(log(listsize)))

列表的大小以K

为界

因此,O(N * log(K))时间。