Es ist mir nicht klar, in welcher Form Ihr VB-Code die von ihm erzeugten Kombinationen zurückgeben soll, aber nehmen wir zur Vereinfachung eine Liste von Listen an. VB erlaubt Rekursion, und eine rekursive Lösung ist am einfachsten. Das Ausführen von Kombinationen anstelle von Permutationen kann leicht erreicht werden, indem einfach die Reihenfolge der Eingabeliste respektiert wird.
Also sind die Kombinationen von K Elementen aus einer Liste L, die N Elemente lang sind:
- keine, wenn K & gt; N
- die ganze Liste L, wenn K == N
- falls K & lt; N, dann die Vereinigung von zwei Bündeln: diejenigen, die den ersten Gegenstand von L und irgendeine der Kombinationen von K-1 der anderen N-1 Gegenstände enthalten; Plus, die Kombinationen von K der anderen N-1 Elemente.
Im Pseudocode (z. B. .size, um die Länge einer Liste anzugeben, [] als leere Liste, .app, um ein Element zu einer Liste hinzuzufügen, .head, um das erste Element einer Liste zu erhalten, .tail um die Liste zu erhalten "alle außer den ersten" von L):
%Vor%Dieser Pseudocode kann präziser gestaltet werden, wenn Sie eine flexiblere Listenmanipulationssyntax annehmen. Zum Beispiel in Python ("ausführbare Pseudocode") mit "Slicing" und "Liste Verständnis" -Syntax:
%Vor%Ob Sie ausführlich Listen mit wiederholtem .append konstruieren müssen oder sie kompakt nach Listenverständnisnotation konstruieren können, ist ein Syntaxdetail (ebenso wie die Wahl von Kopf- und End- vs. Listen-Slicing-Notation, um das erste Element der Liste zu erhalten) vs. der Rest): Der Pseudocode soll genau dieselbe Idee ausdrücken (was auch die gleiche Idee ist, die in der vorherigen nummerierten Liste auf Englisch ausgedrückt wird). Sie können die Idee in jeder Sprache implementieren, die rekursiv ist (und natürlich einige minimale Listenoperationen! -).