Pourquoi la hauteur minimale d'un arbre binaire ?


10

Dans ma classe Java, nous apprenons la complexité de différents types de collections.

Bientôt, nous discuterons des arbres binaires, que j'ai lus. Le livre déclare que la hauteur minimale d'un arbre binaire est , mais n'offre aucune explication supplémentaire.Journal2(n+1)-1

Quelqu'un peut-il expliquer pourquoi?


Réponses:


11

Un arbre binaire a 1 ou 2 enfants aux nœuds non foliaires et 0 nœud aux nœuds foliaires. Soit nœuds dans un arbre et nous devons les disposer de telle manière qu'ils forment toujours un arbre binaire valide.n

Sans prouver, j'affirme que pour maximiser la hauteur, les nœuds donnés doivent être disposés de façon linéaire, c'est-à-dire que chaque nœud non-feuille doit avoir un seul enfant:

                              O 1
                              |
                              O 2
                              |
                              O 3
                              |
                              O 4
                              |
                              O 5
                              |
                              O 6
                              |
                              O 7
                              |
                              O 8

Ici, la formule pour calculer la relation de hauteur en termes de nombre de nœuds est simple. Si est la hauteur de l'arbre, alors .h = n - 1hh=n-1

Maintenant, si nous essayons de construire un arbre binaire de nœuds avec une hauteur minimale (toujours réductible à un arbre binaire complet), nous devons emballer autant de nœuds que possible dans les niveaux supérieurs, avant de passer au niveau suivant. Ainsi, l'arbre prend la forme de l'arbre suivant:n

                              O
                              |1
                              |
                       O------+-----O
                       |2           |3
                       |            |
                   O---+---O    O---+----O
                   |4      |5    6        7
                   |       |
               O---+--O    O
                8      9    10

Commençons par un cas particulier, .n=2m-1

Nous savons que,

20+21+22+...+2m-1=2m-1

De plus, il est facile de prouver qu'un niveau peut contenir au maximum nœuds.2 ije2je

En utilisant ce résultat dans la somme ci-dessus, nous constatons que pour chaque niveau , de à , il existe un terme correspondant dans l'expansion de . Cela implique qu'un arbre binaire complet nœuds est complètement rempli et a une hauteur, , où hauteur d'un arbre binaire complet avec nœuds.0 m 2 i - 1 2 m - 1 2 m - 1 h ( 2 m - 1 ) = m - 1 h ( n ) = nje0m2je-12m-12m-1h(2m-1)=m-1h(n)=n

En utilisant ce résultat, , car l'arbre avec nœuds est complètement rempli et donc un arbre avec nœuds doit accueillir le nœud supplémentaire au niveau suivant , augmentant la hauteur de 1 de à .2 m - 1 ( 2 m - 1 ) + 1 = 2 m m m - 1 mh(2m)=m2m-1(2m-1)+1=2mmm-1m

Jusqu'à présent, nous avons prouvé, ainsi que,h ( 2 m + 1 ) = m + 1 h ( 2 m + 1 - 1 ) = m

h(2m)=m,
h(2m+1)=m+1
h(2m+1-1)=m

Ainsi, m h ( n ) < m + 1nZ,2mn<2m+1

mh(n)<m+1

Mais, en prenant log (base 2) des deux côtés, m = log 2 ( n )

mJournal2(n)<m+1
m=Journal2(n)

Ainsi,h ( n ) = m = log 2 ( n ) n,n[2m,2m+1)

h(n)=m=Journal2(n)

Et nous pouvons généraliser ce résultat utilisant l'induction.nZ

PS: Le livre qui indique la hauteur d'un arbre binaire complet comme n'est pas valide pour tous car donnerait des valeurs non intégrales pour la plupart des entiers (c'est-à-dire pour tous sauf parfait) arbres binaires), mais la hauteur d'un arbre est purement intégrale.Journal2(n+1)-1nJournal2(n)n


18

Je suppose que par , vous voulez dire le nombre total de nœuds dans l'arbre binaire. La hauteur (ou la profondeur) d'un arbre binaire est la longueur du chemin du nœud racine (le nœud sans parents) au nœud feuille le plus profond. Pour rendre cette hauteur minimale, l'arborescence doit être entièrement saturée (sauf pour le dernier niveau), c'est-à-dire que si un niveau spécifique a des nœuds avec des enfants, tous les nœuds du niveau parent doivent avoir deux enfants.n

Ainsi, un arbre binaire entièrement saturé à niveaux aura nœuds maximum et aura une profondeur de . Ainsi, si nous avons la profondeur d'un arbre binaire, nous pouvons très facilement trouver le nombre maximum de nœuds (ce qui se produit lorsque l'arbre est complètement saturé). Si vous vous souvenez de vos classes d'algèbre, ce n'est qu'une série géométrique et peut donc être représentée comme ceci:41+12+122+12223

noeuds=1+2+22+23+...+2profondeur=k=0profondeur2k=1-2profondeur+11-2.

noeuds=2profondeur+1-1,
noeuds+1=2profondeur+1Journal2(noeuds+1)=Journal2(2profondeur+1)=profondeur+1Journal2(noeuds+1)-1=profondeur.

4

Pour garder la hauteur minimale, il est facile de voir que nous devons remplir tous les niveaux sauf éventuellement le dernier. Pourquoi? sinon, nous pourrions simplement déplacer les nœuds du dernier niveau dans des emplacements vides dans les niveaux supérieurs.

Maintenant, imaginez que j'ai un nombre indéterminé de haricots et que je vous donne un haricot à la fois et vous demande de construire un arbre binaire avec une hauteur minimale possible. Je pourrais manquer de beans au moment où vous avez complètement rempli le dernier niveau ou au moins avoir un bean dans le dernier niveau. Disons que vous avez la hauteur de votre arbre h à ce stade.

20+21+22+23++2h=2h+1-1n.
h=lg(n+1)-1.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.