数据结构找到O(N)中的m个最小元素?

时间:2014-02-28 05:43:27

标签: c performance algorithm data-structures big-o

我正在尝试编写一个算法来返回数组中最小的'm'元素,并且返回元素必须按照从最小到最大的顺序排列。

鉴于1< = m< = sqrt(n)其中n是数组的大小。

例如,如果数组为{8,1,12,83,33,53}且m为3,则应返回{1,8,12}(以任何形式)。

我可以用什么来实现O(N)中最好的通用数据结构?

我正在考虑使用Min-heap,但是我不能总是按顺序获取返回元素。

1 个答案:

答案 0 :(得分:0)

m < sqrt(n)开始,您可以按任意顺序从堆中获取元素,然后对数组进行排序。此操作的总复杂度应小于O(N)

(O(MlogM) < O(M^2) < O(N))

编辑: 构建堆将是一个O(NlogM)操作IMO,因为您必须遍历整个数组。因此,如果您认为logM非常小,那么这是一个可行的解决方案。

EDIT2:
This link by Jim Mischel提供了有关此问题解决方案的更多信息。