Implementando el conjunto potencia (Powerset) en Python
Para implementar el algoritmo del conjunto potencia en Python, podemos utilizar un enfoque recursivo o un enfoque iterativo. Aquí tienes un ejemplo de cada uno:
Enfoque recursivo
def powerset(s):
"""
Returns the powerset of a given set s.
"""
if not s:
return [set()]
all_but_last = powerset(s[:-1])
last = s[-1]
return all_but_last + [x | {last} for x in all_but_last]
Esta función toma un conjunto s
como entrada y devuelve su conjunto potencia. La función funciona generando recursivamente el conjunto potencia de todos los elementos excepto el último, y luego agregando el último elemento a cada uno de esos subconjuntos.
Aquí tienes un ejemplo de uso:
>>> powerset({1, 2, 3})
[set(), {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}]
Enfoque iterativo
def powerset(s):
"""
Returns the powerset of a given set s.
"""
powerset = [set()]
for elem in s:
powerset += [subset | {elem} for subset in powerset]
return powerset
Esta función también toma un conjunto s
como entrada y devuelve su conjunto potencia. La función funciona comenzando con el conjunto vacío y luego agregando iterativamente cada elemento del conjunto original a los subconjuntos existentes.
Aquí tienes un ejemplo de uso:
>>> powerset({1, 2, 3})
[set(), {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}]
Ambos enfoques tienen una complejidad temporal de O(2^n), donde n es el número de elementos del conjunto original, ya que el conjunto potencia de un conjunto con n elementos contiene 2^n elementos.