Oui et non. Oui, il y a des recherches qui sont plus rapides, en moyenne, qu'une recherche de bissection. Mais je crois qu'ils sont toujours O (lg N), juste avec une constante inférieure.
Vous souhaitez réduire le temps nécessaire à la recherche de votre élément. Généralement, il est souhaitable d'utiliser moins d'étapes, et une façon d'aborder cela est de maximiser le nombre attendu d'éléments qui seront éliminés à chaque étape. Avec la bissection, toujours exactement la moitié des éléments sont éliminés. Vous pouvez faire mieux que cela, SI vous savez quelque chose sur la distribution des éléments. Mais, l'algorithme de choix de l'élément de partition est généralement plus compliqué que le choix du point central, et cette complexité supplémentaire peut submerger tout gain de temps que vous espériez obtenir en utilisant moins d'étapes. Vraiment, dans un problème comme celui-ci, il vaut mieux attaquer les effets de second ordre comme la localisation du cache, que l'algorithme de recherche. Par exemple, lorsque vous effectuez une recherche binaire répétée, les mêmes éléments (premier, deuxième et troisième quartiles) sont très fréquemment utilisés. Par conséquent, les placer dans une seule ligne de cache peut être très supérieur à l'accès aléatoire à la liste. Diviser chaque niveau en disons 4 ou 8 sections égales (au lieu de 2) et faire une recherche linéaire à travers ceux-ci pourrait également être plus rapide que la recherche de bissection, car une recherche linéaire ne nécessite pas de calculer la partition et a aussi moins les dépendances de données pouvant provoquer des caches de cache.
Mais tous ces éléments sont toujours O (lg N).
Si vous avez un ordinateur quantique, vous pouvez essayer http://en.wikipedia.org/wiki/Grover%27s_algorithm :) –
@David: La liste est triée, donc l'algorithme de Grover est pire que la recherche de bissection. O (sqrt N)> O (lg N) –
une machine d'état a travaillé un ordre de grandeur pour moi sur de grandes données, mais la complexité/mémoire pour les états de construction est beaucoup plus grande que le tri. – technosaurus