Assuming the data is 32-bit unsigned integers:

Treat your memory (either amount) as an array A[] of M integers.
E.g., with 10 MB of memory, M = 2,500,000.
Initialize the array to zero.
Read through the file. For each integer x, increment A[x mod M].
There will be at least one bin whose count is no more than
4,000,000,000 / M = 1,600. Call it bin i.
Let K = maximum_unsigned_integer / M. This is the number of possible
integers mapping to each bin.
E.g., with 10 MB of memory, K = 1717.
There must be at least one unused integer in bin i.
Clear the first K elements of A[].
Read through the file. For each integer x, if x mod M = i then set A[x/
M] = 1.
Now find j such that A[j] is zero.
Then the integer j * M + i is missing from the file.

The above algorithm is suitable as long as M >=
sqrt(maximum_unsigned_integer).

Dave

On Mar 16, 4:18 pm, bittu <shashank7andr...@gmail.com> wrote:
> Given an input file with four billion integers, provide an algorithm
> to generate an integer which is not contained in the file. Assume you
> have 1 GB of memory.
>
> 2nd Part
> What if you have only 10 MB of memory?
>
> Thank
> Shashank

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to