2016-08-07 54 views
1

i eine zufällige Permutation der Elemente einer Liste erzeugen whant, Beispiel:eine zufällige Permutation der Elemente einer Liste OCaml

listString = ["a"; "b"; "c"; "d"; "e"; "f"] 

i whant so etwas wie:

result = ["a"; "e"; "f"; "b"; "d"; "c"] 

aber die Ergebnisänderung bei jedem Aufruf der Funktion. So wenn ich die Funktion in der zweiten Mal Rückkehr etwas nennen wie:

result = ["c"; "d"; "b"; "f"; "e"; "a"] 
+0

Mögliches Duplikat von [Wie shuffle Liste in O (n) in OCaml?] (Http://stackoverflow.com/questions/15095541/how-to-shuffle-list-in-on-in-ocaml) – hugomg

+0

Das sehe ich, aber diese Funktion wiederholt die gleiche Permutation in jedem Aufruf dieser Funktion. Ich versuche, ein zufälliges int 'n' zu erzeugen und benutze diese Funktion n mal mesh. –

+0

Jetzt macht Random.int immer die gleiche Nummer:/ –

Antwort

1

fand ich die Lösung:

let shuffle d = begin 
    Random.self_init(); 
    let nd = List.map (fun c -> (Random.bits(), c)) d in 
    let sond = List.sort compare nd in 
    List.map snd sond 
end 

die Linie Random.self_init(); Initialisieren Sie den Generator mit einem zufallsabhängigen Startwert, der systemabhängig ausgewählt wird.

+0

Sie möchten den RNG wahrscheinlich nur einmal initialisieren, zu Beginn Ihres Programms (und außerhalb der Shuffle-Funktion). – hugomg