配列をランダムに並び替える
概要
ゲームではランダムな要素を多く利用する。
その中で、配列をランダムに並び替えることがたまにある。 適当に並び替えると偏るのでちゃんとしたアルゴリズムを使おう。 ユースケース
トランプのデッキをシャッフルする(TCGや麻雀なども同じ)
1~10の中からランダムに3つ選択する
random(10)を3回、という手法では結果が重複してしまう可能性があるので、そういった問題を回避する場合なんかに利用できる
アルゴリズム
実装はWikipedia内でいう「改良されたアルゴリズム」のほう
乱数の質が良ければ生成結果も偏りが無いことが保証されるらしい
計算量はO(n)
処理も早く効率的だが、問題点もある(乱数の質に起因する)
大きい配列を並び替える場合は注意
乱数にMTを使う場合、2080を超える配列のシャッフルに偏りがでる
詳細はWikipedia参照
code:js
function ShuffleArray(source){
var n = source.length;
while (n > 0) {
var i = Math.floor(Math.random() * n);
n--;
}
return source;
}