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

标签 mongodb algorithm sorting

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

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

最佳答案

一般来说,您可以使用大小为 K 的最小堆进行高效的 top-K 排序。最小堆表示迄今为止在数据集中看到的最大 K 个元素。它还让您可以恒定时间访问那些前 K 个元素中的最小元素。

当您扫描数据集时,如果给定元素大于最小堆中的最小元素(即到目前为止最大的前 K 个元素中的最小元素),您将最小堆中的最小元素替换为该元素元素并重新堆化 (O(lg K))。

最后,您只剩下整个数据集中的前 K 个元素,而不必对它们全部进行排序(最坏情况下的运行时间是 O(N lg K)) ,仅使用 Θ(K) 内存。

我实际上是在学校学到这个的:-)

关于mongodb - Top-K排序算法在MongoDB中是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42767899/

相关文章:

javascript - 使用 Node.js 框架使用 JavaScript 将数据从 Mongodb 传递到 HTML 表

node.js - 如何在nodejs中处理对API的并发访问

ruby-on-rails - Rails 环境中的 CQRS?

algorithm - 这个算法的运行时间是log n吗?

java - MongoDB中不区分大小写的排序

python - 使用 sort_index() 时的关键函数

arrays - 对数组进行排序,使元素 a[i]-a[i+1]<=a[i+1]-a[i+2] 的差值

javascript - 在 Meteor 中填充子文档

javascript - 在 Android 应用程序的谷歌地图上放置数千个图钉

algorithm - 什么是 Naur 文本处理