Очевидно, что для выполнения интерполяционного поиска вам нужен ключ определенного типа, для которого известно больше, чем упорядочение - вы должны иметь возможность выполнять вычисления на ключах для оценки вероятного расстояния, а не просто сравнивать ключи, чтобы определить, какой из них больше или меньше.
Что касается свойств набора данных, он в основном сводится к одному свойству: вероятность того, что ключи достаточно равномерно (или, по крайней мере, предсказуемо) распределены по всему диапазону возможностей. Без этого поиск с интерполяцией может фактически быть медленнее, чем бинарный поиск.
Например, рассмотрим набор данных со строками строчных букв в качестве ключей. Предположим, у вас есть ключ, который начинается с «x». Поиск по интерполяции ясно покажет, что вы должны начать поиск очень близко к концу набора. Если, однако, большинство ваших ключей на самом деле начинаются с «z», и почти ни с одним из них ничего с «a», хотя «y», то искомый ключ может фактически оказаться очень близко к началу набора. Может пройти / может пройти значительное количество итераций, прежде чем поиск приблизится к началу, где находится строка, начинающаяся с 'w'. Каждая итерация удаляет из рассмотрения только ~ 10% набора данных, поэтому потребуется несколько итераций, чтобы приблизиться к началу, где ключи начинаются с 'w'
Напротив, двоичный поиск начинается с середины , достигает отметки в одну четверть на второй итерации, на одной восьмой на третьей и т. Д. На его производительность почти не влияет перекос клавиш. Каждые итерации будут удалять половину набора данных из рассмотрения, как если бы ключи были распределены равномерно.
Однако, спешу добавить, что действительно требуется довольно искаженное распределение, чтобы сделать интерполяционный поиск заметно хуже, чем бинарный поиск. Например, он может работать довольно хорошо даже при наличии достаточного количества локализованных кластеров.
Следует также упомянуть, что при интерполяционном поиске необязательно использовать линейную интерполяцию. Например, если известно, что ваши ключи следуют некоторому нелинейному распределению (например, кривой колокола), становится довольно легко учесть это в функции интерполяции, чтобы получить результаты, немного отличающиеся от равномерного распределения.