摘自《Programming Pearls 2nd Edition》一书,引用第 2 列第 2.1 节中的问题 A
给定一个包含最多 40 亿个随机整数的顺序文件,找到一个不在文件中的 32 位整数(并且必须至少缺少一个 - 为什么?)。你将如何用大量的主存来解决这个问题?如果您可以使用几个外部“临时”文件但只有几百字节的主存储器,您将如何解决它?
问题陈述说“最多”四十亿个整数。因此,一个有效输入可能在 100 - 299 范围内,但缺少一个数字。如果对问题陈述的这种理解是正确的,那么这个问题所需的输入是包含数字的文件以及文件中数字的范围,即:i 到 n。
对于这个问题,以下 O(n) 解决方案不是比书中给出的解决方案(来自 Ed Reingold)更直观吗?还是我错过了什么?
假设给定的范围是 i...n
using the forumla (n * (n + 1) / 2)
x = the sum of numbers from 1 to i-1
y = the sum of numbers from 1 to n
walk through the input and get a sum of the numbers (value z)
missing number = (y - x - z)