Quelle est la hauteur moyenne d'un arbre binaire?

10

Existe-t-il une définition formelle de la hauteur moyenne d'un arbre binaire?

J'ai une question de didacticiel sur la recherche de la hauteur moyenne d'un arbre binaire en utilisant les deux méthodes suivantes:

  1. La solution naturelle pourrait être de prendre la longueur moyenne de tous les chemins possibles de la racine à une feuille, c'est-à-dire

    avh1(T)=1# leaves in Tv leaf of Tdepth(v) .

  2. Une autre option consiste à le définir récursivement, c'est-à-dire que la hauteur moyenne d'un nœud est la moyenne sur les hauteurs moyennes des sous-arbres plus un, c'est-à-dire

    avh2(N(l,r))=avh2(l)+avh2(r)2+1

    avec pour leafs et pour les emplacements vides.l avh 2 ( _ ) = 0avh2(l)=1lavh2(_)=0

Sur la base de ma compréhension actuelle, par exemple la hauteur moyenne de l'arbreT

    1    
   / \
  2   3
 /
4

is par la deuxième méthode, qui utilise la récursivité.avh2(T)=1.25

Cependant, je ne comprends toujours pas comment faire la première. n'est pas correct.avh1(T)=(1+2)/2=1.5

Intemporel
la source
1
Pouvez-vous fournir un certain contexte? Il n'y a pas de définition mathématique "correcte"; vous pouvez définir la "hauteur moyenne d'un arbre binaire" comme vous le souhaitez. (Moyenne de quoi sur quelle distribution ?) Mais des définitions différentes seront plus ou moins utiles pour différentes applications.
JeffE
@JeffE "Il n'est pas immédiatement évident de définir la hauteur moyenne d'un arbre binaire. La solution la plus naturelle pourrait peut-être être d'avoir la longueur moyenne des chemins possibles de la racine à une feuille. Une solution plus simple (peut-être même simpliste) c'est-à-dire que la hauteur moyenne d'un nœud est la moyenne des hauteurs moyennes des sous-arbres plus un. Vous trouverez plus facile de coder cette alternative. Pouvez-vous donner des exemples pour démontrer la différence? "
Intemporel
J'ai essayé de rendre votre message plus clair en donnant des définitions précises des deux variantes. Veuillez vérifier que j'ai bien interprété votre texte. En particulier, vous manquiez l'ancre pour la deuxième variante; que vous preniez des feuilles pour avoir une hauteur de un ou zéro fait une différence.
Raphael

Réponses:

3

Il n'y a aucune raison de croire que les deux définitions décrivent la même mesure. Vous pouvez également écrire manière récursive:avh1

avh1(N(l,r))=lv(l)(avh1(l)+1)+lv(r)(avh1(r)+1)lv(l)+lv(r)

avec pour les feuilles . Si vous ne pensez pas que ce soit la même chose, dépliez la définition de sur le côté droit ou effectuez une preuve d'induction.l avh 1avh1(l)=0lavh1

Nous voyons maintenant que fonctionne assez différemment de . Alors que pèse les hauteurs récursives d'un enfant de nœuds aussi ( en ajoutant et en divisant par deux), les soupèse en fonction du nombre de feuilles qu'ils contiennent. Ils sont donc les mêmes (modulo l'ancre) pour les arbres à feuilles équilibrées, c'est-à-dire équilibrés dans le sens où les arbres frères ont autant de feuilles. Si vous simplifiez la forme récursive de avec cela apparaît immédiatement. Sur les arbres déséquilibrés, cependant, ils sont différents.avh 2 avh 2 avh 1 avh 1 lv ( l ) = lv ( r )avh1avh2avh2avh1avh1lv(l)=lv(r)

Vos calculs sont en effet corrects (compte tenu de votre définition); notez que l'exemple d'arbre n'est pas équilibré en feuilles.

Raphael
la source
avh1
avh1
Je veux dire le code d'implémentation utilisant la récursion
Timeless
@null: vous pouvez copier la formule presque littéralement , à condition d'incorporer le cas de base. La façon de procéder dépend précisément de votre langage de programmation et de l'implémentation de votre arborescence. Je vous suggère de prendre la récurrence de Stack Overflow si la mise en œuvre est un obstacle pour vous.
Raphael
2

Edit: Jeffe fait un bon point dans son commentaire ci-dessus. Vous devriez probablement lire «correct vs incorrect» dans la réponse suivante comme «pratique / cohérent vs incohérent».

Il semble que votre deuxième calcul soit incorrect. Soit la hauteur d'un sous-arbre avec un seul nœud (c'est-à-dire une feuille) égale à 0. Ensuite, la hauteur de la racine du sous-arbre à:

  • la hauteur à 4 est 0
  • la hauteur à 3 est 0
  • hauteur à 2 est la hauteur moyenne à 3 + 1 = 0 + 1 = 1
  • la hauteur à 1 est la moyenne des hauteurs à 2 et 3 = (0 + 1) / 2 + 1 = 1,5

Je pense que vous faites correctement le premier calcul, et 1,5 est la bonne réponse.

Joe
la source
l'idée est un nœud nul avec une hauteur de -1, basé sur la 2ème approche, la hauteur moyenne d'un nœud est la moyenne des sous-arbres plus 1, la hauteur moyenne du nœud 4 est ((-1) + (- 1)) / 2 + 1 = 0 , la hauteur moyenne du nœud 2 est (0 + (- 1)) / 2 + 1 = 0,5, et donc la hauteur moyenne de la racine est 1,25.
Intemporel
@null Vous pouvez le définir de cette façon si vous insistez, mais les deux définitions ne seront pas cohérentes.
Joe