プログラム

http://d.hatena.ne.jp/KZR/20081203
を読んでショック
私は最近やってないけどカジノゲーム解析を趣味にしてて、いろんなゲームの期待値や戦略を解析的だったりシミュレーションだったりで分析するプログラムをいくつも作ってたんだけど、その中のシミュレーション部分で最初にやるのがトランプのシャッフルだったりする。特殊な場合(シャッフル自体をシミュレーションする場合とか)以外はずっと「シンプルな方法」を取っていた...
なんでこれ

for(int i=0;i<N;++i){
    int t = random(N);
    int x = table[t];
    table[t] = table[i];
    table[i] = x;
}

でダメなんだ...元記事(http://www.codinghorror.com/blog/archives/001015.html)を読んでも納得いかないので確認してみる
123
の最初の1をどれかと交換すると
123
213
321
の3通りが発生、次に真ん中の数字を交換すると
123 -> 213 / 123 / 132
213 -> 123 / 213 / 231
321 -> 231 / 321 / 312
の9通りが発生。最後に最後の数字を交換すると、
312 231 213 / 321 132 123 / 231 123 132
321 132 123 / 312 231 213 / 132 213 231
132 213 231 / 123 312 321 / 213 321 312
の27通りが発生
つかー、123の並び替えは3! = 6だから27とか割り切れないじゃん。すでにおかしいじゃん
数えてみると、
312 4
321 4
231 5
213 5
132 5
123 4
で記事の通り...そーかー。気が付かなかった。ちょっとショック