基本方法是使用数组或散列映射来创建数字的历史图并选择最常用的数据。
在这种情况下,我们假设文件中的所有数字都无法加载到主存储器中。
我能想到的一种方法是使用外部合并/快速排序进行排序,然后按块计算频率。当它们被排序时,我们不必担心在序列结束后再次出现的数字。
有更好更有效的方法吗?
答案 0 :(得分:2)
嗯,百万不再那么多了,所以我们假设我们谈论的是几十亿个整数。
在这种情况下,我建议您使用顶部 N 2 ^ N 存储桶(单独文件或同一文件的预分配部分) >哈希值的位。
您可以选择 N ,这样生成的存储桶很可能足够小,无法在内存中处理。
然后,您可以通过计算哈希表或类似内容中每个唯一值的出现来处理每个存储桶。
如果存储桶中有太多唯一值无法容纳在RAM中,请使用哈希的下一个 N 位重新分区,然后重试。