Gegeben ist eine Menge mit n unterschiedlichen Elementen. Man will nun alle möglichen Kombinationen (ohne Wiederholungen, ohne Reihenfolge) aus diesen Elementen mit k < n Elementen bilden. Davon gibt es laut Kombinatorik genau n über k.
Beispiel:
Gegeben: Menge M = {1, 2, 3, 4, 5}, n = 5, k = 3.
Gesucht: Alle Kombinationen aus M mit 3 Elementen: {{1, 2, 3}, {1, 2, 4}, {1, 2, 5}, {1, 3, 4}, {1, 3, 5}, {1, 4, 5}, {2, 3, 4}, {2, 3, 5}, {2, 4, 5}, {3, 4, 5}}.
Ob die Ausgabe eine Liste ist oder sonstiges ist egal. Wichtig ist folgendes: Ich muss diese Art von Mengen berechnen mit Zahlen wie zB n = 56 und k = 13. 56 über 13 ergibt 1,8 Billionen. Ich will zB, dass diese 1,8 Billionen Ergebnisse einzeln ausgegeben werden. Also nicht am Ende eine Liste, sondern 1,8 Billionen mal die einzelne geprintet. Ausserdem soll das ganze so effizient wie moeglich sein. Bisher habe ich eine Variante die so funktioniert:
from itertools import permutations
for indices in permutations(range(n), k):
if sorted(indices) == list(indices):
print(indices)
Das funktioniert, jedoch werden in der ersten For-Schleife alle Kombinationen berechnet mit Beachtung der Reihenfolge. Das ist VIEL zu ineffizient.
Kann mir jemand helfen?