So che questo post ha quasi 4 anni, ma sono un crittanalista hobbista e ho studiato i numeri delle carte da gioco . Di conseguenza, sono tornato a questo post più e più volte per spiegare il mescolamento del mazzo come fonte di entropia per la codifica casuale del mazzo. Alla fine, ho deciso di verificare la risposta stachyra mescolando il mazzo a mano e stimando l'entropia del mazzo dopo ogni shuffle.
TL; DR, per massimizzare l'entropia del mazzo:
- Per mescolare solo i riffle, sono necessari 11-12 shuffles.
- Per tagliare prima il mazzo e poi mescolare, devi solo 6-7 taglia e mescola.
Prima di tutto, tutto ciò che la stachira menzionata per il calcolo dell'entropia di Shannon è corretto. Può essere ridotto in questo modo:
- Assegna numericamente un valore univoco a ciascuna delle 52 carte del mazzo.
- Mescola il mazzo.
- Per n = da 0 a n = 51, registra ogni valore di (n - (n + 1) mod 52) mod 52
- Conta il numero di occorrenze di 0, 1, 2, ..., 49, 50, 51
- Normalizza quei record dividendoli per 52
- Per i = 1 a i = 52, calcolare -p_i * log (p_i) / log (2)
- Somma i valori
Dove la stachira fa un'ipotesi sottile, è che l'implementazione di un riordino umano in un programma per computer arriverà con un po 'di bagaglio. Con le carte da gioco su carta, man mano che vengono utilizzate, l'olio dalle tue mani si trasferisce sulle carte. Per un periodo di tempo prolungato, a causa dell'accumulo di petrolio, le carte inizieranno a rimanere attaccate e ciò finirà nel tuo rimescolamento. Più il mazzo viene usato pesantemente, più è probabile che due o più carte adiacenti rimangano insieme e più frequentemente accadrà.
Inoltre, si supponeva che i due di fiori e una mazza di cuori fossero uniti. Potrebbero finire bloccati insieme per la durata del tuo rimescolamento, senza mai separarsi. Questo potrebbe essere imitato in un programma per computer, ma questo non è il caso della routine R di Stachyra.
Inoltre, stachyra ha una variabile di manipolazione "mixprob". Senza comprendere appieno questa variabile, è un po 'una scatola nera. È possibile impostarlo in modo errato, influendo sui risultati. Quindi, volevo assicurarmi che la sua intuizione fosse corretta. Quindi l'ho verificato a mano.
Ho mischiato il mazzo 20 volte a mano, in due casi diversi (40 shuffles totali). In primo luogo, ho solo riffle mischiato, mantenendo i tagli destro e sinistro vicini al pari. Nel secondo caso, ho tagliato deliberatamente il mazzo lontano dalla sua metà (1/3, 2/5, 1/4, ecc.) Prima di fare un taglio uniforme per il riordino del riffle. La mia sensazione di intestino nel secondo caso è stata che tagliando il mazzo prima di rimescolarlo, e stando lontano dal centro, avrei potuto introdurre la diffusione nel mazzo più rapidamente rispetto al mescolamento del fucile di serie.
Ecco i risultati In primo luogo, mischiare il fucile dritto:
E qui sta tagliando il mazzo combinato con il mescolamento dei riffle:
Sembra che l'entropia sia massimizzata in circa 1/2 del tempo del reclamo da parte di stachyra. Inoltre, la mia intuizione era corretta che tagliare il mazzo deliberatamente lontano dal centro prima, prima che il mescolamento del riffle introducesse una maggiore diffusione nel mazzo. Tuttavia, dopo circa 5 shuffles, non importava più molto. Si può vedere che dopo circa 6-7 mescolamenti, l'entropia è massimizzata, rispetto ai 10-12 come l'affermazione ha reso la mia stachira. Potrebbe essere possibile che 7 shuffles siano sufficienti o sono accecato?
Puoi vedere i miei dati su Fogli Google . È possibile che io abbia registrato una o due carte da gioco in modo errato, quindi non posso garantire una precisione del 100% con i dati.
È importante che anche i risultati vengano verificati in modo indipendente. Brad Mann, del Dipartimento di Matematica dell'Università di Harvard, ha studiato quante volte ci sarebbe voluto mescolare un mazzo di carte prima che la prevedibilità di qualsiasi carta nel mazzo fosse completamente imprevedibile (l'entropia di Shannon è massimizzata). I suoi risultati sono disponibili in questo PDF di 33 pagine .
La cosa interessante delle sue scoperte è che sta verificando in modo indipendente un articolo del New York Times del 1990 di Persi Diaconis , che afferma che 7 mischiature sono sufficienti per mescolare accuratamente un mazzo di carte da gioco tramite il riordino del riffle.
Brad Mann esamina alcuni diversi modelli matematici nel mescolare, comprese le catene di Markov, e giunge alla seguente conclusione:
Questo è circa 11,7 per n = 52, il che significa che, secondo questo punto di vista, ci aspettiamo in media 11 o 12 mescolamenti necessari per randomizzare un vero mazzo di carte. Si noti che questo è sostanzialmente più grande di 7.
Brad Mann ha verificato indipendentemente il risultato di stachyra e non il mio. Quindi, ho guardato più da vicino i miei dati e ho scoperto perché 7 shuffle non è sufficiente. Prima di tutto, l'entropia massima teorica di Shannon in bit per qualsiasi carta nel mazzo è log (52) / log (2) ~ = 5.7 bit. Ma i miei dati non superano mai molto i 5 bit. Curioso, ho creato un array di 52 elementi in Python, mescolato quell'array:
>>> 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]
Il calcolo della sua entropia per carta produce circa 4,8 bit. Farlo una dozzina di volte mostra risultati simili che variano tra 5,2 bit e 4,6 bit, con una media da 4,8 a 4,9. Quindi guardare il valore di entropia grezza dei miei dati non è abbastanza, altrimenti potrei chiamarlo buono in 5 shuffles.
Quando osservo più da vicino i miei dati, ho notato il numero di "zero bucket". Si tratta di secchi in cui non ci sono dati per i delta tra le facce delle carte per quel numero. Ad esempio, quando si sottrae il valore di due carte adiacenti, non si ottiene alcun risultato "15" dopo che tutti i 52 delta sono stati calcolati.
Vedo che alla fine si assesta intorno alle 17-18 "benne zero" intorno alle 11-12 shuffles. Abbastanza sicuro, il mio mazzo mischiato via Python ha una media di 17-18 "zero bucket", con un massimo di 21 e un minimo di 14. Perché 17-18 è il risultato stabile, non posso spiegare ... ancora. Ma sembra che io voglia sia ~ 4.8 bit di entropia sia 17 "zero secchi".
Con il mio riffle di scorta che mescola, sono 11-12 shuffles. Con il mio cut-and-shuffle, sono 6-7. Quindi, quando si tratta di giochi, consiglierei di tagliare e mescolare. Questo non solo garantisce che le carte superiore e inferiore si mescolino nel mazzo di ogni mischia, ma è anche semplicemente più veloce di 11-12 mischiate. Non so te, ma quando sto giocando a carte con la mia famiglia e i miei amici, non sono abbastanza pazienti per me per eseguire 12 shuffle di riffle.