jueves, 24 de septiembre de 2026

Regresos 16 (1): Particiones condicionadas de un número natural

En el año 2017 publiqué en mi blog “Números y hoja de cálculo” (https://hojaynumeros.blogspot.com/) una serie de estudios sobre particiones de un número obtenidas mediante mi herramienta Cartesius.

Quedé bastante satisfecho, pero echaba de menos poder estudiar las particiones de un número (formas de descomponer un número natural en sumandos) para valores mayores que doce, que es el máximo que me permitía Cartesius. He despojado los algoritmos de esta herramienta de muchas opciones, y me he quedado con lo imprescindible para calcular números de particiones condicionadas. Sigue siendo un proceso lento, pero me permite, con paciencia, abordar cálculos para números mayores que doce.

Lo he incorporado a la hoja “Buscador”, que tengo preparada para su descarga gratuita (https://www.hojamat.es/blog/buscador1.xlsm), y con ella, y sin abandonar Cartesius, ampliaré los trabajos del año 2017.

Tres herramientas

Esta va a ser una serie de entradas, por lo que es conveniente realizar una presentación previa de las mismas. En primer lugar, hay que advertir que el espíritu de ellas es el de aprendizaje y ejercitación. En este tema está todo publicado, y desde este blog poco se puede añadir, pero sí resulta atractivo cotejar distintos métodos para llegar a un mismo objetivo.  El mejor y más aconsejable sería el de trabajar con papel y bolígrafo, que es como mejor se aprende, pero al final se terminará recurriendo a herramientas informáticas.

Usaremos, de forma más o menos simultánea, tres herramientas básicas:

Cartesius

Es mi herramienta tradicional para construir productos cartesianos condicionados. En el tema de particiones ya he publicado muchos ejemplos, y resulta bastante sencilla de entender. Sus condiciones resultan claras.

Descargable desde

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

Buscador

En el archivo descargable presentado más arriba he situado, en su tercera hoja, una subrutina para realizar el mismo trabajo que el de Cartesius, pero que no sufre la restricción de las doce columnas. Resulta también más rápida, ya que el que no sea tan general le dota de más velocidad, pero nunca suficiente, porque todos los temas de Combinatoria acaban por abordar cálculos que resultan muy lentos.

Dirección de descarga: https://www.hojamat.es/blog/buscador1.xlsm

PARI

Este lenguaje posee herramientas potentes y rápidas, aunque adolece de falta de presentaciones intuitivas. Está dirigido a profesionales, pero en este blog le hemos conseguido mucha utilidad. Su orden FORPART será un pequeño tesoro para comprobar cálculos o ampliarlos.

Página web: https://pari.math.u-bordeaux.fr/gpwasm.html

 Algoritmo básico

Las particiones actúan sobre conjuntos de sumandos. Por ejemplo, si deseo descomponer el número 20 en cuatro sumandos primos, deberé usar el conjunto (2, 3, 5, 7, 11, 13, 17, 19). El resultado final es que existen 6 particiones distintas.

 Particiones condicionadas                         

Número:    20             

Número de particiones: 6

Conjunto de particiones: 5 5 5 5, 7 5 5 3, 7 7 3 3, 11 3 3 3, 11 5 2 2,       13 3 2 2

En algunas ocasiones, el número de particiones condicionadas proviene de operaciones sobre conjuntos de números sometidos a alguna operación (condición previa). Por ejemplo, podemos estar interesados en particiones en las que las partes sean todas libres de cuadrados, o que pertenezcan a la sucesión de Fibonacci. Esta será la condición previa en cada caso.

El manejo de cuatro números que no tienen que guardar relación entre ellos nos lleva, en el nivel elemental de algoritmos en el que se mueve esta serie, a usar bucles anidados: FOR I=12 T0…FOR J=12 TO…FOR K=12 TO… Esto supone una gran ineficiencia y poca versatilidad, porque el número de bucles debería adaptarse a cada ejemplo determinado.

Desde hace muchos años llevo usando punteros sobre una matriz rectangular (es una imagen para entendernos) en el que van avanzando por los distintos elementos llevando algún tipo de recuerdo de los que ya han visitado.

Concretando el ejemplo del primer párrafo, imaginemos que estudiamos el rango de números entre 40 y 50, y buscamos en ellos conjuntos de cuatro números con la propiedad pedida. Llamamos, por ejemplo, INICIO al valor mínimo (40 en este caso) y TOPE o FINAL al último (50). Por otra parte, daremos el nombre de NUME al número de elementos que tendrán nuestros conjuntos. Desde INICIO hasta final llamaremos E(I) a cada valor concreto de un elemento. En la imagen que sigue sería una columna, mientras que horizontalmente se representarían los elementos elegidos de izquierda a derecha, que será el “movimiento” que tendrá el puntero.

 


Al principio cuesta un poco entender la dinámica de este proceso, pero compensa el no tener que anidar bucles. En mis herramientas de ayuda a la enseñanza lo he usado, entre otros, en estas tres:

Combimaq (https://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#combimaq)

Cartesius

(https://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#cartesius)

Partlista (https://www.hojamat.es/sindecimales/aritmetica/herramientas/herrarit.htm#reprenum)

En la siguiente entrada se desarrollarán estas ideas.

 

No hay comentarios: