Implémentation de l'ensemble des parties (Powerset) en Python
Pour implémenter l'algorithme de l'ensemble des parties en Python, nous pouvons utiliser une approche récursive ou une approche itérative. Voici un exemple de chaque méthode :
Approche récursive
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]
Cette fonction prend un ensemble s
en entrée et renvoie son ensemble des parties. La fonction fonctionne en générant de manière récursive l'ensemble des parties de tous les éléments sauf le dernier, puis en ajoutant le dernier élément à chacun de ces sous-ensembles.
Voici un exemple d'utilisation :
>>> powerset({1, 2, 3})
[set(), {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}]
Approche itérative
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
Cette fonction prend également un ensemble s
en entrée et renvoie son ensemble des parties. La fonction fonctionne en commençant par l'ensemble vide, puis en ajoutant itérativement chaque élément de l'ensemble original aux sous-ensembles existants.
Voici un exemple d'utilisation :
>>> powerset({1, 2, 3})
[set(), {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}]
Ces deux approches ont une complexité temporelle de O(2^n), où n est le nombre d'éléments de l'ensemble original, car l'ensemble des parties d'un ensemble avec n éléments contient 2^n éléments.