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

Schreibe einen Kommentar