DCTLib a raison, mais oubliez les calculs une seconde.
Selon votre logique, alors, n -ary devrait être le plus rapide. Mais si vous y réfléchissez, n -ary est exactement égal à une recherche d’itération régulière (il suffit de parcourir la liste 1 par 1, mais dans l’ordre inverse). Tout d'abord, vous sélectionnez le dernier (ou l'avant-dernier) élément de la liste et comparez cette valeur à votre valeur de comparaison. Ensuite, vous supprimez cet élément de votre liste, puis choisissez le dernier élément de la nouvelle liste, qui n'est que l'avant-dernière valeur du tableau. À chaque fois, vous n'élimineriez qu'une valeur à la fois jusqu'à ce que vous trouviez votre valeur.
Au lieu de cela, vous devriez y penser comme ceci: comment puis-je éliminer le plus de valeurs de la liste à chaque itération? Dans une recherche binaire, vous éliminez toujours la moitié de la liste. Dans une recherche ternaire, il est possible (avec 33,33% de chances en réalité) d'éliminer les deux tiers de la liste, mais il est encore plus probable (66,66%) que vous n'éliminiez qu'un tiers de la liste. pour calculer O (n), vous devez regarder le pire des scénarios, qui est 1/3, inférieur à 1/2. À mesure que vous vous rapprochez de n, la situation empire encore davantage.
Non seulement le pire scénario sera amélioré avec la recherche binaire, mais votre temps moyen sera également amélioré. En regardant la valeur attendue (quelle partie de la liste pouvons-nous supprimer en moyenne), nous utilisons cette formule:
(P_lower) x (partie que nous pouvons supprimer si inférieur) + (P_higher) x (partie que nous pouvons supprimer si plus élevé) = E
Pour la recherche binaire, il s’agit de .5x.5 + .5x.5 = .5 (nous supprimons toujours la moitié de la liste). Pour les recherches ternaires, cette valeur est 0,666 x 333 + 0,333 x 666 = 0,44; à chaque étape, nous ne supprimerons probablement que 44% de la liste, ce qui la rend en moyenne moins efficace que la recherche binaire. Cette valeur culmine à 1/2 (la moitié de la liste) et diminue à mesure que vous vous rapprochez de n (itération inverse) et de 0 (itération régulière).
Ok, alors j'ai menti..il y a un peu de math impliquée, mais j'espère que ça aide!