Compter les arbres binaires


28

(Je suis un étudiant avec une formation mathématique et j'aimerais savoir comment compter le nombre d'un type spécifique d'arbres binaires.)

En regardant la page Wikipedia pour les arbres binaires , j'ai remarqué cette affirmation que le nombre d'arbres binaires enracinés de taille serait ce nombre catalan : n

Cn=1n+1(2nn)

Mais je ne comprends pas comment je pourrais arriver à un tel résultat par moi-même? Existe-t-il une méthode pour trouver ce résultat?

Maintenant, que se passe-t-il si l'ordre des sous-arbres (qui est à gauche, qui est à droite) n'est pas considéré? Par exemple, de mon point de vue, je considère que ces deux arbres sont identiques:

   /\   /\
  /\     /\

Serait-il possible d'appliquer une méthode similaire pour compter combien de ces objets ont exactement n nœuds?


Le théorème de comptage de Polya sur les arbres 2-enracinés est-il applicable ici?
Nicholas Mancuso

Réponses:


35

Pour compter de nombreux types d'objets combinatoires, comme les arbres dans ce cas, il existe de puissants outils mathématiques (la méthode symbolique) qui vous permettent de dériver mécaniquement de tels nombres à partir d'une description de la façon dont les objets combinatoires sont construits. Cela implique de générer des fonctions.

Une excellente référence est la combinatoire analytique de feu Philipe Flajolet et Robert Sedgewick. Il est disponible à partir du lien ci-dessus.

Le livre de feu Herbert Wilf générant une fonctionnalité est une autre source gratuite.

Et bien sûr, Concrete Mathematics by GKP est un trésor.


Pour les arbres binaires, cela se passe comme suit: vous devez d'abord avoir une définition claire de l'arbre.

Un arbre binaire est un arbre enraciné dans lequel chaque nœud non-feuille a exactement le degré 2.

Ensuite, nous devons convenir de ce que nous voulons appeler la taille d'un arbre.

entrez la description de l'image ici

À gauche, tous les nœuds sont égaux. Au milieu, nous distinguons les feuilles et les non-feuilles. Sur la droite, nous avons un arbre binaire taillé où les feuilles ont été enlevées. Notez qu'il a des branches unaires de deux types (gauche et droite)!

Maintenant, nous devons dériver une description de la façon dont ces objets combinatoires sont construits. Dans le cas des arbres binaires, une décomposition récursive est possible.

Soit l'ensemble de tous les arbres binaires du premier type alors symboliquement nous avons: Aentrez la description de l'image ici

Il se lit comme suit: "Un objet de la classe des arbres binaires est soit un nœud soit un nœud suivi de deux arbres binaires." Cela peut être écrit comme une équation d'ensembles:

A={}({}×A×A)

En introduisant la fonction de génération qui énumère cette classe d'objets combinatoires, nous pouvons traduire l'équation d'ensemble en une équation impliquant la fonction de génération.A(z)

A(z)=z+zA2(z)

Notre choix de traiter tous les nœuds de manière égale et de prendre le nombre de nœuds dans l'arbre comme notion de sa taille s'exprime en «marquant» les nœuds avec la variable .z

Nous pouvons maintenant résoudre l'équation quadratique pour et obtenir, comme d'habitude, deux solutions, la forme fermée explicite de la fonction génératrice:A ( z )zA2(z)A(z)+z=0A(z)

A(z)=1±14z22z

Maintenant, nous avons simplement besoin du théorème binomial de Newton (généralisé):

(1+x)a=k=0(ak)xk

avec et pour étendre la forme fermée de la fonction de génération en une série de puissance. Nous faisons cela parce que le coefficient à est juste le nombre d'objets combinatoires de taille , typiquement écrits comme . Mais ici, notre notion de «taille» de l'arbre nous oblige à chercher le coefficient à . Après avoir jonglé avec les binômes et les factoriels, nous obtenons:x = - 4 z 2 z n n [ z n ] A ( z ) z 2 n + 1a=1/2x=4z2znn[zn]A(z)z2n+1

[z2n+1]A(z)=1n+1(2nn).

Si nous commençons par la deuxième notion de la taille, la décomposition récursive est:

entrez la description de l'image ici

Nous obtenons une classe différente d'objets combinatoires . Il se lit comme suit: "Un objet de la classe des arbres binaires est soit une feuille soit un nœud interne suivi de deux arbres binaires."B

Nous pouvons utiliser la même approche et transformer en . Seulement cette fois, la variable ne marque que les nœuds internes, pas les feuilles, car la définition «la taille» est ici différente. Nous obtenons également une fonction de génération différente: B = 1 + z B 2 ( z ) zB={}({}×B×B)B=1+zB2(z)z

B(z)=114z2z

Extraire les rendements des coefficients

[zn]B(z)=1n+1(2nn).

Les classes et sont d'accord sur les nombres, car un arbre binaire avec nœuds internes a feuilles, donc nœuds au total.B n n + 1 2 n + 1ABnn+12n+1

Dans le dernier cas, nous devons travailler un peu plus dur:

entrez la description de l'image ici

qui est une description des tentatives binaires d'élagage non vides. Nous étendons ceci à

C={}({}×C)({}×C)({}×C×C)D={ϵ}({}×C×C)

et le réécrire avec des fonctions de génération

C(z)=z+2zC(z)+zC2(z)D(z)=1+zC2(z)

résoudre les équations quadratiques

C(z)=12z14z2zD(z)=114z2z

et encore une fois

[zn]C(z)=1n+1(2nn)n1[zn]D(z)=1n+1(2nn)n0

Notez que la fonction de génération catalane est

E(z)=114z2

il énumère la classe des arbres généraux . Ce sont les arbres sans restriction sur le degré du nœud.

E={}×SEQ(E)

Il se lit comme suit: "Un objet de la classe des arbres généraux est un nœud suivi d'une éventuelle séquence vide d'arbres généraux."

E(z)=z1E(z)

Avec la formule d'inversion Lagrange-Bürmann, nous obtenons

[zn]E(z)=1n+1(2nn)

Nous avons donc prouvé qu'il y a autant d'arbres généraux qu'il y a d'arbres binaires. Pas étonnant qu'il y ait une bijection entre les arbres général et binaire. La bijection est connue sous le nom de correspondance de rotation (expliquée à la fin de l'article lié), qui nous permet de stocker deux arbres généraux comme un arbre binaire.

