Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#17

Re: Array sortieren mit Permutationen..

  Alt 12. Mär 2010, 18:22
Das dürfte rekursiv leichter zu lösen sein:
Code:
function Kombis(kz, sz, i : Integer) : Integer
  if i = ol.Length then
    Exit(1)

  nPerms := ol[i].Permutationen.Length
  for j = 0 to nPerms - 1 do
    nUnterkombis := Kombis(kz+j, sz + nPerms, i + 1)
    for kz' = kz + j to kz + nUnterkombis - 1 do
      Kopiere permutation nach [kz',sz]

  Exit(nPerms * nUnterkombis)
Keine Ahnung, ob das verständlich ist, also mal ein Beispiel :
Wir haben zwei Priolisten [a,b] und [c,d]. Wir beginnen bei Kombis(0, 0, 0): nPerms von [a,b] ist 2, die erste Permutation der ersten Liste ist [a,b] und wir rufen Kombis(0, 2, 1) auf.
Darin ist nPerms wieder 2, die erste Permutation [c,d]. Für diese rufen wir Kombis(0, 4, 2) = 1 auf, kopieren [c,d] also nur nach [kz+j=0, 2].
Für [d,c] ist kz+j = 1, unterkombis wieder 1, also wird nach [1,2] kopiert.
Code:
- - c d
- - d c
- - - -
- - - -
Wir kehren mit dem Ergebnis 2 * 1 zu i = 0 zurück, [a,b] wird also nach [0+0,0] und [0+1,0] kopiert.
Code:
a b c d
a b d c
- - - -
- - - -
Weiter geht's mit [b,a]...
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat