Contando árboles binarios

28

(Soy un estudiante con algunos conocimientos matemáticos y me gustaría saber cómo contar el número de un tipo específico de árboles binarios).

Mirando la página de Wikipedia para árboles binarios , noté esta afirmación de que el número de árboles binarios enraizados de tamaño sería este número catalán : C_n = \ dfrac {1} {n + 1} {2n \ elegir n}norte

donorte=1norte+1(2nortenorte)

Pero no entiendo cómo podría llegar a tal resultado por mí mismo. ¿Hay algún método para encontrar este resultado?

Ahora, ¿qué pasa si no se considera el orden de los subárboles (que queda, cuál es el correcto)? Por ejemplo, desde mi punto de vista, considero que estos dos árboles son iguales:

   /\   /\
  /\     /\

¿Sería posible aplicar un método similar para contar cuántos de estos objetos tienen exactamente norte nodos?

Stéphane Gimenez
fuente
¿Es aplicable aquí el teorema de conteo de Polya en árboles con raíces de 2 arios?
Nicholas Mancuso

Respuestas:

35

Para contar muchos tipos de objetos combinatorios, como los árboles en este caso, existen potentes herramientas matemáticas (el método simbólico) que le permiten derivar técnicamente dichos recuentos de una descripción de cómo se construyen los objetos combinatorios. Esto implica generar funciones.

Una excelente referencia es la analítica combinatoria de los difuntos Philipe Flajolet y Robert Sedgewick. Está disponible en el enlace de arriba.

El libro del fallecido Herbert Wilf que genera funcionalidades es otra fuente gratuita.

Y, por supuesto, Concrete Mathematics de GKP es un tesoro.


Para los árboles binarios es así: primero necesita una definición clara del árbol.

Un árbol binario es un árbol enraizado en el que cada nodo no hoja tiene exactamente un grado 2.

Luego tenemos que acordar lo que queremos llamar el tamaño de un árbol.

ingrese la descripción de la imagen aquí

A la izquierda, todos los nodos son iguales. En el medio distinguimos las hojas y las no hojas. A la derecha tenemos un árbol binario podado donde se han eliminado las hojas. ¡Tenga en cuenta que tiene ramas unarias de dos tipos (izquierda y derecha)!

Ahora tenemos que derivar una descripción de cómo se construyen estos objetos combinatorios. En el caso de los árboles binarios, es posible una descomposición recursiva .

Sea el conjunto de todos los árboles binarios del primer tipo, entonces simbólicamente tenemos: Aingrese la descripción de la imagen aquí

Se lee como: "Un objeto de la clase de árboles binarios es un nodo o un nodo seguido de dos árboles binarios". Esto se puede escribir como ecuación de conjuntos:

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

Al introducir la función generadora que enumera esta clase de objetos combinatorios, podemos traducir la ecuación de conjunto en una ecuación que involucra la función generadora.A(z)

A(z)=z+zA2(z)

Nuestra elección de tratar todos los nodos por igual y tomar el número de nodos en el árbol como noción de su tamaño se expresa al "marcar" los nodos con la variable .z

Ahora podemos resolver la ecuación cuadrática para A ( z ) y obtener, como de costumbre, dos soluciones, la forma cerrada explícita de la función generadora:zA2(z)A(z)+z=0A(z)

UNA(z)=1±1-4 4z22z

Ahora simplemente necesitamos el teorema binomial de Newton (generalizado):

(1+X)una=k=0 0(unak)Xk

con y x = - 4 z 2 para expandir la forma cerrada de la parte posterior función de generación en una serie de potencias. Hacemos esto porque, el coeficiente en z n es solo el número de objetos combinatorios de tamaño n , típicamente escrito como [ z n ] A ( z ) . Pero aquí nuestra noción de "el tamaño" del árbol nos obliga a buscar el coeficiente en z 2 n + 1 . Después de un poco de malabarismo con binomios y factoriales, obtenemos:una=1/ /2X=-4 4z2znortenorte[zn]A(z)z2n+1