Notez que si nous ne distinguons pas le frère gauche et le frère droit dans la classe nous obtenons encore une autre classe d'arbres :CT

entrez la description de l'image ici

les arbres binaires unaires. Ils ont aussi une fonction génératrice mais leur coefficient est différent. Vous obtenez les nombres Motzkin

T={}×SEQ2(T)
T(z)=1z12z3z22z
[zn]T(z)=1nk(nk)(nkk1).

Oh et si vous n'aimez pas générer des fonctions, il y a aussi beaucoup d'autres preuves. Voir ici , il y en a un où vous pouvez utiliser le codage des arbres binaires comme mots Dyck et dériver une récurrence de leur définition récursive. La résolution de cette récurrence donne également la réponse. Cependant, la méthode symbolique vous évite de trouver la récurrence en premier lieu, car elle fonctionne directement avec les plans des objets combinatoires.


Juste pour noter que "Introduction à l'analyse des algorithmes" de Sedgewick et Flajolet ( aofa.cs.princeton.edu ) couvre beaucoup du même matériel que le livre "Analytic Combinatorics", mais sous une forme plus accessible.
vonbrand

7

Les fonctions de génération sont une baguette magique très puissante et très utile. La solution suivante à la première question (pourquoi existe-t-il des arbres ) est un peu moins magique. Par conséquent, mignon.Cn

