Я щойно прочитав Чи може цей алгоритм ще вважатися алгоритмом двійкового пошуку? і нагадав, що кілька років тому я написав індексатор / пошук файлів журналів, щоб знайти записи журналу у великих звичайних текстових файлах за вікном дати / часу.
Роблячи це, я вирішив спробувати інтерполяційний пошук (я не знав, що так називається, я якось сам наткнувся на цю ідею). Тоді я чомусь продовжував ідею чергування кроків інтерполяції з двійковими роздільними кроками: На кроці 0 я б інтерполював, щоб визначити тестову точку, а потім на кроці 1 я взяв би точну середину тощо.
Потім я порівняв систему за допомогою чистого інтерполяційного пошуку, чистого бінарного пошуку та моєї комбінації. Підхід, що чергується, був очевидним переможцем, як за часом, так і за кількістю необхідних тестів, перш ніж знайти набір випадково вибраних разів.
Надихнувшись пов'язаним питанням, я просто здійснив швидкий пошук "чергування інтерполяційного пошуку та бінарного пошуку" і нічого не знайшов. Я також спробував "хеджуваний інтерполяційний пошук", як було запропоновано в моєму коментарі до однієї з відповідей.
Я натрапив на відому річ? Чи існує якесь теоретичне обгрунтування того, що воно швидше для певних типів даних? Файли журналів зазвичай були великими для того часу (наприклад, 1-2 ГБ тексту з можливо 10 мільйонами рядків для пошуку), а розповсюдження в них дат / часів було складним із великими сплесками активності, загальними піковими і тихими часами. Мої тестові показники відібрані з рівномірного розподілу цільового часу, щоб знайти.