Los conjuntos de particiones en python
la tarea en cuestión es dividir un conjunto dado de elementos en todos los subconjuntos posibles. Por ejemplo, la división del conjunto [1, 2, 3] produce los siguientes subconjuntos:
[[1], [2], [3]] [[1,2], [3]] [[1], [2,3]] [[1,3], [2]] [[1,2,3]]
Solución recursiva
para este problema es la recursión. Dada una partición de los elementos N-1, podemos extenderla para crear una partición de n elementos al incluir el enésimo elemento en uno de los subconjuntos existentes o crear un nuevo subconjunto de singleton que contenga solo el elemento nth.
Este algoritmo recursivo se divide de manera efectiva del conjunto de entrada mientras evita las salidas dupplicadas y las dependencias no en general en bibliotecas:
def partition(collection):
if len(collection) == 1:
yield [ collection ]
return
first = collection[0]
for smaller in partition(collection[1:]):
# insert `first` in each of the subpartition's subsets
for n, subset in enumerate(smaller):
yield smaller[:n] [[ first ] subset] smaller[n 1:]
# put `first` in its own subset
yield [ [ first ] ] smaller
something = list(range(1,5))
for n, p in enumerate(partition(something), 1):
print(n, sorted(p))
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3