Évidemment, pour faire une recherche par interpolation, vous avez besoin d'un type de clé pour lequel plus que la commande est connue - vous devez être en mesure de faire des calculs sur les clés pour estimer une distance probable, pas seulement comparer les clés pour déterminer laquelle est plus grande ou moindre.
En ce qui concerne les propriétés de l'ensemble de données, il s'agit principalement d'une propriété: la probabilité que les clés soient réparties de manière raisonnablement uniforme (ou du moins prévisible) dans toute la gamme des possibilités. Sans cela, une recherche par interpolation peut en fait être plus lente qu'une recherche binaire.
Par exemple, considérons un ensemble de données avec des chaînes de lettres minuscules comme clés. Supposons que vous ayez une clé qui commence par "x". Une recherche par interpolation indiquera clairement que vous devriez commencer la recherche très près de la fin de l'ensemble. Si, cependant, la plupart de vos clés commencent réellement par 'z', et quasiment aucune avec quoi que ce soit de 'a' à 'y', celle que vous recherchez peut en fait être très proche du début de l'ensemble. Cela peut / peut prendre un nombre considérable d'itérations avant que la recherche ne se rapproche du début où réside la chaîne commençant par «w». Chaque itération ne supprimerait que ~ 10% de l'ensemble de données de la prise en compte, il faudrait donc plusieurs itérations avant de se rapprocher du début où les clés commençant par «w»
En revanche, une recherche binaire commencerait au milieu, atteindrait la marque d'un quart à la deuxième itération, une huitième à la troisième, et ainsi de suite. Ses performances ne seraient presque pas affectées par l'inclinaison des touches. Chaque itération supprimerait la moitié de l'ensemble de données de la considération, comme si les clés étaient réparties uniformément.
Je m'empresse d'ajouter, cependant, qu'il faut vraiment une distribution assez asymétrique pour rendre une recherche d'interpolation sensiblement pire qu'une recherche binaire. Il peut, par exemple, fonctionner assez bien même en présence d'une bonne quantité de clustering localisé.
Je dois également mentionner qu'une recherche par interpolation n'a pas nécessairement besoin d'utiliser une interpolation linéaire. Par exemple, si vos clés sont connues pour suivre une distribution non linéaire (par exemple, une courbe en cloche), il devient assez facile de prendre cela en compte dans la fonction d'interpolation pour obtenir des résultats peu différents d'avoir une distribution uniforme.