2010-12-31 3 views
2

Cela peut être une question stupide, mais quelqu'un sait-il une preuve que la recherche binaire est asymptotiquement optimale? C'est-à-dire, si on nous donne une liste triée d'éléments où la seule opération permise sur ces objets est une comparaison, comment prouver que la recherche ne peut pas être faite dans o (lg n)? (C'est petit-o de lg n, soit dit en passant.) Notez que je restreins ceci aux éléments où la seule opération permise est une comparaison, car il y a des algorithmes bien connus qui peuvent battre O (lg n) en attente si vous êtes autorisé à effectuer des opérations plus complexes sur les données (voir, par exemple, une recherche par interpolation).Optimalité de la recherche binaire

+0

Est-ce ce devoir? – Bernard

+0

Vous supposez également un accès uniforme à tous les éléments? Sinon, voir http://en.wikipedia.org/wiki/Fibonacci_search_technique –

+0

@Bernard - Non, pas un devoir. J'ai mes normes. :-) C'est juste quelque chose qui me dérange depuis un moment. – templatetypedef

Répondre

4

De here:

  • Le nombre de résultats possibles devrait être d'au moins O (n).
  • Vous pouvez représenter les décisions prises par l'algorithme par les nœuds d'un «arbre de décision»: si les éléments se comparent plus grand, alors il continue, sinon ça va dans l'autre sens. Les nœuds de l'arbre sont les états de l'algorithme et les feuilles sont les résultats. Il devrait donc y avoir au moins O (n) nœuds dans l'arbre.
  • Chaque arbre sur les nœuds O (n) a au moins O (log N) niveaux.
+0

C'est très intelligent - je n'ai pas pensé à représenter l'état de l'algorithme comme un arbre. Cela a un sens parfait. Merci beaucoup! – templatetypedef

+0

@template: AFAIK optimalité de heasup/mergesort est également prouvé de manière similaire. – ybungalobill

+0

Pourrais-je suggérer un peu plus de précision: En supposant que n éléments sont distincts, il y a exactement n + 1 résultats possibles (puisque la valeur cible peut ne pas exister), donc il y a exactement n + 1 * feuilles *. Un arbre sur n + 1 * feuilles * a au moins les niveaux log2 (n + 1). Peut-être avez-vous raison de dire "Chaque arbre sur O (n) nœuds a au moins O (log n) niveaux" mais je trouve difficile de raisonner sur O() quand il est des deux côtés de l'équation comme ça ... :) –

1

La logique est simple. Supposons que nous ayons un tableau de n éléments triés différents.

  1. Il sont 2 résultats possibles de 1 comparaison (premier élément est inférieur ou supérieur). Ainsi, si une comparaison est suffisante, n <= 2. Sinon, si nous avons 3 éléments (a, b, c) et que notre algorithme a 2 résultats possibles, l'un des 3 éléments ne sera jamais sélectionné.
  2. Il y a 4 résultats possibles de 2 comparaisons. Ainsi, si 2 comparaisons sont suffisantes, n <= 4.
  3. De même, pour k les comparaisons pour être suffisamment n doivent être n <= 2^k.

Inversez la dernière inégalité et vous aurez un logarithme: k >= log(2, n).

+0

Il semble que vous prouviez la limite supérieure ici. – ybungalobill

+0

Est-ce que cela change s'il y a des éléments dupliqués? –

+0

Est-ce que cela fonctionne vraiment comme une preuve de limite inférieure? Vous avez correctement montré que vous pouvez rechercher un élément dans le temps O (lg n), mais avez-vous exclu la possibilité d'un algorithme asymptotiquement plus rapide? – templatetypedef

1

Comme décrit Nikita il est impossible d'avoir quelque chose toujours mieux que O (log n).

Même si vous avez autorisé certaines opérations supplémentaires, ce n'est pas encore suffisant - je suis sûr qu'il est possible de préparer une séquence d'éléments où la recherche par interpolation sera pire que la recherche binaire.

On peut dire la recherche d'interpolation est mieux seulement parce que:

  1. Nous considérons la performance moyenne, pas le pire des cas.
  2. La probabilité de chaque jeu de données entrant possible est non uniforme.

Donc la réponse est - tout dépend de la connaissance supplémentaire que nous avons sur les ensembles de données entrants.

+1

Avec des connaissances supplémentaires, il peut y avoir à peu près tout. Si vous triez vos éléments par probabilité, et que la probabilité est la distribution géométrique, alors même la recherche linéaire peut fonctionner en O (1) temps! Btw, c'est une bonne idée, parfois. – ybungalobill