Primero, algunas definiciones:
- Dado
n
yk
, considere la lista ordenada de conjuntos múltiples , donde para cada conjunto múltiple elegimosk
números{0, 1, ..., n-1}
con repeticiones.
Por ejemplo, para n=5
y k=3
, tenemos:
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 1, 1), ( 0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 2), (0, 2, 3), (0, 2, 4), (0, 3, 3), (0, 3, 4), (0, 4, 4), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 3), (1, 3, 4), (1, 4, 4) , (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 3), (2, 3, 4), (2, 4, 4), ( 3, 3, 3), (3, 3, 4), (3, 4, 4), (4, 4, 4)]
- Una parte es una lista de conjuntos múltiples con la propiedad de que el tamaño de la intersección de todos los conjuntos múltiples en la parte es al menos
k-1
. Es decir, tomamos todos los conjuntos múltiples y los intersectamos (usando la intersección de conjuntos múltiples) de una vez. Como ejemplos,[(1, 2, 2), (1, 2, 3), (1, 2, 4)]
es una parte ya que su intersección es de tamaño 2, pero[(1, 1, 3),(1, 2, 3),(1, 2, 4)]
no lo es, porque su intersección es de tamaño 1.
Tarea
Su código debe tomar dos argumentos n
y k
. A continuación, debe pasar con avidez por estos conjuntos múltiples en orden ordenado y generar las partes de la lista. Para el caso n=5, k=3
, la partición correcta es:
(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4)
(0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 1, 4)
(0, 2, 2), (0, 2, 3), (0, 2, 4)
(0, 3, 3), (0, 3, 4)
(0, 4, 4)
(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4)
(1, 2, 2), (1, 2, 3), (1, 2, 4)
(1, 3, 3), (1, 3, 4)
(1, 4, 4)
(2, 2, 2), (2, 2, 3), (2, 2, 4)
(2, 3, 3), (2, 3, 4)
(2, 4, 4)
(3, 3, 3), (3, 3, 4)
(3, 4, 4), (4, 4, 4)
Aquí hay otro ejemplo para n = 4, k = 4
.
(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 0, 2), (0, 0, 0, 3)
(0, 0, 1, 1), (0, 0, 1, 2), (0, 0, 1, 3)
(0, 0, 2, 2), (0, 0, 2, 3)
(0, 0, 3, 3)
(0, 1, 1, 1), (0, 1, 1, 2), (0, 1, 1, 3)
(0, 1, 2, 2), (0, 1, 2, 3)
(0, 1, 3, 3)
(0, 2, 2, 2), (0, 2, 2, 3)
(0, 2, 3, 3), (0, 3, 3, 3)
(1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 1, 3)
(1, 1, 2, 2), (1, 1, 2, 3)
(1, 1, 3, 3)
(1, 2, 2, 2), (1, 2, 2, 3)
(1, 2, 3, 3), (1, 3, 3, 3)
(2, 2, 2, 2), (2, 2, 2, 3)
(2, 2, 3, 3), (2, 3, 3, 3)
(3, 3, 3, 3)
Aclaración de lo que significa codicioso: para cada conjunto múltiple, a su vez, buscamos si se puede agregar a la parte existente. Si puede, lo añadimos. Si no puede, comenzamos una nueva parte. Observamos los conjuntos múltiples en orden ordenado como en el ejemplo dado anteriormente.
Salida
Puede generar la partición en cualquier formato sensible que desee. Sin embargo, los conjuntos múltiples deben escribirse horizontalmente en una línea. Es un conjunto múltiple individual que no debe escribirse verticalmente ni distribuirse en varias líneas. Puede elegir cómo separar la representación de las partes en la salida.
Supuestos
Podemos suponer eso n >= k > 0
.
(0, 4, 4)
por qué está solo? Dada su descripción, creo que su "parte" sería (0, 4, 4), (1, 4, 4), (2, 4, 4), (3, 4, 4), (4, 4, 4)
. Del mismo modo para (0, 0, 3, 3)
en el segundo caso de prueba.