Cálculo de los números de Catalan

Cálculo de los números de Catalan

Cálculo de los números de Catalan


Los números de catalán obtienen su nombre del matemático Eugène Charles Catalán (1814–1894) de origen belga. Se utilizan en combinatoria y estos son una secuencia de números naturales que aparecen en varios problemas de conteo, habitualmente recursivos. El n-ésimo número de catalán se obtiene, aplicando coeficientes binomiales, a partir de la siguiente fórmula:

C_n = \frac{1}{n+1}{2n\choose n} = \frac{(2n)!}{(n+1)!\,n!} \qquad\mbox{ con }n\ge 0.

Contenido

Propiedades

Una expresión alternativa para Cn es:

C_n = {2n\choose n} - {2n\choose n-1} \quad\mbox{ con }n\ge 1.

Esta otra expresión muestra que Cn es un número natural, lo cual no resulta obvio a priori mirando la primera fórmula dada. Los números de catalán satisfacen la siguiente relación de recurrencia:

C_0 = 1 \quad \mbox{y} \quad C_{n+1}=\sum_{i=0}^{n}C_i\,C_{n-i}\quad\mbox{con }n\ge 0.

Y también satisfacen:

C_0 = 1 \quad \mbox{y} \quad C_{n+1}=\frac{2(2n+1)}{n+2}C_n,

Que puede ser una forma más eficiente de calcularlos. La expresión en forma de recursión, seria:


 C_{n} = 
 \begin{cases} 
 \mbox{si }n=0 & \Rightarrow 1  \\ 
 \mbox{si }n>0 & \Rightarrow \cfrac{2(2n-1)}{n+1} \, C_{n-1}
 \end{cases}

Asintóticamente, los números de catalán crecen como:

C_n \sim \frac{4^n}{n^{3/2}\sqrt{\pi}}

Considerando que el cociente entre el n-ésimo número de catalán y la expresión de la derecha tiende hacia 1 cuando n → ∞ (esto puede probarse usando la fórmula de Stirling).


TABLA 1. Números en la serie Catalán
n Cn n Cn
0 1 11 58.786
1 1 12 208.012
2 2 13 742.900
3 5 14 2.674.440
4 14 15 9.694.845
5 42 16 35.357.670
6 132 17 129.644.790
7 429 18 477.638.700
8 1.430 19 1.767.263.190
9 4.862 20 6.564.120.420
10 16.796


Programación

Si se observa la fórmula de recursión planteada matemáticamente:


 C_{n} = 
 \begin{cases} 
 \mbox{si }n=0 & \Rightarrow 1  \\ 
 \mbox{si }n>0 & \Rightarrow \cfrac{2(2n-1)}{n+1} \, C_{n-1}
 \end{cases}

Con base en ella se puede programar dicho ecuación modelándola algorítmicamente. Solo es fijarse en los límites tomados en la función catalán y además guiarse por los resultados de la TABLA 1. que presentan anteriormente para comprobar nuestros resultados.

En JAVA sería de la siguiente manera:

Código Recursivo

/**
 * @authors Alejandro León Aguilar - William Felipe Rojas
 * Colombia 2007
**/
public class Catalan {
            /**
            * @param double n este es el valor al cual le vamos a calcular la función catalán
            * @return double el número ya calculado
            */
        public double numerosCatalan (double n)
        {
             if (n==0) //Condicion de parada de la recursión 
             {
                   return 1;
             }                         
             
             return (2*((2*n)-1))/(n+1)*numerosCatalan (n-1);
             /*Acción recursiva donde halla el Cn de n de menor a mayor, según la fomula   
               matemática*/              
        }
}


¿Por que se declara double? En Java hay que tener mucho cuidado con esa declaración de variables. Especificamos double porque cuando hacemos la división necesitamos el valor con decimales (y cuantos más decimales mejor) para hallar Cn en esa posición con respecto a n y a C (n-1).

La Complejidad y el Orden de este algoritmo son:


T(n) = a
T(n) = b + T(n − 1)
T(2) = b + a
T(3) = 2b + a
T(4) = 3b + a
T(n) = (n − 1)b + a
O((n − 1)b + a) = n


Tiempo en cálculo de números
n Cn (nanosegundos)
0 8785
5 13732
10 15477
15 18859
20 20485


El tiempo anterior se calculó mirando cuánto se demoraba el método en hacer el debido proceso con un número cualquiera.

Sin un enfoque recursivo, puede tomarse desde el enfoque de “La programación Dinámica”, donde se utiliza respectivamente una tabla que facilitará encontrar el resultado porque no repetirá cálculos innecesarios (como ocurre con la recursividad), sino que hará uso de dicha tabla para hallar los valores continuos hasta dar con el resultado.

