Wie generieren Sie die power-set aus einer vorgegebenen Liste?

Ich versuche zu generieren, die eine Sammlung aller 2^N - 1 mögliche Kombinationen eines gegebenen Liste der Länge N. Die Sammlung anzeigen der Anzahl von Elementen in einer Kombination, um eine geordnete Liste von Kombinationen mit Kombinationen der bestimmten Länge. Zum Beispiel, für die Liste:

[A, B, C, D]

Möchte ich zum generieren der Karte:

{
    1 -> [{A}, {B}, {C}, {D}]
    2 -> [{A, B}, {A, C}, {A, D}, {B, C}, {B, D}, {C, D}]
    3 -> [{A, B, C}, {A, B, D}, {A, C, D}, {B, C, D}]
    4 -> [{A, B, C, D}]
}

Den generierten Datenbank sollte erhalten die original-Reihenfolge (wo [] stellt eine geordnete Reihe (List), und {} stellt eine un-geordnete Gruppe (Set)), und führen Sie so schnell wie möglich.

Ich kämpfte mit einigen rekursiven code den ganzen Tag (ich weiß, die Umsetzung sollte rekursiv sein), aber konnte nicht auf den Grund gehen.

Gibt es eine Referenz, die ich verwenden kann/eine fertige Implementierung eines solchen Algorithmus?

  • Ich bin mir nicht sicher, Rekursion ist besonders hilfreich für dieses problem. Versuchen Sie, darüber nachzudenken iterativ statt für ein bisschen.
  • Wenn Sie es tun, iterativ, beachten Sie, dass Sie erzeugen kann die Größe i und Größe N-i Listen gleichzeitig. Denken in Bezug auf die Partitionierung der Liste in zwei Teilmengen, und das hinzufügen jede Teilmenge einer Ihrer Listen.
  • Das ist ein interessanter Ansatz, werde ich prüfen.
  • Bin ich die Abstimmung schließen diese Frage, da es angefordert wird, von der off-site-resource.
InformationsquelleAutor Elist | 2014-01-05
Schreibe einen Kommentar