Permutation mit wiederholung

Status
Nicht offen für weitere Antworten.
P

paidopoieo

Gast
Hallo Leute

Ich bin leider kein grosser Java Programmierer, braeuchte jedoch einen Algorithmus der Permutation mit Wiederholung implementiert.
Ich habe bereits im Netz gesucht, jedoch leider nur einen Algo gefunden der Permutation ohne Wiederholung implementiert.
Er sollte auch faehig sein, wenn ich z.b: abcd eingebe, das er mir bbacccdd, oder cdbbadcaa ausgibt, also bei vier eingegebenen buchstaben ich auch noch angeben kann, wie lang die permutation sein soll

den Code den ich gefunden habe lautet folgend:
waere aeusserst hilfreich und nett wenn mir jemand sagen koennte was ich aendern muss, um das oben erwaehnte zu erreichen.

Code:
class Permutation
{ static int maxIndex;
  static char[] feld;
  static String s;

  static void ausgabe(char[] a)
  {  for (int i=0; i<=maxIndex; i++) Out.print(a[i]);
     Out.print(" ");
  } //  ausgabe

  static void vertausche(char[] a, int i, int j)
  {  char ablage = a[i];
     a[i] = a[j];
     a[j] = ablage;
  } // vertausche

  static void perm(char[] a, int endIndex)
  {  if (endIndex==0)
            ausgabe(a);
     else { perm(a, endIndex-1);
            for (int i=0; i<=endIndex-1; i++)
            {  vertausche(a, i, endIndex);
               perm(a, endIndex-1);
               vertausche(a, i, endIndex);
            } // for i
          }
  } // perm

  public static void main(String args[]) // Hauptprogramm
  { Out.println("Ein String soll permutiert werden.");
    Out.print("Geben Sie den zu permutierenden String ein: ");
    s = In.readLine();
    maxIndex = s.length()-1;
    feld = s.toCharArray();
    perm(feld, maxIndex);
  } // Ende von main
} // Ende von class Permutation


vielen herzlichen dank im voraus

lg
 

Bleiglanz

Gesperrter Benutzer
Code:
 wenn ich z.b: abcd eingebe, das er mir bbacccdd


bbacccdd    // 8 Zeichen
cdbbadcaa  // 9 Zeichen
was soll er denn ausgeben? steht die Länge der zu erzeugenden Permutation schon fest oder was...
 

Mag1c

Top Contributor
Hi,

sowas in der Art ? :

Code:
private static void permRek (char[] auswahl, char[] buf, int index) {
    if (index == buf.length) {
        System.out.println(buf);
    }
    else {
        for (int i=0; i < auswahl.length; i++) {
            buf[index] = auswahl[i];
            permRek(auswahl, buf, index+1);
        }
    }
}

public static void permutation (String auswahl, int anzahl) {
    permRek(auswahl.toCharArray(), new char[anzahl], 0);
}

public static void main (String[] args) {
    permutation("abcd", 8);
}

Gruß
Mag1c
 

Bleiglanz

Gesperrter Benutzer
oder
Code:
    public static void main(String[] args) {
        System.out.println(perm("abcd", 12));
    }

    public static String perm(final String source, final int len) {
        final Random rnd = new Random();
        final char[] perm = new char[len];
        final int sourcelength = source.length();
        for (int i = 0; i < len; i++) {
            perm[i] = source.charAt(rnd.nextInt(sourcelength));
        }
        return String.valueOf(perm);
    }
 
H

Hubert

Gast
Hallo Mag1c

wenn ich deinen Code richtig verstehe, dann kann ich einen string beliebiger Laenge uebergeben, und auch die Laenge der zu erzeugenden Permutation angeben.
Stimmt das so


lg
Hubert
 
H

Hubert

Gast
Hallo Leute

Ich denke schon das es das ist was ich brauche, leider hab ich zur zeit nicht die moeglichkeit durchzutesten, ob es wirklich das ist.
auf jedenfall vielen herzlichen Dank fuer eure hilfe, ich denke ich werde in ungefaehr drei bis vier tagen faehig sein, das ganze auszuprobieren.

ich melde mich dann nochmal

vielen dank im voraus

lg
Hubert
 

Mag1c

Top Contributor
Hubert hat gesagt.:
Hallo Mag1c

wenn ich deinen Code richtig verstehe, dann kann ich einen string beliebiger Laenge uebergeben, und auch die Laenge der zu erzeugenden Permutation angeben.
Stimmt das so


lg
Hubert

genau so ist das. Es dürfen in dem String keine Zeichen doppelt vorkommen, dann stimmts nicht mehr.

Gruß
Mag1c
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben