可能重复:
用于进行 k 选择的最坏情况 O(n) 算法
鉴于以下问题:
In an integer array with N elements , find the minimum k elements (k << N)
你可以假设这N
是一个很大的数字。
我正在考虑最小堆,有人有更好的解决方案吗?
问候
可能重复:
用于进行 k 选择的最坏情况 O(n) 算法
鉴于以下问题:
In an integer array with N elements , find the minimum k elements (k << N)
你可以假设这N
是一个很大的数字。
我正在考虑最小堆,有人有更好的解决方案吗?
问候
如果 K << N,min heap 就足够了,因为创建堆是 O(n),如果 K << N 选择前 K 个项目最多 O(N),否则你可以使用选择算法找到第 K 个最小元素O(n)
然后选择小于找到的项目的数字。(确定如果某些数字等于第 K 个元素,则选择直到填充K
项目)。
那这个呢:
对数组进行排序(快速排序或堆排序非常适合整数数组),然后迭代到 k
我认为你可以在 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)) 时间。