2017-06-09 8 views
0

ご迷惑をおかけして申し訳ございません。私はそれ以外にどこに尋ねるべきか分からなかった!インプレースシャッフルのこの実装は「統一されていますか?

私はフィッシャー・イェーツ・シャッフルを見つけましたが、私が思ったこの最初のシャッフルが均一かどうかを知りたいのですか?私は確率で最大ではない..または数学...ハ。

アイデアはかなりシンプルです。配列内にある要素数だけ、ランダムに2つを選択し、互いに入れ替えます。ループの各反復は、変更のためのインデックスのn^2組み合わせを与え、そしてnは反復がn^(2n)バリアントを与えるが、この値はので、いくつかの順列が他より高い確率を持っています、n>2のために均等にn!順列を分割しない

function inPlaceShuffle(arr) { 
    const floor = 0, 
      ceil = arr.length - 1; 

    let i = arr.length; 

    while (i > 0) { 
     swap(arr, getRandom(floor, ceil), getRandom(floor, ceil)); 

     i--; 
    } 

    return arr; 
} 

function swap(arr, firstIndex, secondIndex) { 
    const temp = arr[firstIndex]; 
    arr[firstIndex] = arr[secondIndex]; 
    arr[secondIndex] = temp; 
} 

function getRandom(floor, ceil) { 
    floor = Math.ceil(floor); 
    ceil = Math.floor(ceil); 
    return Math.floor(Math.random() * (ceil - floor + 1)) + floor; 
} 

答えて

0

注意。

クリア例:
{1,2,3}の6つの順列のための729回の結果は、ある 729/121 = 6ので、順列の確率が変化します。

関連する問題