这是一个已解决的问题,我们必须从包含 40 亿个未排序无符号整数的文件形式的输入数据中找到缺失的整数。问题是只能使用 10 MB 的内存。
作者给出了一个解决方案,我们做 2 遍。在第一遍中,我们创建了一个一定大小的“块”数组。例如。块 0 代表0 to 999
, 1 代表1000 to 1999
,依此类推。因此,我们知道每个块中应该存在多少值。
现在我们扫描文件并计算每个块中实际存在多少值——这将导致我们找到丢失的整数。
我理解这种方法。但是,要计算适当的块大小,请从以下开始:
第一遍中的数组可以容纳 10 MB 或大约 2^23 字节的内存。
10
MB 与有何相同之处2^23
?我无法理解这个2^23
数字是从哪里来的。
16MBytes2^24
也是如此,所以他可能正在使用 10MBytes2^23
或更少的最接近的值。如果是这样,他为什么不能使用整个 10 MBytes?即为什么他必须使用 2 的幂来获得这里的大小?