Existe-t-il une formule permettant de calculer quelle est la hauteur maximale et minimale d'un arbre AVL, en fonction d'un certain nombre de nœuds?
Par exemple:
Question de manuel:
Quelle est la hauteur maximum/minimum pour une arborescence AVL de 3 nœuds, 5 nœuds et 7 nœuds?
Réponse du manuel:
La hauteur maximale/minimale pour une arborescence AVL de 3 nœuds est de 2/2, pour 5 nœuds de 3/3, pour 7 nœuds de 4/3
Je ne sais pas s'ils l'ont calculé à l'aide d'une formule magique ou s'ils ont dessiné l'arbre AVL pour chacune des hauteurs données et l'ont déterminé ainsi.
La solution ci-dessous est appropriée pour travailler à la main et gagner une intuition. Veuillez consulter les formules exactes au bas de cette réponse pour les arbres plus grands (plus de 54 nœuds).
Eh bien, la hauteur minimale est facile, il suffit de remplir chaque niveau de l’arbre avec des nœuds jusqu’à épuisement. Cette hauteur est le minimum.
Pour trouver le maximum, procédez de la même manière que pour le minimum, mais revenez à l'étape précédente (supprimez le dernier nœud placé) et voyez si l'ajout de ce nœud à la sous-arborescence opposée (d'où il venait) violait la propriété de l'arborescence AVL . Si c'est le cas, votre hauteur maximale n'est que votre taille minimale. Sinon, cette nouvelle hauteur (qui devrait être min height + 1) est votre hauteur maximale.
Si vous avez besoin d’une vue d’ensemble sur les propriétés d’un arbre AVL, ou simplement d’une explication générale d’un arbre AVL, Wikipedia est un excellent point de départ.
Prenons l'exemple de cas à 7 nœuds. Vous remplissez tous les niveaux et trouvez un arbre complètement rempli de hauteur 3. (1 au niveau 1, 2 au niveau 2, 4 au niveau 3. 1 + 2 + 4 = 7 nœuds.) Cela signifie que 3 est votre minimum.
Maintenant, trouvez le max. Supprimez ce dernier nœud et placez-le sur le sous-arbre de gauche au lieu de celui de droite. Le sous-arbre de droite a toujours la hauteur 3, mais le sous-arbre de gauche a maintenant la hauteur 4. Cependant, ces valeurs diffèrent de moins de 2, il s'agit donc toujours d'une arborescence AVL. Par conséquent, votre hauteur maximale est de 4.
La technique présentée ci-dessus ne tient pas si vous avez un arbre avec un très grand nombre de nœuds. Dans ce cas, on peut utiliser les formules suivantes pour calculer le min/max exact.
Étant donné n nœuds2:
Minimum: ceil (log2(n + 1))
Maximum: étage (1.44 * log2(n + 2) -. 328)
Si vous êtes curieux, la première fois max-min> 1 correspond à n = 54.
1Merci à Jamie S d’avoir signalé cette défaillance à un nœud plus important.
2Ces formules proviennent de la page Wikipedia AVL , avec des constantes branchées. La source originale est Tri et recherche de Donald E. Knuth (2e édition).
Il est important de noter les caractéristiques suivantes d'une arborescence AVL.
Propriété d'arborescence AVL
Théorème: la propriété AVL est suffisante pour maintenir une hauteur d'arbre dans le pire des cas de O (log N).
Notez le diagramme suivant.
- T1 est composé d’un nœud T0 + 1, pour une hauteur de de 1 .
- T2 est composé de T1 et d’un nœud T0 + 1, ce qui donne une hauteur de de 2 .
- T3 est composé d'un T2 pour le sous-arbre de gauche et d'un T1 pour le droit sous-arbre + 1 noeud, pour une hauteur de de 3 .
- T4 est composé d'un T3 pour le sous-arbre de gauche et d'un T2 pour le droit sous-arbre + 1 nœud, pour une hauteur de 4 .
Si vous prenez le plafond de O (log N), où N représente le nombre de nœuds dans une arborescence AVL, vous obtenez la hauteur.
Exemple) T4 contient 12 nœuds. [plafond] O (log 12) = 4.
Voir le modèle en développement ici ??
** La hauteur la plus défavorable est
Supposons que le nombre de nœuds est n
Essayer de connaître la hauteur minimale d'un arbre AVL équivaudrait à essayer de le rendre complet, c'est-à-dire de remplir tous les nœuds possibles à chaque niveau, puis de passer au niveau suivant.
Ainsi, à chaque niveau, le nombre de nœuds éligibles augmente de 2 ^ (h-1), où h est la hauteur de l'arbre.
Donc, à h = 1, les nœuds (1) = 2 ^ (1-1) = 1 nœud
pour h = 2, nœuds (2) = nœuds (1) + 2 ^ (2-1) = 3 nœuds
pour h = 3, nœuds (3) = nœuds (2) + 2 ^ (3-1) = 7 nœuds
il suffit donc de trouver le plus petit h, pour lequel les nœuds (h) sont supérieurs au nombre donné de nœuds n.
Maintenant, pour le problème de la hauteur maximale d'un arbre AVL: -
supposons que l’arbre AVL ait la hauteur h, F(h) étant le nombre de nœuds dans l’arbre AVL,
pour que sa hauteur soit maximale, supposons que sa sous-arborescence gauche FL et sa sous-arborescence droite FR présentent une différence de hauteur de 1 (car elles satisfont à la propriété AVL).
Supposons maintenant que FL est un arbre de hauteur h-1 et FR un arbre de hauteur h-2.
maintenant le nombre de nœuds dans
F(h)=F(h-1)+F(h-2)+1 (Eq 1)
Ajout de 1 des deux côtés:
F(h)+1=(F(h-1)+1)+ (F(h-2)+1) (Eq 2)
Nous avons donc réduit le problème de hauteur maximale à un Fibonacci sequence
. Et ces arbres F(h) sont appelés Arbres de Fibonacci .
Donc, F (1) = 1 et F (2) = 2
donc pour obtenir la hauteur maximale, il suffit de trouver l’indice du nombre dans la séquence de fibonacci qui est inférieur ou égal à n.
Donc en appliquant (Eq 1)
F (3) = F(2) + F (1) + 1 = 4, donc si n est compris entre 2 et 4, l'arbre aura la hauteur 3.
F (4) = F (3) + F (2) + 1 = 7, de même si n est compris entre 4 et 7, l'arbre aura la hauteur 4.
etc.
http://lcm.csa.iisc.ernet.in/dsa/node112.html
Il s’agit d’environ 1,44 * log n, où n est le nombre de nœuds.
Pour une description plus détaillée sur la façon dont cela a été dérivé. Vous pouvez vous référer à ce lien à partir du milieu de la page 13: http://www.compsci.hunter.cuny.edu/~sweiss/course_materials/csci335/lecture_notes/chapter04.2.pdf