Saya tahu bahwa posting ini sudah hampir 4 tahun, tetapi saya seorang cryptanalyst yang hobi, dan telah belajar bermain kartu sandi . Akibatnya, saya kembali ke pos ini berulang kali untuk menjelaskan pengocokan geladak sebagai sumber entropi untuk secara acak memasukkan geladak. Akhirnya, saya memutuskan untuk memverifikasi jawabannya dengan stachyra dengan mengocok deck dengan tangan, dan memperkirakan entropi deck setelah setiap pengocokan.
TL; DR, untuk memaksimalkan entropi dek:
- Untuk hanya mengacak-acak riffle, Anda perlu 11-12 shuffles.
- Untuk memotong dek terlebih dahulu kemudian mengacak-acak, Anda hanya perlu 6-7 potong-dan-mengocok.
Pertama, semua yang disebutkan oleh stachyra untuk menghitung entropi Shannon adalah benar. Ini bisa direbus dengan cara ini:
- Secara numerik memberikan nilai unik untuk masing-masing 52 kartu di geladak.
- Kocok dek.
- Untuk n = 0 hingga n = 51, catat setiap nilai (n - (n + 1) mod 52) mod 52
- Hitung jumlah kemunculan 0, 1, 2, ..., 49, 50, 51
- Normalisasi catatan itu dengan membagi masing-masing dengan 52
- Untuk i = 1 hingga i = 52, hitung -p_i * log (p_i) / log (2)
- Jumlahkan nilainya
Di mana stachyra membuat satu asumsi halus, adalah bahwa menerapkan shuffle manusia dalam program komputer akan datang dengan beberapa barang bawaan. Dengan kartu remi berbasis kertas, begitu digunakan, minyak dari tangan Anda berpindah ke kartu. Dalam jangka waktu yang lama, karena penumpukan minyak, kartu akan mulai saling menempel, dan ini akan berakhir dengan shuffle Anda. Semakin banyak dek yang digunakan, semakin besar kemungkinan dua atau lebih kartu yang berdekatan akan saling menempel, dan semakin sering hal itu terjadi.
Lebih lanjut, seharusnya kedua klub dan jack of heart tetap bersatu. Mereka mungkin akan terjebak bersama selama pengocokan Anda, tidak pernah berpisah. Ini bisa ditiru dalam program komputer, tetapi ini tidak terjadi dengan rutin R stachyra.
Juga, stachyra memiliki variabel manipulasi "mixprob". Tanpa sepenuhnya memahami variabel ini, itu adalah sedikit kotak hitam. Anda bisa salah mengaturnya, memengaruhi hasil. Jadi, saya ingin memastikan intuisinya benar. Jadi saya memverifikasi dengan tangan.
Saya mengocok deck 20 kali dengan tangan, dalam dua contoh berbeda (40 total pengocokan). Pada contoh pertama, saya hanya mengacak-acak, menjaga agar potongan kanan dan kiri tetap sama. Dalam contoh kedua, saya memotong geladak dengan sengaja dari tengah geladak (1/3, 2/5, 1/4, dll.) Sebelum melakukan pemotongan genap untuk pengocokan riffle. Perasaan saya pada contoh kedua adalah bahwa dengan memotong geladak sebelum mengocok, dan menjauh dari tengah, saya bisa memasukkan difusi ke dalam geladak lebih cepat daripada mengacak-acak stock riffle.
Inilah hasilnya. Pertama, pengocokan riffle lurus:
Dan di sini memotong dek dikombinasikan dengan pengocokan riffle:
Tampaknya entropi dimaksimalkan sekitar 1/2 waktu klaim oleh stachyra. Lebih lanjut, intuisi saya benar bahwa memotong geladak dengan sengaja menjauh dari tengah terlebih dahulu, sebelum mengacak-acakkan riffle benar-benar memperkenalkan difusi ke dalam geladak. Namun, setelah sekitar 5 mengocok, itu tidak terlalu penting lagi. Anda dapat melihat bahwa setelah sekitar 6-7 mengocok, entropi dimaksimalkan, dibandingkan 10-12 ketika klaim membuat stachyra saya. Mungkinkah 7 mengocok cukup, atau saya dibutakan?
Anda dapat melihat data saya di Google Sheets . Mungkin saja saya salah mencatat satu atau dua kartu remi, jadi saya tidak bisa menjamin akurasi 100% dengan data.
Penting bahwa temuan Anda juga diverifikasi secara independen. Brad Mann, dari Departemen Matematika di Universitas Harvard, mempelajari berapa kali yang diperlukan untuk mengocok setumpuk kartu sebelum dapat diprediksi kartu apa pun di geladak benar-benar tidak dapat diprediksi (entropi Shannon dimaksimalkan). Hasilnya dapat ditemukan di PDF 33 halaman ini .
Yang menarik dengan temuannya, adalah bahwa dia sebenarnya secara mandiri memverifikasi artikel New York Times 1990 oleh Persi Diaconis , yang mengklaim bahwa 7 shuffle cukup untuk mencampur setumpuk kartu remi secara menyeluruh melalui shuffle riffle.
Brad Mann berjalan melalui beberapa model matematika yang berbeda dalam pengocokan, termasuk rantai Markov, dan sampai pada kesimpulan berikut:
Ini adalah sekitar 11,7 untuk n = 52, yang berarti bahwa, menurut sudut pandang ini, kami mengharapkan rata-rata 11 atau 12 pengocokan diperlukan untuk mengacak setumpuk kartu yang sebenarnya. Perhatikan bahwa ini jauh lebih besar dari 7.
Brad Mann hanya memverifikasi hasil stachyra secara independen, dan bukan milikku. Jadi, saya melihat lebih dekat pada data saya, dan saya menemukan mengapa 7 shuffle tidak cukup. Pertama, entropi Shannon maksimum teoretis dalam bit untuk kartu apa pun di dek adalah log (52) / log (2) ~ = 5,7 bit. Tetapi data saya tidak pernah benar-benar rusak jauh di atas 5 bit. Penasaran, saya membuat array dari 52 elemen dengan Python, mengocok array itu:
>>> 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]
Menghitung hasil entropi per kartu sekitar 4,8 bit. Melakukan ini selusin kali atau lebih menunjukkan hasil yang serupa bervariasi antara 5,2 bit dan 4,6 bit, dengan rata-rata 4,8 hingga 4,9. Jadi melihat nilai entropi mentah data saya tidak cukup, kalau tidak saya bisa menyebutnya baik di 5 shuffles.
Ketika saya melihat lebih dekat pada data saya, saya perhatikan jumlah "ember nol". Ini adalah kotak di mana tidak ada data untuk delta di antara permukaan kartu untuk nomor itu. Misalnya, ketika mengurangi nilai dua kartu yang berdekatan, tidak ada hasil "15" setelah semua 52 delta telah dihitung.
Saya melihat bahwa itu akhirnya mengendap sekitar 17-18 "zero bucket" sekitar 11-12 shuffles. Benar saja, dek saya yang dikocok melalui Python rata-rata 17-18 "nol ember", dengan tinggi 21 dan rendah 14. Mengapa 17-18 adalah hasil yang ditetapkan, saya belum dapat menjelaskan ... belum. Tapi, sepertinya saya ingin keduanya ~ 4,8 bit entropi DAN 17 "zero bucket".
Dengan stock riffle shuffling saya, itu 11-12 shuffles. Dengan sayangku, itu 6-7. Jadi, ketika datang ke permainan, saya akan merekomendasikan cut-and-shuffles. Tidak hanya ini menjamin bahwa kartu atas dan bawah tercampur ke dalam geladak pada setiap acak, itu juga lebih cepat dari 11-12 shuffle. Saya tidak tahu tentang Anda, tetapi ketika saya bermain kartu dengan keluarga dan teman-teman saya, itu tidak cukup sabar bagi saya untuk melakukan 12 riffle shuffles.