nikolausdulgeridis
  Permutationen
 

Permutationen erzeugen


I) Permutationen per Rekursion erzeugen

Ein einfaher Ansatz besteht darin die Eingabe-Liste zu rotieren, um jedes
Element genau einmal zu verwenden:
### permutationen_von {1,2,3}
=== 1+ permutationen_von {23}
=== 2+ permutationen_von {31}
=== 3+ permutationen_von {12}

Sollen die Permutationen sortiert vorliegen, darf man nicht rotieren:
### permutationen_von {1,2,3}
=== 1+ permutationen_von {23}
=== 2+ permutationen_von {13}
=== 3+ permutationen_von {12}

II) Permutationen iterativ erzeugen

Ein alternativer Ansatz besteht darin, die Permutationen in eine lexikalische
Ordnung zu bringen. Ein Vorteil dieser Loesung besteht darin, dass es
moeglich ist zu jedem Element einen Nachfolger zu ermitteln.

Beschreibung:
Sortiert man eine Ziffernfolge 123-132-213-231-312-321 ergibt sich eine
natuerliche Ordnung entsprechend dem Zahlenwert der Kombination. Wie man sieht, 
ist das Ergebnis eine Umkehrung der Sortierung.

Vorgehensweise: --------------------------- 1432 ecfdba 123 132
1. pruefe sortierung (von re nach li) ----- -432 --fdba --3 -32
2. umbruch bei ---------------------------- 1--- -c---- -2- 1--
3. naechstgroesserer Wert aus rechter liste ---2 ---d-- --3 --2
4. tausche -------------------------------- 2431 edfcba 132 231
5. sortiere rechte liste (reverse) -------- 2134 edabcf 132 213

siehe auch: 
- http://www.matheboard.de/archive/4255/3/thread.html
- http://www.c-plusplus.de/forum/viewtopic...-is-178286.html
- http://www.cplusplus.com/reference/algorithm/next_permutation/
- https://www.nayuki.io/page/next-lexicographical-permutation-algorithm


Beispiel: Permutation (JavaScript)

Permutation .
Rotation Sortierung Lexikalisch
rot
sort
lex
<script>
/* Permutation mit Rotation */
permrotat (' ','abc'); 
function permrotat(l,r)
 {
  if(r.length <= 0) {document.write(l)};
  for(var i=0; i < r.length; i++)
   {
   permrotat(l+r.substr(0,1), r.substr(1));  
   r = r.substr(1) + r.substr(0,1) /*rotiere*/
   }
  return;
 }
</script>


Last updated 18.3.2016
 
  20 Besucher