小编典典

在最多包含40亿个整数的未排序数组中查找缺失的32位整数

algorithm

这是中描述的问题Programming pearls。我无法理解作者描述的二进制搜索方法。有人可以帮忙详细说明吗?谢谢。

编辑:我一般可以理解二进制搜索。我只是不明白在这种特殊情况下如何应用二进制搜索。如何确定遗漏的数字是否在某个范围内,以便我们可以选择另一个。英语不是我的母语,这是我听不懂作者的原因之一。因此,请使用普通英语:)

编辑:谢谢大家的出色回答和评论!我从解决这个问题中学到的最重要的一课是 二进制搜索不仅适用于排序数组


阅读 247

收藏
2020-07-28

共1个答案

小编典典

该网站上有更多信息。从那里引用:

“用代表每个整数的二十个位来查看这种二进制搜索会有所帮助。在算法的第一遍中,我们读取(最多)一百万个输入整数,并将前导零位的整数写入一个磁带,然后如果前一个带到另一个磁带,则这两个磁带中的一个最多包含500,000个整数,因此,我们接下来使用该磁带作为当前输入并重复探测过程,但是这次在第二个磁带上进行。包含N个元素,第一遍将读取N个整数,第二遍将读取最多N
/ 2,第三遍将读取最多N / 4,依此类推,因此总运行时间与N成正比。可以找到丢失的整数通过在磁带上分类然后扫描,但这将需要与N log
N成正比的时间。”

如您所见,这是二进制搜索算法的一种变体:将问题分为两部分,并为其中一个较小的部分解决问题。

2020-07-28