let permute ?random_state t =
let state =
match random_state with
| None -> Random.get_state ()
| Some state -> state
in
let len = Array.length t in
for i = 0 to len - 2 do
let j = i + Random.State.int state (len - i) in
swap t i j;
done;
if random_state = None then Random.set_state state