Вопрос от Programming Pearls, 2-е издание:
Учитывая последовательный файл, содержащий 4 300 000 000 32-разрядных целых чисел, как найти тот, который появляется по крайней мере дважды?
Решение, представленное в книге:
Двоичный поиск находит элемент, который встречается как минимум дважды, путем рекурсивного поиска в подинтервала, который содержит более половины целых чисел. Мое оригинальное решение не гарантировало, что число целых чисел уменьшается в каждой итерации вдвое, поэтому время выполнения его худших случаев log 2 n было пропорционально n & middot; log п . Джим Сэкс уменьшил это до линейного времени, заметив, что поиск может избежать переноса слишком большого количества дубликатов.
Когда его поиск знает, что
дубликат должен быть в текущем диапазоне
из m целых чисел, он будет хранить только m + 1
целые числа на текущей рабочей ленте;
Если бы на ленту ушло больше целых чисел, его программа их отбрасывает Хотя его метод часто игнорирует входные переменные, его стратегия достаточно консервативна, чтобы обеспечить поиск хотя бы одного дубликата.
Выше содержание книги. Я не понимаю приведенные предложения. Как именно это может быть реализовано? Я имею в виду, как он может знать, что «дубликат должен быть в текущем диапазоне m целых чисел»?
Спасибо за вашу помощь!