[z2norte+1]UNA(z)=1norte+1(2nortenorte).

Si comenzamos con la segunda noción del tamaño, la descomposición recursiva es:

ingrese la descripción de la imagen aquí

Obtenemos una clase diferente de objetos combinatoria . Se lee: "Un objeto de la clase de árboles binarios es una hoja o un nodo interno seguido de dos árboles binarios".si

Podemos usar el mismo enfoque y convertir en B = 1 + z B 2 ( z ) . Solo que esta vez la variable z solo marca los nodos internos, no las hojas, porque la definición "el tamaño" es diferente aquí. También tenemos una función generadora diferente:si={}({}×si×si)si=1+zsi2(z)z

si(z)=1-1-4 4z2z

Extrayendo los rendimientos del coeficiente

[znorte]si(z)=1norte+1(2nortenorte).

Las clases y B están de acuerdo en los recuentos, porque un árbol binario con n nodos internos tiene n + 1 hojas, por lo tanto, 2 n + 1 nodos en total.UNAsinortenorte+12norte+1

En el último caso tenemos que trabajar un poco más duro:

ingrese la descripción de la imagen aquí

que es una descripción de intentos binarios podados no vacíos. Extendemos esto a

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

y reescribirlo con funciones generadoras

do(z)=z+2zdo(z)+zdo2(z)re(z)=1+zdo2(z)

resolver las ecuaciones cuadráticas

do(z)=1-2z-1-4 4z2zre(z)=1-1-4 4z2z

y obtener una vez más

[znorte]do(z)=1norte+1(2nortenorte)norte1[znorte]re(z)=1norte+1(2nortenorte)norte0 0

Tenga en cuenta que la función generadora catalana es

mi(z)=1-1-4 4z2

enumera la clase de árboles generales . Esos son los árboles sin restricción en el grado de nodo.

mi={}×SmiQ(mi)

Se lee como: "Un objeto de la clase de árboles generales es un nodo seguido de una posible secuencia vacía de árboles generales".

mi(z)=z1-mi(z)

Con la fórmula de inversión Lagrange-Bürmann obtenemos

[znorte]mi(z)=1norte+1(2nortenorte)

Así que probamos que hay tantos árboles generales como árboles binarios. No es de extrañar que haya una biyección entre los árboles generales y binarios. La biyección se conoce como la correspondencia de rotación (explicada al final del artículo vinculado), que nos permite a dos almacenar cada árbol general como un árbol binario.

Tenga en cuenta que si no distinguimos los hermanos izquierdo y derecho en la clase , obtenemos otra clase de árboles T :doT

ingrese la descripción de la imagen aquí

Los árboles binarios unarios. También tienen una función generadora T ( z ) = 1 - z -

T={}×SmiQ2(T)
sin embargo, su coeficiente es diferente. Obtienes los números de Motzkin [zn]T(z)=1
T(z)=1-z-1-2z-3z22z
[znorte]T(z)=1nortek(nortek)(norte-kk-1).

Ah, y si no te gusta generar funciones, también hay muchas otras pruebas. Vea aquí , hay uno donde podría usar la codificación de árboles binarios como palabras Dyck y derivar una recurrencia de su definición recursiva. Luego, resolver esa recurrencia también da la respuesta. Sin embargo, el método simbólico le evita llegar a la recurrencia en primer lugar, ya que funciona directamente con los planos de los objetos combinatorios.

uli
fuente
Solo para notar que la "Introducción al análisis de algoritmos" de Sedgewick y Flajolet ( aofa.cs.princeton.edu ) cubre una gran cantidad del mismo material que el libro "Analítica combinatoria", pero en una forma más accesible.
vonbrand
7

donorte

