文件中存储了10亿个整数。每个整数一行。内存可以支持一次加载100万个整数。我们需要显示100个最大的整数。
我的想法:
答案 0 :(得分:4)
为前100个元素构建 min-heap 。
对于每个新元素检查 - 如果它大于堆顶部,则删除顶部,插入新元素。
堆大小始终为100。
因此整体复杂度为O(N * log(100))= O(N)
(在k个最高值的常见情况下 - O(N log k))
Million用作从文件中读取的块的最大大小,然后遍历它。
答案 1 :(得分:2)
你只需要迭代一次文件:
修改:如果您使用排序列表并且 O(log(n))<,则在 O(n)中插入新数字<100> / strong>如果你使用堆。因此,如果进程的性能取决于插入,则使用堆是有意义的。如果它主要取决于阅读文件,那么它并不重要。