私はこの投稿がほぼ4歳であることを知っていますが、私は趣味の暗号解読者であり、トランプ暗号を研究しています。その結果、私は何度も何度もこの投稿に戻って、デッキをランダムにキーイングするためのエントロピーのソースとしてのデッキのシャッフルについて説明しました。最後に、手でデッキをシャッフルし、シャッフルごとにデッキのエントロピーを推定することで、スタキラによる回答を検証することにしました。
TL; DR、デッキエントロピーを最大化する:
- リフルシャッフルだけの場合、11〜12のシャッフルが必要です。
- 最初にデッキをカットしてからシャッフルをリフリングするには、6〜7回のカットアンドシャッフルだけが必要です。
まず、スタキラがシャノンエントロピーを計算するために言及したすべてが正しいです。この方法で煮詰めることができます:
- デッキ内の52枚の各カードに一意の値を数値で割り当てます。
- デッキをシャッフルする。
- n = 0からn = 51の場合、(n-(n + 1)mod 52)mod 52の各値を記録します
- 0、1、2、...、49、50、51の出現回数を数える
- 各レコードを52で割って正規化する
- i = 1からi = 52の場合、-p_i * log(p_i)/ log(2)を計算します
- 値を合計する
stachyraが1つの微妙な仮定をするところは、コンピュータープログラムで人間のシャッフルを実装することはいくつかの手荷物を伴うことになるということです。紙ベースのトランプでは、慣れるにつれて、手からの油がカードに移ります。オイルの蓄積により、長期間にわたってカードがくっつき始め、これが最終的にシャッフルになります。デッキを頻繁に使用するほど、隣接する2枚以上のカードがくっつく可能性が高くなり、頻繁に発生します。
さらに、2つのクラブとジャックオブハートがくっついていると考えられます。それらは、あなたのシャッフルの期間中、一緒に立ち往生し、分離することはありません。これはコンピュータープログラムで模倣される可能性がありますが、スタキラのRルーチンには当てはまりません。
また、stachyraには操作変数「mixprob」があります。この変数を完全に理解していなければ、それはブラックボックスの少しです。誤って設定すると、結果に影響を与える可能性があります。だから、私は彼の直感が正しいことを確認したかったのです。それで手作業で確認しました。
デッキを手作業で20回シャッフルしました(2つの異なるインスタンス(合計40シャッフル))。最初の例では、右と左のカットをほぼ同じに保ちながら、シャッフルしてシャッフルしました。2番目の例では、デッキの中央から意図的に離れてデッキをカットし(1 / 3、2 / 5、1 / 4など)、リフルシャッフルを均等にカットしました。2番目のインスタンスで私の直感は、シャッフルする前にデッキをカットし、中央から遠ざけることで、ストックのリフルシャッフルよりも速く拡散をデッキに導入できるということでした。
結果は次のとおりです。まず、ストレート・リフル・シャッフル:
そして、ここでは、ライフルのシャッフルと組み合わせてデッキをカットしています:
エントロピーはスタキラによる主張の約半分の時間で最大化されるようです。さらに、私が直感したとおり、最初にデッキを真ん中から慎重に切り取ってから、リフルシャッフルによってデッキにさらに拡散を導入しました。ただし、約5回のシャッフルの後は、それほど問題になりませんでした。約6〜7回のシャッフル後、エントロピーが最大化されているのがわかります。10〜12の場合、スタキラが主張されているためです。7シャッフルで十分か、私は盲目か?
私のデータはGoogleスプレッドシートで確認できます。1枚または2枚のトランプを誤って記録した可能性があるため、データの100%の精度を保証できません。
調査結果も個別に検証することが重要です。ハーバード大学数学部のブラッドマンは、デッキのカードの予測可能性が完全に予測不能になる(シャノンエントロピーが最大化される)までに、デッキのカードをシャッフルするのに何回かかるかを調査しました。彼の結果はこの33ページのPDFにあります。
彼の調査結果で興味深いのは、実際に独立して、Persi Diaconisによる1990 New York Timesの記事を検証していることです。
ブラッドマンは、マルコフチェーンを含むシャッフルのいくつかの異なる数学モデルをウォークスルーし、次の結論に達します。
これは、n = 52の場合約11.7です。つまり、この観点によれば、実際のカードのデッキをランダム化するには、平均で11または12のシャッフルが必要であると予想されます。これは実質的に7よりも大きいことに注意してください。
ブラッド・マンはスタチラの結果を独自に検証しただけで、私のものではありませんでした。それで、自分のデータを詳しく調べたところ、7回のシャッフルでは不十分であることがわかりました。まず、デッキ内のカードの理論上の最大シャノンエントロピー(ビット)は、log(52)/ log(2)〜= 5.7ビットです。しかし、私のデータが5ビットをはるかに超えることはありません。興味深いことに、Pythonで52要素の配列を作成し、その配列をシャッフルしました。
>>> import random
>>> r = random.SystemRandom()
>>> d = [x for x in xrange(1,52)]
>>> r.shuffle(d)
>>> print d
[20, 51, 42, 44, 16, 5, 18, 27, 8, 24, 23, 13, 6, 22, 19, 45, 40, 30, 10, 15, 25, 37, 52, 34, 12, 46, 48, 3, 26, 4, 1, 38, 32, 14, 43, 7, 31, 50, 47, 41, 29, 36, 39, 49, 28, 21, 2, 33, 35, 9, 17, 11]
カードあたりのエントロピーを計算すると、約4.8ビットになります。これを数十回行うと、平均が4.8から4.9で、5.2ビットと4.6ビットの間で変化する同様の結果が表示されます。したがって、データの生のエントロピー値を確認するだけでは十分ではありません。それ以外の場合は、5つのシャッフルで良いと言えます。
データを詳しく見ると、「ゼロバケット」の数に気づきました。これらは、その番号のカード面間のデルタのデータがないバケットです。たとえば、2つの隣接するカードの値を減算する場合、52のデルタがすべて計算された後、「15」という結果はありません。
最終的には、17から18の「ゼロバケット」が11から12のシャッフルに落ち着くのがわかります。案の定、Pythonでシャッフルしたデッキの平均は17〜18の「ゼロバケット」で、最高値は21、最低値は14です。なぜ17-18が解決された結果なのか、まだ説明できません...まだです。しかし、私は〜4.8ビットのエントロピーと17個の「ゼロバケット」の両方が必要なようです。
私の在庫のさざ波シャッフルで、それは11-12シャッフルです。私のカットアンドシャッフルでは、6〜7です。だから、ゲームに関しては、カットアンドシャッフルをお勧めします。これは、トップとボトムのカードが各シャッフルでデッキに混合されることを保証するだけでなく、11-12シャッフルよりも単純に速いだけです。私はあなたのことは知りませんが、家族や友人とカードゲームをしているとき、私は12回のさざ波のシャッフルを実行するのに十分な忍耐力がありません。