小波です。みなさん,どうもありがとうございます。

考えてみると,私の当初の意図は非復元無作為抽出で,それをshuffle という名
前のメソッドにしたところが,ちょっと誤解のもとだったようです。

非復元抽出の方は,要素を一個ランダムに抜き取っては,「母集団」の配列から
その要素を消し去っていくというアイディア(小波原案,なかださん改訂)が
まあ基本でしょう。

たけ(tk)さんの sort_by(rand) はそうでなくていきなりのランダマイズで,そ
の短さにびっくり。知らなかったのですが 1.8.0 からの追加機能なんですね。

一方,シャッフルというのは,カードをランダムな分け目で分割してから,後半
を前半の前に置いてやるのがよく知られた手順です。この方向で考えてくださっ
た人がいたので,かえって面白くなりました。(時田さん,永井さん,なかださん)

このようなシャッフルでは,カードの並びの構造を,もし最後のカードの下に
トップのカードがあるという環状の構造とみなすと,いくらやっても順序は
変更されないということになります。じっさい,途中で順序の反転を入れてない
ものでは,ぐるぐる回りが発生します。

実際のシャッフルは,もう少し乱れの要素が入っていて,カードの塊の抜き取り
を,下のほうではなくて,中ほどからおこなっているようです。このことによっ
て幾分かのランダマイズが行われます。それをしつこくやることで十分な,ある
いは「ほどよい」ランダマイズを達成しているわけです。実際にカードゲームを
シミュレートしようとすると,こういう処理でリアリティを出すことになるかも
知れません。

安達さんのも,ランダムなスワップを繰り返すという部分的なランダマイズが基
本ですから,どの程度の回数繰り返せば十分なランダマイズになるのかに
興味を持って,統計的検定などを試みたのです。要素の数程度のスワップを
繰り返せば完璧にランダマイズされることがわかったのは,ちょっとした驚
きでした。

そんなわけで,私はガキのごとくに単純な好奇心野郎なので,ご不快を感じさせ
たとしたらごめんなさい>安達さん

と,なんだかえらそうに書いているように思われそうですが,みなさんのソース
はぜんぶ読ませていただいて,実行してみました。これはとても勉強になりまし
た。ありがとうございます。