从包含10亿个整数的文件中显示前100个整数的最有效方法。内存最多可以保持100万个整数

时间:2016-04-21 08:53:20

标签: algorithm

文件中存储了10亿个整数。每个整数一行。内存可以支持一次加载100万个整数。我们需要显示100个最大的整数。

我的想法:

  1. 使用大小为100的最大堆数据结构。
  2. 从文件中取出1百万个整数并放入堆中。

2 个答案:

答案 0 :(得分:4)

为前100个元素构建 min-heap

对于每个新元素检查 - 如果它大于堆顶部,则删除顶部,插入新元素。

堆大小始终为100。 因此整体复杂度为O(N * log(100))= O(N)
(在k个最高值的常见情况下 - O(N log k))

Million用作从文件中读取的块的最大大小,然后遍历它。

答案 1 :(得分:2)

你只需要迭代一次文件:

  • 拥有前100个整数的有序列表
  • 对文件进行迭代:如果数字足够大,请将其放在前100位

修改:如果您使用排序列表并且 O(log(n))<,则在 O(n)中插入新数字<100> / strong>如果你使用堆。因此,如果进程的性能取决于插入,则使用堆是有意义的。如果它主要取决于阅读文件,那么它并不重要。