lunes, 26 de junio de 2017

Cartesius (5) - Particiones (1)


El tema de las particiones ya ha sido tratado en este blog desde el punto de vista de las funciones generatrices, y también con la ayuda de nuestra herramienta “Cartesius”. Como esta ha sido mejorada sustancialmente, volveremos a tratar el tema incluyendo nuevas prestaciones.

Si deseas contar con las funciones generatrices recorre las entradas de este blog relativas al tema, a las que puedes acceder mediante la etiqueta “Funciones generatrices” en el panel derecho de este blog

No trataremos ese tema en esta nueva serie.

También puedes repasar el tema de particiones con la etiqueta correspondiente:


En esta serie repasaremos conceptos y se añadirán condicionamientos interesantes.

Particiones de un número

Se llaman particiones de un número natural N a las distintas formas de descomponerlo en sumandos enteros positivos sin tener en cuenta el orden y admitiendo repetición de sumandos.  Para no tener en cuenta el orden se puede exigir que los sumandos sean decrecientes en sentido amplio (o crecientes).  Así es más fácil representarlos.

Por ejemplo, el 9 se puede descomponer en estas sumas:

9,   8+1,  7+2,   7+1+1,   6+3,   6+2+1,   6+1+1+1,   5+4,   5+3+1, 5+2+2  5+2+1+1,   5+1+1+1+1,   4+4+1,  4+3+2,  4+3+1+1,   4+2+2+1,   4+2+1+1+1  4+1+1+1+1+1,   3+3+3,  3+3+2+1,   3+3+1+1+1, 3+2+2+2,   3+2+2+1+1,   3+2+1+1+1+1 3+1+1+1+1+1+1, 2+2+2+2+1, 2+2+2+1+1+1, 2+2+1+1+1+1+1, 2+1+1+1+1+1+1+1  1+1+1+1+1+1+1+1+1

Son 30 en total

Al número total de particiones de N lo representaremos por la función P(N). Por tanto la afirmación anterior se puede representar como P(9)=30. En muchos lenguajes de programación se representa como partitions(n), y si solo se desea contar las particiones, como #partitions(n).

Particiones con Cartesius

La nueva versión de nuestra herramienta la puedes descargar desde

http://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#cartesius

Con ella es más sencillo el desarrollo de particiones, gracias a la condición XRANGO, que recorre todos los números de sumandos de la partición. Hay que advertir que los desarrollos pueden resultar lentos, y casi imposibles para números grandes (Cartesius solo usa hasta 12 elementos), especialmente en LibreOffice Calc. Si se tiene a la vista el desarrollo se puede observar que la lentitud aparece en el tramo final, cuando casi todos los sumandos tienen el valor 1. En ese momento se puede adivinar el resultado aunque no haya terminado. Cada equipo y versión de hoja de cálculo tiene una forma de interrumpir la ejecución de una macro, pero a veces no es fácil encontrar ese dato. En el equipo del autor y con Excel 2010 funciona la combinación de pulsar la tecla de Windows y ESC.

Repasa en las entradas anteriores sobre Cartesius su funcionamiento básico, Debes abrir la hoja Planteamiento, borrar las condiciones si las hay y escribir las nuevas. Con el botón Iniciar obtienes las particiones. El planteamiento mínimo para una partición, como para el caso 7, es:


Si la usas, no tengas prisa, que tarda. Resultan 15 particiones:

Puedes comprobarlo en la página de WolframAlpha, que además te ofrece los diagramas de Ferrer



El lenguaje PARI también te puede servir para comprobar:

O bien consigues el desarrollo


O bien el número. Estudia el planteamiento de la primera línea:



Llegados a este punto, la pregunta es obvia, y es que para qué usar Cartesius si disponemos de estas herramientas. La respuesta está en los condicionamientos.

Particiones sobre números de un tipo determinado

Imagina que deseamos saber cuántas formas existen de expresar el número 12 como suma de primos. En este caso deberemos exigir que todos los sumandos en Cartesius sean de ese tipo. Sabemos que los primos inferiores a 12 son: 2, 3, 5, 7 y 11. Cinco en total. Aprovechamos que en Cartesius los sumandos se pueden definir mediante conjuntos (valores separados por comas, sin espacios), lo que facilita las cosas:



Declaramos un rango de sumas del 1 al 5, explicitamos cuáles son los sumandos y exigimos que la suma sea igual a 12. Resultan 6 posibilidades:



En este caso conocemos los sumandos, pero en otros no merece la pena buscarlos. Por ejemplo, deseamos conocer las particiones del número 1001 en suma de primos comprendidos entre 300 y 350. No esperamos más ni menos de tres sumandos, luego el planteamiento adecuado sería:



Esto es ya algo más complicado: XTOTAL=3 obliga a que sean tres sumandos, XT=300..350 establece el rango de los sumandos, y XT=FILTRO(PRIMO) indica que se seleccionan los sumandos primos, que en este caso son los de la imagen:



Obtendríamos dos sumas posibles:



Este ejemplo justifica el uso de Cartesius. Disponemos de los filtros PRIMO, PAR, IMPAR, CUADRADO, FIBONACCI y TRIANGULAR. En próximas versiones se podrían añadir más. Consulta las Instrucciones de Cartesius para más detalles. Puedes obtenerla en

http://www.hojamat.es/sindecimales/combinatoria/herramientas/cartesius.pdf

Otro ejemplo

Sabemos que todo número entero se descompone en suma de a lo sumo tres números triangulares, pero ¿de cuántas formas? Por ejemplo, el número 30. Planteamos:


Y se obtiene


Existe otro teorema similar que afirma que todo número se puede descomponer en a lo sumo cuatro cuadrados. Bastaría para comprobarlo cambiar XRANGO a 4 y efectuar un filtro de cuadrados. Lo probamos con el número 100:



Resultan cinco posibilidades (salvo el orden):



Es curioso que todos tienen sumandos repetidos.

Por hoy hemos desarrollado bastante. En la siguiente entrada expresaremos números en función de listas o de otros tipos, como factoriales, números de Fibonacci, impares y demás. Comprobaremos con estos últimos un teorema importante que ya tratamos en este blog.

No hay comentarios: