確率統計確率統計
フィッシャー・イェーツのシャッフルアルゴリズム; Fisher-Yetes Shuffle

概要
配列をランダムにシャッフルする手順は以下のようになる。

Input: 要素数が\(N\)の配列(添字は\(0 \ldots N-1\)) Output:シャッフルされた配列
・\(i \)を\(N-1 \)から\(1\)へ減少させながら以下を行う。
  \(0\)以上\(i\)以下のランダムな整数を\(j \)に代入する
  配列の\(i, j \)番目を交換する


ソースコード

namespace ExRandom {
    public static class RandomUtilitys {
        public static void Shuffle<T>(MT19937 mt, T[] array) {
            if(mt == null || array == null) {
                throw new ArgumentNullException();
            }

            Discrete.DiceRandom rd;

            for(int i = array.Length - 1, j; i >= 1; i--) {
                rd = new Discrete.DiceRandom(mt, i + 1);

                j = rd.Next();

                T swap = array[j];
                array[j] = array[i];
                array[i] = swap;
            }
        }
    }
}

関連項目
メルセンヌ・ツイスタ
各種確率分布サンプリング基本クラス
正確なN面サイコロ

ライブラリライブラリ
確率統計確率統計
線形代数線形代数
幾何学幾何学
最適化最適化
微分方程式微分方程式
画像処理画像処理
補間補間
機械学習機械学習
クラスタリングクラスタリング
パズルゲーム・パズル
未分類未分類