“ Programming Pearls”二进制搜索帮助
问题内容:
我只是似乎不明白这将如何工作。
问题:
给定一个顺序文件,该文件以随机顺序包含最多40亿个32位整数,请找到文件中没有的32位整数(必须至少缺少一个)
答:
用代表每个整数的32位来查看此二进制搜索会有所帮助。在算法的第一遍中,我们读取(最多)40亿个输入整数,并将前导零位的那些整数写入一个顺序文件,并将前导零的那些整数写入另一个文件。
这些文件之一最多包含20亿个整数,因此我们接下来将该文件用作当前输入并重复探测过程,但这一次是在第二位。
因此,通过一遍又一遍地分割文件(二进制搜索),这实际上将如何导致我丢失32位整数?
问题答案:
每次通过之后,下一次通过将位于您已编译的两个列表中的较小者。
在某个时候,您必须遇到一个空列表,这将确定您的电话号码。例如,让我们只使用3位数字。
000
001
110
100
111
第一次通过后,我们有
000
001
110
100
111
然后,我们查看第一个列表中的第二个位,因为它小于(或等于)第二个。我们将它们分成
000
001
empty list
通知将启动与该文件怎么01
是空的,这意味着,有没有这样开始的数字01
,以便010
和011
失踪。
我们最终必须缺少列表的原因是因为我们每次都在为下一次通过选择较小的列表。