web-dev-qa-db-fra.com

Preuve que la hauteur d'un arbre de recherche binaire équilibré est log (n)

L'algorithme de recherche binaire prend log (n) temps, car la hauteur de l'arbre (avec n nœuds) serait log (n).

Comment prouverais-tu cela?

12
Igor L.

Supposons d’abord que l’arbre est complet - il a 2 ^ N nœuds feuilles. Nous essayons de prouver que vous avez besoin de N étapes récursives pour une recherche binaire.

À chaque étape de la récursivité, vous réduisez de moitié le nombre de nœuds feuilles candidats (car notre arbre est complet). Cela signifie qu’après N opérations de moitié, il reste exactement un nœud candidat.

Comme chaque pas de récursion dans notre algorithme de recherche binaire correspond à exactement un niveau de hauteur, la hauteur est exactement N.

Généralisation à tous les arbres binaires équilibrés: Si l'arbre a moins de nœuds que 2 ^ N, nous n'avons certainement pas besoin de more halvings. Nous pourrions avoir besoin de moins ou du même montant, mais jamais plus.

9
usr

Maintenant, je ne donne pas de preuve mathématique. Essayez de comprendre le problème en utilisant log à la base 2. Log2 est le sens normal de log en informatique.

Tout d’abord, comprenez que c’est un logarithme binaire (log2n) (logarithme de la base 2). Par exemple,

  • le logarithme binaire de 1 est 0
  • le logarithme binaire de 2 est 1
  • le logarithme binaire de 3 est 1
  • le logarithme binaire de 4 est 2
  • le logarithme binaire de 5, 6, 7 est 2
  • le logarithme binaire de 8-15 est 3
  • le logarithme binaire de 16-31 est 4 et ainsi de suite.

Pour chaque hauteur, le nombre de nœuds dans un arbre entièrement équilibré est

 Nœuds de hauteur Calcul du journal 
 0 1 journal21 = 0 
 1 3 log23 = 1 
 2 7 log27 = 2 
 3 15 log215 = 3 

Considérons un arbre équilibré comprenant entre 8 et 15 nœuds (un nombre quelconque, disons 10). Ça va toujours être la hauteur 3 parce que log2 de n'importe quel nombre de 8 à 15 est 3.

Dans un arbre binaire équilibré, la taille du problème à résoudre est réduite de moitié à chaque itération. Connectez-vous ainsi2n itérations sont nécessaires pour obtenir un problème de taille 1.

J'espère que ça aide.

14
Sandesh Kobal

En supposant que nous ayons un arbre complet, nous pouvons dire qu’à la profondeur k, il y a 2k nœuds. Vous pouvez le prouver en utilisant une simple induction, en se basant sur l'intuition selon laquelle l'ajout d'un niveau supplémentaire à l'arborescence augmentera le nombre de nœuds dans l'arborescence complète du nombre de nœuds qui étaient dans le niveau précédent fois deux.

La hauteur k de l’arbre est log (N), N étant le nombre de nœuds. Cela peut être indiqué comme

bûche2(N) = k,

et cela équivaut à

N = 2k

Pour comprendre cela, voici un exemple:

16 = 24 => log2(16) = 4

La hauteur de l'arbre et le nombre de nœuds sont liés de manière exponentielle . Prendre le journal du nombre de nœuds vous permet simplement de travailler en arrière pour trouver la hauteur.

4
Elijah Tai

Il suffit de chercher la preuve rigoureuse dans Knuth, Volume 3 - Algorithmes de recherche et de tri ... Il le fait beaucoup plus rigoureusement que quiconque.

http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming

Vous pouvez le trouver dans n'importe quelle bonne bibliothèque informatique et sur les étagères de nombreux (très) vieux geeks.

0
Radiotrib