Top-K排序算法如何在MongoDB中工作

时间:2017-03-13 15:49:23

标签: mongodb algorithm sorting

基于answer和MongoDB文档,我了解MongoDB能够对大数据集进行排序,并在使用limit()时提供排序结果。 但是,当使用sort()查询相同的数据集时,会导致内存异常。

从上面帖子的第二个答案中,海报提到整个集合被扫描,排序并返回前N个结果。我想知道当我使用limit()时如何对集合进行排序。 从文档中我发现当使用limit()时它会进行Top-K排序,但是在任何地方都没有太多关于它的解释。我想看看有关Top-K Sort算法的任何参考文献。

1 个答案:

答案 0 :(得分:2)

通常,您可以使用大小为K的最小堆执行高效的top-K排序.min-heap表示到目前为止在数据集中看到的最大K元素。它还使您可以不间断地访问那些前K个元素中的最小元素。

当您扫描数据集时,如果给定元素大于最小堆中的最小元素(即迄今为止最小的顶部K中的最小元素),则将最小堆中的最小元素替换为元素并重新堆积(O(lg K))。

最后,您只需使用整个数据集的前K个元素,而不必对它们进行排序(最差情况下的运行时间为O(N lg K)),仅使用{{1记忆。

我实际上在学校里学到了这个改变: - )