# Permutation mit wiederholung



## paidopoieo (12. Okt 2005)

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.


```
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 (12. Okt 2005)

```
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 (12. Okt 2005)

Hi,

sowas in der Art ? :


```
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 (12. Okt 2005)

oder

```
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);
    }
```


----------



## Hubert (12. Okt 2005)

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


----------



## Hubert (12. Okt 2005)

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 (12. Okt 2005)

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
> ...



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

Gruß
Mag1c


----------

