在数组中查找K个最小值(Heap vs QuickSelect)

时间:2013-08-15 17:28:58

标签: arrays data-structures quicksort

假设我们有一个数组,我们希望找到它的K个最小值:

有两种方法:

1.使用快速选择算法(O(n)时间复杂度和O(1)空间)

2.使用最小堆数据结构(O(NlogK)时间复杂度和O(K)空间)

我想知道什么时候比另一个更受欢迎。

我猜他们都可以分发。

1 个答案:

答案 0 :(得分:1)

选中out: -

  

快速选择而不是排序或堆

     

由于对整个数据集进行排序非常慢,因此选择是有意义的   前K个项目,只排序少数'顶部'元素   在整个数据集按页面排序时对用户的印象   通过结果集。这将给出O的运行时间(k * log(k)+   n)与O(n * log(n))相反,如果K合理,则速度快得多   小(例如几百)。

     

另一种方法是使用堆并继续弹出   当我们收到N时,最小的数字同时放回一个更大的数字   数字作为流。这将与O(n * log(K))运行时间一起使用   当我们测试N时,堆保存K个元素,因此高度为log(K)   尽管预计运行时间大于   快速选择和排序组合。