Programming Pearls 2nd Editionという本から、コラム2のセクション2.1の質問Aを引用します
ランダムな順序で最大 40 億の整数を含むシーケンシャル ファイルが与えられた場合、ファイルにない 32 ビット整数を見つけます (少なくとも 1 つ欠落している必要があります - なぜですか?)。十分な量のメイン メモリを使用して、この問題をどのように解決しますか? いくつかの外部「スクラッチ」ファイルを使用できるが、メインメモリは数百バイトしか使用できない場合、どのように解決しますか?
問題文には、「最大で」40 億個の整数があると書かれています。したがって、1 つの有効な入力が 100 から 299 の範囲にあり、1 つの数値が欠落している可能性があります。この問題ステートメントの理解が正しければ、この問題に必要な入力は、数字を含むファイルと、ファイル内の数字の範囲、つまり 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)