5 5+15 5+1-15 5 veces. Por ejemplo,+-++-+--++-. Entre los prefijos con la suma más pequeña (y posiblemente negativa), elija la más larga; en este caso,+-++-+--. Tome este prefijo desde el principio y póngalo al final; en este caso, obtenemos++-+-++-+--. Ahora cambia+ dentro T y - dentro mi; en este caso lo conseguimos TTETETTETEE. Eliminar unT desde el principio, agregue un mial final; en este caso lo conseguimos TETETTETEEE. Esta es una descripción del árbol T(E,T(E,T(T(E,T(E,E)),E))). A continuación hay una explicación de por qué esto es una biyección. Una vez que esté convencido de eso, contar es fácil. Existen(5 5+6 65 5) secuencias de ±1, luego dividimos por 5 5+6 6 porque elegimos una de las posibles permutaciones cíclicas.

Primera biyección. Una definición típica para árboles en ML es type tree = T of tree * tree | E; es decir, un árbol tiene dos subárboles (ordenados) o está vacío. Aquí es cómo se construyen los árboles: T(T(E,E),T(T(E,E),T(E,E))). Dejando caer la pelusa, simplemente podemos escribir TTEETTEETEE. Todas estas descripciones se terminan con una E, por lo que es redundante: TTEETTEETE. (Tenga en cuenta que el árbol vacío ahora corresponde a la cadena vacía). Estas cadenas tienen la propiedad de que cada prefijo tiene al menos tantas Ts como Es, y en total tienennorte Ts y norte Es, donde norte es el número de nodos del árbol.

Segunda biyección. Ahora reemplazamos T por +1 y E por -1. Entonces, estamos viendo secuencias connorte valores +1, con norte valores -1, y con las sumas de todos los prefijos 0 0.

Tercera biyección. Ahora cambiamos un poco el requisito de prefijos: pedimos que la suma de cada prefijo no vacío sea>0 0. Para que esto sea posible dejamosnorte+1 valores +1 y nortevalores -1. (De lo contrario, la suma de toda la cadena sería 0 y no cumpliría la condición para los prefijos). Estas secuencias deben comenzar con +1. Entonces, realmente son los mismos que antes, excepto que tienen un +1 atascado al principio.

Raney propiedad. Ahora olvida nuestras secuencias por un momento y considera una secuencia finita de enteros X1, ..., Xmetrocuya suma es 1. Si todos los prefijos no vacíos tienen sumas positivas, entonces ninguna permutación cíclica de esta secuencia tiene la misma propiedad. ¿Por qué? Bueno, supongamos que hay unk1 tal que Xk,...,Xmetro,X1,...,Xk-1también tiene todos los prefijos no vacíos positivos. LuegoX1++Xk-11 (propiedad de secuencia a partir de X1) y Xk++Xmetro1 (propiedad de secuencia a partir de Xk); por lo tanto,X1++Xmetro2, lo que contradice la suposición de que la suma de toda la secuencia es 1.

Además, dada alguna secuencia con la suma 1, siempre hay una permutación cíclica que hace que todos los prefijos no vacíos tengan una suma positiva. (Esto es cierto incluso para números reales).

Conclusión. Ahora cuentemos las secuencias de +1 y -1 que están en una biyección con árboles. Fuera de2norte+1 números que debemos elegir norte+1que igual a +1, los otros serán -1. Existen(2norte+1norte+1)maneras de hacerlo. Pero sólo1 en 2norte+1Las secuencias contadas hasta ahora tienen prefijos positivos. Entonces, el número de árboles binarios ordenados y enraizados es:

12norte+1(2norte+1norte+1)=12norte+12norte+1norte+1(2nortenorte)=1norte+1(2nortenorte)
rgrig
fuente
Muy buena respuesta, pero la siguiente declaración necesita alguna explicación: "dada alguna secuencia con la suma 1, siempre hay una permutación cíclica que hace que todos los prefijos no vacíos tengan una suma positiva" ... al menos una pista de la prueba sería bonito.
vog
1
@vog: toma el prefijo con la suma más pequeña y muévelo al final.
rgrig
1
@vog: también debería ser el prefijo más largo, en caso de que haya varios con la misma suma más pequeña. Edité la respuesta para agregar un ejemplo al principio.
rgrig