En faisant le deuxième code kata (qui vous demande d'implémenter cinq fois un algorithme de recherche binaire, à chaque fois avec une méthode différente), j'ai trouvé une solution légèrement différente qui fonctionne comme suit:
Si j'ai un tableau trié de longueur 100 et que je vois que son champ de départ contient le nombre 200 et son champ de fin contient le nombre 400, moi, en tant qu'étudiant en mathématiques, je serais susceptible de commencer à chercher autour du champ 35 si je cherchais le numéro 270, et non le champ 50 comme dans un algorithme de recherche binaire normal.
Ensuite, si le nombre sur le champ 35 du tableau est 270, 35 est l'index que je cherchais.
Si ce n'est pas le cas, je peux comparer le nombre obtenu (disons 280) et répéter l'opération en prenant la partie inférieure du tableau (j'ai donc 35 champs avec le champ de départ contenant 200 et le champ de fin contenant 280) si le le nombre que j'ai trouvé est supérieur à ce que je recherche, ou à la partie supérieure du tableau (disons que j'en ai 260: maintenant j'ai 65 index, le premier contenant 260 et le dernier contenant 400. Orientativement, je me dirigerais vers torward index 4 de ce sous-tableau, qui est l'index 39 de l'ensemble du tableau) si le nombre que j'ai obtenu est inférieur au nombre que je recherche.
La question est: cet algorithme peut-il être considéré comme un algorithme de recherche binaire? Sinon, a-t-il son propre nom?
la source
Réponses:
Je n'appellerais pas cela une recherche binaire.
Il est clairement similaire à la recherche binaire et il est naturel de le voir comme un raffinement de la recherche binaire. Cependant, il a des caractéristiques de complexité d'algorithme significativement différentes, la recherche d'interpolation a prévu un temps d'exécution de O (log (log (n)) en supposant que les données sont uniformément distribuées, mais il paie pour cela en ayant O (n) le pire temps d'exécution.
Je préfère dire "Le pire temps d'exécution de la recherche binaire est O (log (n))" plutôt que "Selon le choix des éléments de délimitation, le pire temps d'exécution de la recherche binaire est O (log (n))". Cela signifie que je ne peux pas classer la recherche d'interpolation comme un algorithme de recherche binaire.
la source
la source
Je pense que la terminologie correcte serait une recherche réfléchie dychotomiale.
Vous recherchez dans un tableau plat avec une recherche réfléchie ultérieure basée sur la distribution plate supposée des nombres qu'il contient.
Cela correspond à la façon dont une personne rechercherait un mot dans un dictionnaire. Mais cela peut être très inefficace si la distribution des données est irrégulière.
la source