Saltar al contenido

Refinamiento de partición entera en Sage

Este grupo de expertos luego de días de trabajo y de recopilar de datos, dieron con la solución, nuestro deseo es que resulte útil para ti para tu trabajo.

Solución:

Actualmente no tengo instalado Sage, pero examinar la documentación parece indicar que tomar un intervalo cerrado (con un extremo del intervalo siendo la partición en cuestión y el otro extremo siendo la partición más fina, todos unos) del conjunto IntegerPartitions debería Haz el truco.

EDITAR: Acabo de probarlo en SageMathCell, una interfaz de Sage en línea, y parece funcionar bien.

> P = Posets.IntegerPartitions(6);
> print(P.closed_interval((3,2,1), P.top()));
> P = Posets.IntegerPartitions(7);
> print(P.closed_interval((4,3), P.top()));

[(3, 2, 1), (3, 1, 1, 1), (2, 2, 1, 1), (2, 1, 1, 1, 1), (1, 1, 1, 1, 1, 1)]
[(4, 3), (4, 2, 1), (4, 1, 1, 1), (3, 3, 1), (3, 2, 2), (3, 2, 1, 1), (3, 1, 1, 1, 1), (2, 2, 2, 1), (2, 2, 1, 1, 1), (2, 1, 1, 1, 1, 1), (1, 1, 1, 1, 1, 1, 1)]

EDIT #2: También puede usar is_gequal() para probar si una partición es un refinamiento de otra.

> P = Posets.IntegerPartitions(6);
> P.is_gequal((2,2,1,1), (3,3));

True

> P = Posets.IntegerPartitions(6);
> P.is_gequal((4,2), (3,3));

False

Buena pregunta. Pero la lista de refinamientos de un composición está implementado. Así puedes hacer lo siguiente:

def finer(p):
    # Return the list of all partitions refining the given partition ``p``.
    # 
    # EXAMPLES::
    # 
    #     sage: finer(Partition([3,2,1]))
    #     [[1, 1, 1, 1, 1, 1], [2, 1, 1, 1, 1], [2, 2, 1, 1], [3, 1, 1, 1], [3, 2, 1]]
    P = Partitions() # just the constructor
    c = Compositions()(p) # make p into a composition
    return uniq([P(sorted(d, reverse=True)) for d in c.finer()])

Aunque probablemente no sea un método muy rápido… (La uniq es un arma contundente.)

Reseñas y valoraciones del post

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *