【发布时间】:2011-09-04 02:37:33
【问题描述】:
有一个问题,我也有解决方案。但我无法理解解决方案。请提供一些示例并提供一些经验。
问题
给定一个包含大约 3 亿个社会保险号(9 位数字)的文件,找到一个不在文件中的 9 位数字。您拥有无限的驱动器空间,但只有 2MB 的 RAM 可供使用。
回答
在第一步中,我们构建了一个 2^16 整数数组,该数组初始化为 0,对于文件中的每个数字,我们将其 16 个最高有效位索引到该数组中并递增该数字。
由于文件中的数字少于 2^32,因此数组中一定有(至少)一个数字小于 2^16。这告诉我们,在具有这些高位的可能数字中,至少缺少一个数字。
在第二遍中,我们可以只关注与此标准匹配的数字,并使用大小为 2^16 的位向量来识别缺失的数字之一。
【问题讨论】:
标签: algorithm