Programming

UnityでFisher-Yatesシャッフル

Programming
スポンサーリンク

実装してみました。
ランダムに2か所を選んで並べ替えを要素数だけ繰り返す処理(以下、ランダム抽出)と、Fisher-Yates Shuffleアルゴリズムの2つを比較しています。

UnityでFisher Yatesアルゴリズムを試してみた

動画では300回シャッフルを試してみました。
これだけだと何が起きているのか全く分からないですね…。「偏りでてるなー」とか分かったら間違いなく超人w
30FPS(可変)で毎フレーム並べ替えを実行しているので、だいたい10秒くらいかかりました。

頻出数が最も多いパターンと少ないものでの偏差を比較したところ、ランダム抽出で約6.3%(=19回)、Fisher-Yatesで約4.3%(=13回)でした。
意外とどちらも差があるように見えますが、試行回数が少なかったので偏りが出る結果となりました。実際、試行回数を1000回に増やしたところランダム抽出で5.3%、Fisher-Yatesで2.2%となり、更に回数を増やせば(Fisher-Yatesでの)偏りはさらに少なくなります。
実行するごとに結果は変わるので、試行回数ごとに平均をとって見比べてみたいですね。

近々、実装方法などもまとめる予定です。

タイトルとURLをコピーしました