Definition: Die Potenzmenge (M) einer Menge M ist die Menge aller Teilmengen von M:
(M) = { T | T ⊆ M }
Die Potenzmenge der leeren Menge ∅ ist die Menge
(∅) = {∅}
Die leere Menge enthält 0 Elemente, die Potenzmenge der leeren Menge enthält 1 Element. Allgemein enthält die Potenzmenge 2n Elemente, wenn die Menge n Elemente enthält, wobei n ∈ ℕ0.
Die folgende Funktion powerset in der Programmiersprache Python berechnet rekursiv die Potenzmenge (M) der Menge M = {1, ..., n} mit n ∈ ℕ0.
Als Ergebnis liefert beispielsweise der Aufruf powerset(1) die Liste
und der Aufruf powerset(2) die Liste
Die Ergebnisse veranschaulichen das Vorgehen der Rekursion: An die einzelnen Listen von powerset(1) wird jeweils noch das Element 2 angehängt, und diese neu entstandenen Listen werden zusätzlich an powerset(1) angehängt. Mit jedem Rekursionsschritt verdoppelt sich die Anzahl der Listen, sodass deren Anzahl korrekterweise der Zweierpotenz des jeweiligen Arguments n entspricht.
Definition: Eine Partition einer Menge M ist eine Menge P von nichtleeren, paarweise disjunkten Teilmengen von M, deren Vereinigung M ergibt.
P ⊆ (M) ist eine Partition, wenn gilt
Beispiel: Wenn M = {1, 2, 3} ist, so ist beispielsweise
P = { {1, 2}, {3} }
eine Partition der Menge M.
Alle Partitionen der Menge M = {1, 2, 3} sind
{ {1, 2, 3} } |
{ {1, 3}, {2} } |
{ {1, 2}, {3} } |
{ {1}, {2, 3} } |
{ {1}, {2}, {3} } |
Definition: Die Anzahl der k-elementigen Partitionen einer Menge mit n ∈ ℕ Elementen wird mit Sn,k bezeichnet, dies ist die sogenannte Stirling-Zahl zweiter Art (nach J. Stirling).
Die Aufzählung des obigen Beispiels zeigt, dass es für eine Menge mit 3 Elementen eine 1-elementige Partition gibt, drei 2-elementige Partitionen und eine 3-elementige Partition.
Die folgende Tabelle enthält die Stirling-Zahlen zweiter Art Sn,k für Mengen mit n = 1, ..., 6 Elementen. In den Zeilen ist n abgetragen, in den Spalten k. Beispielsweise gilt S5,2 = 15 oder, wie oben gesehen, S3,2 = 3.
In der letzten Spalte, die mit B überschrieben ist, steht jeweils die Summe der Stirling-Zahlen der betreffenden Zeile. Diese Zahlen heißen bellsche Zahlen (nach E.T. Bell). Die bellsche Zahl Bn gibt die Anzahl aller unterschiedlichen Partitionen einer Menge M mit n Elementen an. So ist beispielsweise B3 = 5, denn es gibt wie oben gesehen 5 unterschiedliche Partitionen einer Menge mit 3 Elementen.
Die bellschen Zahlen erscheinen als Folge A000110 in der Online Encyclopedia of Integer Sequences (OEIS).
1 | 2 | 3 | 4 | 5 | 6 | B | |
---|---|---|---|---|---|---|---|
1 | 1 | 1 | |||||
2 | 1 | 1 | 2 | ||||
3 | 1 | 3 | 1 | 5 | |||
4 | 1 | 7 | 6 | 1 | 15 | ||
5 | 1 | 15 | 25 | 10 | 1 | 52 | |
6 | 1 | 31 | 90 | 65 | 15 | 1 | 203 |
Die Vorgehensweise ist ähnlich wie bei der Berechnung der Potenzmenge, nämlich rekursiv, indem ausgehend von den Partitionen der Menge {1, ..., n-1} die Partitionen der Menge {1, ..., n} berechnet werden. Neue Partitionen der Menge {1, ..., n} entstehen, indem für jede Partition der Menge {1, ..., n-1}
Die folgende Funktion partitions(n) berechnet die Menge aller Partitionen der n-elementigen Menge M = {1, ..., n}.
Als Ergebnis liefert beispielsweise der Aufruf partitions(1) die Liste
also eine Liste, die nur eine Partition enthält, die nur aus der Liste [1] besteht. Der Aufruf partitions(2) ergibt die Liste
mit den zwei Partitionen {{1}, {2}} und {{1, 2}}. Der Aufruf partitions(3) ergibt die Liste
bestehend aus 5 Partitionen.
Unter powerset-partitions.ipynb steht ein jupyter-Notebook zum Ausprobieren zur Verfügung.