我正在阅读有关从 40 亿个 32 位整数系列中查找缺失数字的问题Programming Pearls
,但无法完全找到解决方案。
给定一个包含最多 40 亿个随机顺序的 32 位整数的顺序文件,找到一个不在文件中的 32 位整数。
约束:几百字节的主内存,但在磁盘上大量使用外部临时文件
所描述的解决方案是一个过程,我们使用高位分隔范围内的数字(即在第一遍中,我们将具有前导0
位的那些写入一个文件,将具有前导位的那些写入另一个文件1
。我们继续使用第二个位等。 ) 并将包含小于该范围内一半数字的一半用作新搜索范围。
我用谷歌搜索并在SO中找到了一个类似的帖子,它并没有完全回答我的问题,即如何找到确切的数字(我不明白二进制搜索如何适合单独的范围)。
@Damien_The_Unbeliever 的答案似乎是最相关的,但从我的角度来看,我认为按照这个过程我们最终会得到 2 个文件:一个范围内有 2 个数字的文件和一个有 1 个数字的文件。
通过将一个文件中的(一个)数字与其他文件中最大的数字相减,我们可以得到一个缺失的数字(不需要位掩码,我不太确定我们是否真的可以应用位掩码,因为范围在任何时候都是未知的)。
我错了吗?有人可以帮助解决这个问题吗?