Se dan N nodos idénticos. ¿Cuántos árboles binarios son posibles?

Como con la mayoría de los problemas relacionados con los árboles, podemos pensar en la solución de forma recursiva. Si tiene uno de los nodos [math] n [/ math] como raíz, entonces hay dos hijos, que son raíces de árboles binarios. El tamaño de estos subárboles se puede denotar por [math] b_1 [/ math] y [math] b_2 [/ math], bajo la restricción de que [math] b_1 + b_2 = n-1 [/ math].

Por lo tanto, es posible que [matemática] b_1 = 0 [/ matemática] y [matemática] b_2 = n-1 [/ matemática], [matemática] b_1 = 3 [/ matemática] y [matemática] b_2 = n-4 [/ matemática ], y toda una serie de posibilidades.

Desde aquí podemos hacer una relación de recurrencia:

[matemáticas] f (n) = \ displaystyle \ sum_ {k = 0} ^ {n-1} {f (k) \ cdot f ((n-1) -k)} [/ math]

Con el caso base que [math] f (0) = 1 [/ math], ya que solo hay un árbol binario vacío.

Esta recurrencia está dada en forma cerrada por el número catalán, es decir, [math] f (n) = \ dfrac {(2n)!} {(N + 1)! (N)!} [/ Math].

Nota: si está intentando escribir un programa para decirle la respuesta, una forma fácil de calcular el número catalán que evita el desbordamiento y se adhiere a los enteros sería calcular [math] \ binom {2n} {n} [/ math] y luego dividir entre [matemáticas] n + 1 [/ matemáticas]. Puede encontrar buenas implementaciones de combinaciones en el desbordamiento de pila. Dicho esto, este número crece ridículamente rápido, por lo que un enfoque de programación dinámica que use la relación de recurrencia anterior sería lo suficientemente rápido para cualquier cosa de tamaño razonable (es decir, cualquier cosa que se ajuste a los enteros estándar).

More Interesting

¿Diferencia entre algoritmo de relleno de inundación y relleno de límite en gráficos de computadora?

¿Cómo funciona la recursividad en el árbol de búsqueda binaria en orden? ¿Cómo se pueden explicar las llamadas recursivas, sin resumirlas como llamadas de pila?

¿Cuál es la forma más eficiente de recoger pelotas de tenis en una cancha?

¿Cuál es la forma más rápida de invertir una cadena con más de 10000 caracteres?

¿Es posible implementar algoritmos de aprendizaje automático en lenguaje ensamblador?

¿Qué tipo de algoritmo de localización utilizan generalmente los misiles de crucero?

¿Los algoritmos están sesgados inherentemente hacia las opiniones subjetivas de sus creadores humanos?

¿Hay algún truco para que un programador de computadoras recuerde el código de un tipo de burbuja?

¿Qué debo hacer si no soy bueno en el desarrollo de backend o en los algoritmos, debería enfocarme en UI / UX?

¿Cómo determino la complejidad temporal de una expresión matemática que involucra potencias, divisiones y exponenciales? Sé la complejidad temporal de las operaciones simples, pero no sé cómo se supone que las combino para encontrar la respuesta.

En los términos más simples, ¿qué es un algoritmo? ¿Cual es su propósito?

¿Por qué deberíamos instanciar una matriz en una línea diferente?

¿Dejarías que los algoritmos se intercambiaran por ti cuando estés en el trabajo?

¿Aproximadamente cuántas personas en el mundo pueden resolver un cubo rubix sin algoritmos?

¿Dónde puedo encontrar preguntas sobre estructuras de datos sabias para las ubicaciones?