Rekursiver Algorithmus zum finden von Kombinationen von einem Satz in Java
Ich versuche zu finden, einige Beispiele zu finden, die eine gegebene Menge s (kann eine Zeichenfolge oder ein array von ganzen zahlen) alle Kombinationen in Java. Und ich stieß auf dieses code-Stück (gefunden in http://introcs.cs.princeton.edu/java/23recursion/Combinations.java.html. Ich habe kopiert nur die entsprechenden Teile hier.):
//print all subsets of the characters in s
public static void comb1(String s) { comb1("", s); }
//print all subsets of the remaining elements, with given prefix
private static void comb1(String prefix, String s) {
if (s.length() > 0) {
System.out.println(prefix + s.charAt(0));
comb1(prefix + s.charAt(0), s.substring(1));
comb1(prefix, s.substring(1));
}
}
//read in N from command line, and print all subsets among N elements
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
String alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
String elements = alphabet.substring(0, N);
//using first implementation
comb1(elements);
System.out.println();
}
Aber ich verstehe wirklich nicht, wie es funktioniert. Hat jemand darauf zu erklären?
Ist es der code, den Sie Probleme mit, oder ist es das grundlegende Prinzip? Möchten Sie vielleicht einen Stift und Papier und gehen Sie über eine kleine Probe. Beginnen Sie mit N=2 und Folgen Sie, was der code tut mit "abc".
InformationsquelleAutor Ahmet Ikras | 2011-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java-Programme starten am main. Dieses eine argument sollte ein integer sein. Es speichert die ganze Zahl N. Wenn der Benutzer eingegeben in java und das Programm name mit
3
, dann wäre N auf 3 festgelegt. Diese wird verwendet, um ziehen Sie die ersten N Buchstaben des Alphabets, und legen Sie Sie in Elemente. (In unserem Beispielabc
). Dann ruft er comb1(abc
), das heißt, die öffentliche comb1 zuerst aufgeführt.Nächsten comb1 ruft die private comb1 mit zwei Argumenten, eine leere Zeichenfolge und
abc
.Nun die Rekursion beginnt. Private comb1 nimmt einen Präfix und einen string (im ersten Fall ein leerer string und
abc
). Wenn der string nicht leer ist, dann ist es:(Hier ist, wo viele Menschen zittern leicht... es anstarren, hängen, werden die computer, und die Bedeutung wird kommen.)
InformationsquelleAutor rajah9
Erstellen alle Kombinationen eines bestimmten Satzes ist wirklich einfach. Du hast N Elemente, in jeder der Kombinationen eine element ist entweder vorhanden oder nicht, also hast du 2^N Kombinationen. Diese rekursive Funktion macht genau das. Es wählt jedes element aus dieser Liste aus, und schafft verbindungen, die enthalten es und schafft combintations welche nicht. Hinweis: es funktioniert nicht, drucken Sie die leere Kombination.
Wenn es immer noch nicht klar, erstellen Sie eine kurze test-string (z.B.: 3 Zeichen), Feuer den debugger und sehen, wie es funktioniert.
InformationsquelleAutor Karoly Horvath