arrays - 排序数组以找到前 20 个最小的数字

标签 arrays algorithm hash

<分区>

Possible Duplicate:
Algorithm to find k smallest numbers in array of n items

如何找到一个非常大的数组中的前 20 个最小元素?

最佳答案

你有两个选择

  1. 对数组进行排序,拉出小端的 20 个元素(取决于你对数组排序的方向,对吧?)
  2. 保留数组元素的有序集合(由于数组的非唯一性,可能不是集合)。添加数组中的前 20 个元素。每次您发现一个小于“好集合”中最高元素的元素时,用这个新元素替换最高元素。

第二个可能看起来更慢,但它实际上取决于数组的大小。您可以一次遍历数组来完成此操作,因此最好在 80 亿左右的数组上执行此操作。

编辑:第一个算法是O(n lg n)。第二种算法是 O(k n),这里的 k 是 20(您需要前 20 个)。因此,当 lg n > 20n > 2^20n > ~1000000 时,第二种算法更快。因此,如果您的属性(property)少于一百万,您最好进行分类。如果您的 Assets 超过一百万,您最好制作外部列表并一次性通过。

关于arrays - 排序数组以找到前 20 个最小的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7740561/

相关文章:

ios - Apple swift 2.1 中的数组升级

php - 制作所有 GET 变量的数组

c - 在广度优先搜索中确定 n 个 child 的水平

ruby - 如何使用非常大的 Ruby 哈希减少内存使用量?

php - HashMap 像名称

ruby - 如何在 Ruby 中的哈希中初始化数组

python - 在 python 中计算列表中的字符串然后过滤和匹配

c++ - 将未知大小的二维数组传递给 C++ 中的函数

javascript - 基于多条件/因素的排名算法

algorithm - 布隆过滤器用于确定族中的哪些集合是给定集合的子集