時田です
非復元無作為抽出のほうは話題に入っていないのでシャッフルの方の話を・・w


カードのシャッフルの場合、乱れというか 切り方の種類を組み合わせたり
バリエーションを交えてランダマイズされるように工夫することもありますね。


永井さんのshuffle1のように、真ん中の部分集合を上に重ねる方法や
shuffle2のように、2つに分けた集合を互い違いに混ぜ合わせる方法や
カードを下に置いて 手でぐるぐるかき回して混ぜ合わせる方法
山を2つに分けて上下を入れ替える(主に他人に切れ目を入れさせる)


で、一番メジャーな 山を2つに分けて、下の山を上に持って行き、
さらに 今、分けて上に移動した部分集合に対して、2つに分けて下の部分を上
に移動。
それを繰り返して、上に移動する部分集合が十分小さくなったら
全体に対して、同じ操作を繰り返す。

シャッシャッシャッ、シャッシャッシャッシャッ、シャッシャッシャ
というような擬音で表現される切り方ですね。

山全体を2つに分けて上下を入れ替える事を繰り返すだけでは、
ローテーションするだけなので、
分けた片方に対して、更に分割入れ替えを行うのでローテーションが起こらない
し
最初の「シャッシャッシャッ」では2分割されただけで、あまり混ざっていなかっ
た部分は山の下の方にあるので
2度目以降の「シャッシャッシャ」で混ざりやすくなる。

わかってみると、なるほどなって感じでした


[ruby-list:40902]のソースで配列を (0..10000).to_a で、timeも10000にして
複数回試行してみると、初期の並び(array[x]+1 == array[x+1])は0〜5箇所程度

逆に 52枚のトランプにtime=10(私の感覚で、まぁ切れたかなと感じる程度)
では array[x]+1 == array[x+1] が半数程度残っている感じでしたw

まぁトランプの場合は、適度に切って、ある程度混ぜ合わせた後に、各メンバー
に
順番に渡す場合が多いので問題になる事は少ないかなw