鉴于以下问题:
In an integer array with N elements , find the minimum k elements (k << N)
您可以假设N
是一个很大的数字。
我正在考虑最小堆,任何人都有更好的解决方案?
此致
答案 0 :(得分:5)
如果K <&lt; N,min heap足够好,因为堆的创建是O(n),并且如果K <&lt; N选择前K个项目最多为O(N),否则您可以使用selection algorithm在O(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
需要:
列表的大小以K
为界因此,O(N * log(K))时间。