Есть один вопрос, и у меня есть решение для него. Но я не мог понять решение. Просьба помочь с некоторыми примерами и испытать некоторый опыт.
Вопрос
Если файл содержит примерно 300 миллионов номеров социального обеспечения (9-значное число), найдите 9-значный номер, которого нет в файле. У вас есть неограниченное пространство на диске, но в вашем распоряжении всего 2 МБ оперативной памяти.
Ответ
На первом этапе мы создаем массив 2 ^ 16 целых чисел, который инициализируется до 0 и для каждого числа в файле, мы берем его 16 наиболее значимых битов для индексации в этот массив и увеличиваем число.
Так как в файле меньше 2 ^ 32 номеров, то в массиве должно быть (по крайней мере) одно число, меньшее 2 ^ 16. Это говорит нам о том, что среди возможных чисел с этими верхними битами есть хотя бы одно число.
Во втором проходе мы можем сосредоточиться только на числах, соответствующих этому критерию, и использовать бит-вектор размером 2 ^ 16 для идентификации одного из недостающих чисел.