Exemple. Pour produire un arbre de nœuds, nous commençons par une séquence dans laquelle se produit fois et se produit fois. Par exemple, . Parmi les préfixes avec la somme la plus petite (et peut-être négative), choisissez la plus longue; dans ce cas, . Prenez ce préfixe depuis le début et mettez-le à la fin; dans ce cas, nous obtenons . Maintenant, changez en et en ; dans ce cas, nous obtenons . Retirez un du début, ajoutez un5+15+115+++++++++++++++++TETTETETTETEETEà la fin; dans ce cas, nous obtenons TETETTETEEE. Ceci est une description de l'arbre T(E,T(E,T(T(E,T(E,E)),E))). Vous trouverez ci-dessous une explication de la raison de cette bijection. Une fois que vous en êtes convaincu, le comptage est facile. Il existe des séquences de , puis nous avons divisé par car nous avons choisi l'une des permutations cycliques possibles.(5+65)±15+6

Première bijection. Une définition typique des arbres en ML est type tree = T of tree * tree | E; c'est-à-dire qu'un arbre a deux sous-arbres (ordonnés) ou qu'il est vide. Voici comment sont construits les arbres: T(T(E,E),T(T(E,E),T(E,E))). En laissant tomber les peluches, nous pouvons simplement écrire TTEETTEETEE. Toutes ces descriptions se terminent par un E, il est donc inutile: TTEETTEETE. (Notez que l'arborescence vide correspond maintenant à la chaîne vide.) Ces chaînes ont la propriété que chaque préfixe a au moins autant de Ts que Es, et au total ils ont Ts et Es, où est le nombre de nœuds de l'arbre.nnn

Deuxième bijection. Nous remplaçons maintenant T par +1 et E par -1. Donc, nous regardons des séquences avec valeurs +1, avec valeurs -1 et avec les sommes de tous les préfixes .nn0

Troisième bijection. Nous modifions maintenant un peu l'exigence de préfixes: nous demandons que la somme de chaque préfixe non vide soit . Pour que cela soit possible, nous laissons valeurs +1 et valeurs -1. (Sinon, la somme de la chaîne entière serait 0 et ne satisferait pas à la condition des préfixes.) Ces séquences doivent commencer par +1. Donc, ils sont vraiment les mêmes qu'avant, sauf qu'ils ont un +1 bloqué au début.>0n+1n

Propriété Raney. Maintenant oublier nos séquences pour un moment et d' envisager une séquence finie d' entiers , , dont la somme est 1. Si tous les préfixes non vides ont des sommes positives, alors permutation pas cyclique de cette séquence a la même propriété. Pourquoi? Eh bien, supposons qu'il existe un tel que ait également tous les préfixes non vides positifs. Puis (propriété de séquence à partir de ) et (propriété de séquence à partir de ); par conséquent,x1xmk1xk,,xm,x1,,xk1x1++xk11x1xk++xm1xkx1++xm2, ce qui contredit l'hypothèse selon laquelle la somme pour la séquence entière est 1.

De plus, étant donné une séquence avec la somme 1, il y a toujours une permutation cyclique qui fait que tous les préfixes non vides ont une somme positive. (Cela est vrai même pour les nombres réels.)

Conclusion. Comptons maintenant les séquences de +1 et -1 qui sont dans une bijection avec des arbres. Sur nombres, nous devons choisir égal à +1, les autres seront -1. Il existe façons de procéder. Mais, seulement séquence sur comptée jusqu'à présent a des préfixes positifs. Ainsi, le nombre d'arbres binaires enracinés et ordonnés est:n + 1 ( 2 n + 12n+1n+112n+1(2n+1n+1)12n+1

12n+1(2n+1n+1)=12n+12n+1n+1(2nn)=1n+1(2nn)

Très bonne réponse, mais l'énoncé suivant a besoin d'une explication: "étant donné une séquence avec la somme 1, il y a toujours une permutation cyclique qui fait que tous les préfixes non vides ont une somme positive" .... au moins une allusion à la preuve serait agréable.
VOG

1
@vog: prenez le préfixe avec la plus petite somme et déplacez-le à la fin.
rgrig

1
@vog: il doit également être le préfixe le plus long, au cas où il y en aurait plusieurs avec la même somme la plus petite. J'ai édité la réponse pour ajouter un exemple au début.
rgrig
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.