web-dev-qa-db-fra.com

Interpolation Search vs Recherche binaire

Quand devrais-je utiliser la recherche d'interpolation au lieu de la recherche binaire?

Par exemple, j'ai un jeu de données trié, dans quelles situations utiliserais-je une recherche binaire pour trouver un élément de cet ensemble de données ou dans quelle situation devrais-je utiliser la recherche d'interpolation?

Quelles propriétés de l'ensemble de données serait le facteur déterminant?

13
Malfist

Il est évident que, pour faire une recherche d'interpolation, vous avez besoin un certain type de clé pour laquelle plus de commande est connu - vous devez être en mesure de faire des calculs sur les clés pour estimer une distance probable, non seulement comparer les clés pour déterminer qui est plus ou moindre.

En ce qui concerne les propriétés de déplacement d'ensemble de données, il est la plupart du temps à une propriété: la probabilité que les clés sont raisonnablement uniformément (ou tout au moins on pouvait s'y attendre) répartis dans toute la gamme de possibilités. Sans cela, une recherche d'interpolation peut effectivement être plus lent 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 avez une clé qui commence par " x ". Une recherche d'interpolation indique clairement que vous devriez commencer à chercher très proche de la fin de l'ensemble. Si, par contre, plus de vos clés réellement commencer avec " z ", et presque rien avec quoi que ce soit de " a " si " y ", celui que vous recherchez a effectivement être très proche de la à partir de l'ensemble à la place. Il peut/peut prendre un certain nombre d'itérations avant que la recherche se rapproche du début où la chaîne commençant par " w " résident. Chaque itération supprimerait 10% seulement de l'ensemble des données de l'examen, il faudrait plusieurs itérations avant qu'il ne soit plus près du début où les clés commençant par " w " résident effectivement.

En revanche, une recherche binaire serait début au milieu, arriver à la marque un quart à la deuxième itération, marque un huitième sur la troisième, et ainsi de suite. Sa performance serait presque pas affectée par le biais des touches. Chaque itérations supprimerait la moitié de l'ensemble de données de l'examen, comme si les clés étaient également distribués.

Je me hâte d'ajouter, cependant, qu'il faut vraiment tout à fait une distribution asymétrique pour faire une interpolation de recherche nettement pire qu'une recherche binaire. Il peut, par exemple, effectuer très bien même en présence d'une quantité juste de regroupement localisé.

Je dois aussi mentionner qu'une recherche d'interpolation ne doit pas nécessairement utiliser une interpolation linéaire. Par exemple, si vos clés sont connus pour suivre une distribution non linéaire (par exemple, une courbe en cloche), il devient assez facile de tenir compte dans la fonction d'interpolation pour obtenir des résultats peu différent d'avoir une distribution uniforme.

12
Jerry Coffin

Je pensais probablement que la question est la suivante: comment pouvez-vous trouver une fonction d'interpolation qui fait réellement mieux que la recherche binaire.

de Wikipedia sur la recherche d'interpolation :

Utilisation de la notation Big-O, la performance de l'algorithme d'interpolation sur un ensemble de données de taille n est O (n); Toutefois, sous l'hypothèse d'une distribution uniforme des données sur l'échelle linéaire utilisée pour l'interpolation, les performances peuvent être montrées à O (journal de journal n).

Les performances pratiques de la recherche d'interpolation dépendent de savoir si le nombre réduit de sondes est compensé par les calculs les plus compliqués nécessaires à chaque sonde. Il peut être utile de localiser un enregistrement dans un fichier de grand tri sur disque, où chaque sonde implique une recherche de disque et est beaucoup plus lente que l'arithmétique d'interpolation.

Les structures d'index tels que les arbres B réduisent également le nombre d'accès disques et sont plus souvent utilisés pour indexer des données sur disque en partie car ils peuvent indiquer de nombreux types de données et peuvent être mis à jour en ligne. Néanmoins, la recherche d'interpolation peut être utile lorsque l'on est obligé de rechercher certains jeux de données sur disque triés mais non indemnisés.

1
JB King

Les recherches de recherche binaire et d'interpolation sont à la fois considérées comme des méthodes de recherche linéaire.

Ils s'attendent tous deux que la liste recherchée soit triée sur la colonne indiquée sous la clé . C'est très important.

La recherche binaire fonctionne pour des chaînes ou des chiffres tant qu'ils sont stockés dans l'ordre trié. L'idée principale de la recherche binaire est qu'elle est basée sur l'examen de l'élément du milieu. La recherche d'interpolation est une variante. Au lieu d'utiliser l'élément moyen exact, il devine où l'élément suivant à comparer avec la valeur passée est. Voir la référence fournie par JB King Réponse ou celle ci-dessous dans cette réponse pour plus de détails sur la manière dont l'algorithme de recherche d'interpolation calcule la valeur clé suivante.

"La recherche d'interpolation ne fonctionne que sur des éléments numériques disposés dans des tableaux de tri en ordre de distribution uniforme (c'est-à-dire que l'intervalle entre tous les éléments successifs est grossièrement constant" (citation de la référence ci-dessous P 737, également une comparaison de performance entre différentes méthodes de recherche linéaire sont incluses. ).

Google Books - Structures de données classiques 2nd ed.

0
NoChance