我只是似乎不明白这将如何工作。

问题:
给定一个顺序文件,该文件以随机顺序包含最多40亿个32位整数,请找到文件中没有的32位整数(并且必须至少缺少一个)

回答:
用代表每个整数的32位来查看此二进制搜索会很有帮助。在算法的第一遍中,我们读取(最多)40亿个输入整数,并将带有前导零位的那些整数写入一个顺序文件,并将带有前导零的那些整数写入另一个文件。

这些文件之一最多包含20亿个整数,因此我们接下来将该文件用作当前输入并重复探测过程,但这一次是在第二位。

因此,通过一遍又一遍地分割文件(二进制搜索),这实际上将如何导致我丢失32位整数?

最佳答案

每次通过之后,您的下一次通过将在您已编译的两个列表中的较小者上。

在某个时候,您必须遇到一个空列表,这将确定您的电话号码。例如,让我们只使用3位数字。

000
001
110
100
111

第一次通过后,我们有
000
001

110
100
111

然后,我们查看第一个列表中的第二个位,因为它小于(或等于)第二个。
我们将它们分成
000
001

empty list

请注意,以01开头的文件是空的,这意味着没有以01开头的数字,因此缺少010011

我们最终必须缺少列表的原因是因为我们每次都在为下一个通行证选择较小的列表。

关于algorithm - "Programming Pearls"二进制搜索帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5011589/

10-12 01:47