Bu yazının neredeyse 4 yaşında olduğunu biliyorum, ama ben bir hobici kriptanalistim ve oyun kartı şifreleri üzerinde çalışıyorum . Sonuç olarak, güverteye rastgele anahtarlama için entropi kaynağı olarak güverte karıştırmayı açıklamak için bu yazıya tekrar tekrar geldim. Sonunda, güverteyi elle karıştırıp her karıştırmadan sonra güverte entropisini tahmin ederek cevabı stachyra ile doğrulamaya karar verdim.
TL; DR, güverte entropisini en üst düzeye çıkarmak için:
- Sadece fırfır karıştırma için 11-12 karıştırmaya ihtiyacınız var.
- Önce güverteyi kesmek, sonra fırfır karıştırmak için sadece 6-7 kes ve karıştır gerekir.
Öncelikle, stachyra'nın Shannon entropisini hesaplamak için bahsettiği her şey doğrudur. Bu şekilde kaynatılabilir:
- Destedeki 52 kartın her birine sayısal olarak benzersiz bir değer atayın.
- Desteyi karıştırın.
- N = 0 ila n = 51 için, (n - (n + 1) mod 52) mod 52'nin her bir değerini kaydedin
- 0, 1, 2, ..., 49, 50, 51 tekrar sayısını sayın
- Her birini 52'ye bölerek bu kayıtları normalleştirin
- İ = 1 ila i = 52 için -p_i * günlüğü (p_i) / günlüğü (2) hesaplayın
- Değerleri topla
Stachyra'nın ince bir varsayım yaptığı yerde, bir bilgisayar programında bir insan karıştırmasının uygulanmasının bir miktar bagajla gelmesidir. Kağıt tabanlı oyun kartları kullanıldıkça ellerinizdeki yağ kartlara aktarılır. Uzun bir süre boyunca, yağ birikmesi nedeniyle, kartlar birbirine yapışmaya başlayacak ve bu da karışıklığa neden olacaktır. Deste ne kadar çok kullanılırsa, iki veya daha fazla bitişik kart birbirine yapışır ve daha sık olur.
Dahası, iki kulüp ve kupa krikosu birbirine yapıştı. Karışma süreniz boyunca birbirine yapışabilirler, asla ayrılmazlar. Bu bir bilgisayar programında taklit edilebilir, ancak stachyra'nın R rutininde durum böyle değildir.
Ayrıca, stachyra bir manipülasyon değişkeni "mixprob" a sahiptir. Bu değişkeni tam olarak anlamadan, biraz kara bir kutudur. Sonuçları etkileyerek yanlış ayarlayabilirsiniz. Bu yüzden, sezgisinin doğru olduğundan emin olmak istedim. Bu yüzden elle doğruladım.
Desteyi 20 kez elle, iki farklı durumda (toplam 40 karışık) karıştırdım. İlk olarak, sağ ve sol kesimleri eşit tutmaya devam ederek karıştırdım. İkinci durumda, tüfek shuffle için eşit bir kesim yapmadan önce güverteyi kasten güverte ortasından (1/3, 2/5, 1/4, vb.) Kestim. İkinci örnekte bağırsak hissim, karıştırmadan önce güverteyi keserek ve ortasından uzak durarak, stok tüfek karıştırmasından daha hızlı bir şekilde güverteye difüzyon uygulayabiliyordum.
Sonuçlar burada. İlk olarak, düz riffle karıştırma:
Ve burada güverte tüfek karıştırma ile kombine edilir:
Entropinin, stachyra ile iddianın yaklaşık 1/2 zamanında maksimuma çıkarıldığı görülmektedir. Dahası, sezgim, riffle karıştırmanın güverteye daha fazla difüzyon getirmeden önce güverteyi kasıtlı olarak ortasından uzağa doğru kesmenin doğru olduğunu söyledi. Ancak, yaklaşık 5 karışıklıktan sonra, artık çok fazla önemli değildi. Yaklaşık 6-7 karıştırmadan sonra iddianın maksimuma çıktığını, iddiamın stachyra yaptığım gibi 10-12 olduğunu görebilirsiniz. 7 karıştırmanın yeterli olması veya kör olmam mümkün olabilir mi?
Sen olabilir Google E benim verileri görmek . Bir veya iki oyun kartı yanlış kaydetmiş olabilirim, bu nedenle verilerle% 100 doğruluğu garanti edemiyorum.
Bulgularınızın da bağımsız olarak doğrulanması önemlidir. Harvard Üniversitesi Matematik Bölümü'nden Brad Mann, destedeki herhangi bir kartın öngörülebilirliği tamamen öngörülemez hale gelmeden önce bir kart destesini karıştırmanın kaç kez sürdüğünü inceledi (Shannon entropisi maksimuma çıkarıldı). Elde ettiği sonuçlar bu 33 sayfalık PDF'de bulunabilir .
Bulguları ile ilginç olan şey, aslında Persi Diaconis tarafından hazırlanan 1990 New York Times makalesini bağımsız olarak doğrulamakta ve 7 karışıklığın bir iskambil destesini tüfek shuffle ile iyice karıştırmak için yeterli olduğunu iddia etmektedir.
Brad Mann, Markov zincirleri de dahil olmak üzere karıştırmada birkaç farklı matematiksel modelden geçiyor ve şu sonuca varıyor:
Bu n = 52 için yaklaşık 11,7'dir, yani bu bakış açısına göre, gerçek bir kart destesini rastgele hale getirmek için ortalama 11 veya 12 karıştırmanın gerekli olmasını bekleriz. Bunun 7'den büyük olduğunu unutmayın.
Brad Mann stachyra'nın sonucunu bağımsız olarak doğruladı ve benim değil. Verilerime daha yakından baktım ve 7 karışıklığın neden yeterli olmadığını keşfettim. İlk önce, destedeki herhangi bir kart için bit cinsinden teorik maksimum Shannon entropisi log (52) / log (2) ~ = 5.7 bit'tir. Ancak verilerim hiçbir zaman 5 bitin üzerinde bozulmaz. Merakla, ben Python 52 element bir dizi oluşturdu, bu dizi karıştırdı:
>>> 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]
Kart başına entropinin hesaplanması yaklaşık 4.8 bit verir. Bunu bir düzine kez yapmak, ortalama olarak 4.8 ila 4.9 olmak üzere 5.2 bit ile 4.6 bit arasında değişen benzer sonuçları gösterir. Bu yüzden verilerimin ham entropi değerine bakmak yeterli değil, aksi takdirde 5 karışıklıkta iyi diyebilirim.
Verilerime daha yakından baktığımda, "sıfır kova" sayısını fark ettim. Bunlar, bu numara için kart yüzleri arasında deltalar için veri bulunmayan kovalardır. Örneğin, iki bitişik kartın değeri çıkarılırken, 52 deltanın tümü hesaplandıktan sonra "15" sonucu olmaz.
Sonunda 11-12 arasında yaklaşık 17-18 "sıfır kova" yerleştiğini görüyorum. Tabii ki, Python üzerinden karıştırılan destem ortalama 17-18 "sıfır kova", 21 ve düşük 14 ile ortalama. Neden 17-18 yerleşik sonuç, henüz açıklayamıyorum .... Ama görünüşe göre ben hem ~ 4.8 bit entropi VE 17 "sıfır kova" istiyorum.
Hisse senedi fırfır karıştırma ile, bu 11-12 karıştırır. Kes ve karıştır ile 6-7. Yani, oyun söz konusu olduğunda, kes ve karıştır tavsiye ederim. Bu, üst ve alt kartların her bir karıştırmanın güvertesine karışmasını garanti etmekle kalmaz, aynı zamanda 11-12 karıştırmadan daha hızlıdır. Seni bilmiyorum, ama ailem ve arkadaşlarımla kart oyunları oynadığımda, 12 tüfek karıştırması için yeterince sabırlı değiller.