Código Dinámico

 /**
 * @author Ray Williams Robinson Valiente
 * Cuba 2008
 */

#include <stdio.h>

#include <string.h>

using namespace std;

int * slide;

int n;

int main() {

	while (printf("Introduzca el término deseado de la serie o 0 para terminar...\n")
			&& scanf("%d", &n) && n) {

		slide = new int[n+1];

		memset (slide, 0, sizeof(*slide));

		slide[0] = 1;

		for (register int i = 1; i <= n; i++)

			slide[i] = (slide[i-1]*2*(2*i-1))/(i+1);

		printf("%d\n",slide[n]);

	}

	return 0;

}


La tabla se inicia en la posición 0 con 1, siguiendo la formula matemática, ya con este valor ingresado en la tabla podemos hallar el valor siguiente y así sucesivamente, cada valor nuevo hallado debe utilizar para su calculo el número hallado anteriormente y almacenado en la tabla, y este nuevo valor se introduce en la tabla.


La complejidad del algoritmo y el Orden
double n +1
If (n==0) +1
return 1 +1
double tabla[]=new +1
tabla[0]=1 +1
while() 3n+1
return tabla[(int) n] +1
T (n)= 3n+7
O(3n+7)= n


Tiempo en calculo de números
n Cn (nanosegundos)
0 7875
5 15849
10 17375
15 18542
20 19318


El tiempo anterior se calculó mirando cuánto se demoraba el método en hacer el debido proceso con un número cualquiera.

¿Cómo Ejecutarlo en Java?

Para ejecutarlo en Java basta con solo crear otra clase con el main, allí se pide el número n al cual se le va a calcular el equivalente en la serie catalán este debe ser double. En este paso debe hacerse la respectiva excepción cuando ingresen letras en vez de números y a su vez, cuando ingresan números negativos. Se escoge cualquiera de los 2 métodos y se crea su clase. Se declara el objeto de la otra clase en el main y se manda al método el número n acabado de ingresar. Por último bastaría con imprimir el número catalán ya encontrado el cual lo retorna el método, allí solo es hacerle un cast (long) a la respuesta para que nos dé el número entero equivalente en la serie catalán.

¿Porqué long? Para poder dar respuestas muy grandes.

Limitaciones

En Java un limitante son los números demasiado grandes, entonces en los algoritmos anteriores si el número 'n' es muy grande, nuestro algoritmo puede no dar la respuesta más acertada.

Obtenido de "C%C3%A1lculo de los n%C3%BAmeros de Catalan"

Wikimedia foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Mira otros diccionarios:

  • Wikipedia:Candidatos a artículos destacados — Ir a la tabla de contenidos Atajo WP:CADWP:CAD   [ …   Wikipedia Español

  • 1 − 2 + 3 − 4 + · · · — Los primeros miles de términos y sumas parciales de 1 − 2 + 3 − 4 + · · ·. En matemáticas, la expresión 1 − 2 + 3 − 4 + · · · es una serie infin …   Wikipedia Español

  • Candidatos a artículos destacados — Wikipedia:Candidatos a artículos destacados Saltar a navegación, búsqueda Ir a la tabla de contenidos Atajo WP:CADWP:CAD …   Wikipedia Español

  • Wikipedia:Café (todos) — Atajos WP:CWP:C …   Wikipedia Español

  • Interpolación polinómica — En análisis numérico, la interpolación polinómica es una técnica de interpolación de un conjunto de datos o de una función por un polinomio. Es decir, dado cierto número de puntos obtenidos por muestreo o a partir de un experimento se pretende… …   Wikipedia Español

  • Protestas en España de 2011 — Este artículo o sección se refiere o está relacionado con un evento actualmente en curso. La información de este artículo puede cambiar frecuentemente. Por favor, no agregues datos especulativos y recuerda colocar referencias a fuentes fiables… …   Wikipedia Español

  • Geometría analítica — La geometría analítica estudia las figuras geométricas mediante técnicas básicas del análisis matemático y del álgebra en un determinado sistema de coordenadas. Su desarrollo histórico comienza con la geometría cartesiana, impulsada con la… …   Wikipedia Español

  • Recursión — Saltar a navegación, búsqueda Anuncio de cacao con una imagen recursiva. La mujer muestra un paquete idéntico al del propio anuncio, conteniendo así a otra mujer que muestra otro paquete más pequeño, de forma recursiva …   Wikipedia Español

  • Sitio de Malta (1565) — Sitio de Malta El sitio de Malta llegada de la flota turca, por Matteo P …   Wikipedia Español

  • Enunciados matemáticos — Anexo:Enunciados matemáticos Saltar a navegación, búsqueda Contenido 1 Lista de axiomas y postulados 2 Lista de conjeturas e hipótesis 3 Lista de lemas …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”