Permutace (Algoritmus)
Z Wikipedie, otevřené encyklopedie
Algoritmus pro nalezení všech permutací znaků (bez opakování, v jazyku Java)
public static List<String> permutaceBezOpakovani(String pouzitelneZnaky) { List<String> list = new ArrayList<String>(faktorial(pouzitelneZnaky.length())/*(1)*/); if (pouzitelneZnaky.length() == 1) { /*(2)*/ list.add(pouzitelneZnaky); return list; } for (int i = 0; i < pouzitelneZnaky.length(); i++) { /*(3)*/ char c = pouzitelneZnaky.charAt(i); List<String> l = permutaceBezOpakovani(vynechatCharAt(pouzitelneZnaky, i)/*(4)*/); for (String podPerm/*(5)*/ : l) { list.add(c + podPerm); /*(6)*/ } } return list; }
- Počet permutací bez opakování je dán jako faktoriál použitelných prvků. Tato metoda v Javě standardně není, viz Faktoriál_(Algoritmus)
- Permutací jedinného prvku je jednoprvková množina, obsahující právě tento prvek
- Každý znak se musí vyskytovat na prvním místě, za ním jsou pak další permutace zbývajících znaků (předpokladem je rekurze)
- Metoda vynechatCharAt - jde o inverzi metody charAt ze třídy String, vrací celý vzorový řetězec, s výjimkou příslušného znaku.
- podPerm = postupně každý z řetězců vrácených permutací o úroveň níže.
- Přidá do výstupního (vraceného) seznamu příslušný prvek.

