Eu sei que este post tem quase 4 anos, mas sou um criptoanalista amador e tenho estudado cifras de cartas de baralho . Como resultado, voltei repetidamente a este post para explicar a baralhamento do baralho como fonte de entropia para a digitação aleatória do baralho. Finalmente, decidi verificar a resposta por stachyra embaralhando o baralho manualmente e calculando a entropia do baralho após cada baralhamento.
TL; DR, para maximizar a entropia do convés:
- Para embaralhar apenas riffle, você precisa de 11 a 12 embaralhamento.
- Para cortar o baralho primeiro e depois embaralhar com rapidez, você precisa apenas de 6 a 7 cortes e embaralhamento.
Primeiro, tudo o que a stachyra mencionou para calcular a entropia de Shannon está correto. Pode ser resumido desta maneira:
- Atribua numericamente um valor único a cada uma das 52 cartas do baralho.
- Embaralhe o baralho.
- Para n = 0 a n = 51, registre cada valor de (n - (n + 1) mod 52) mod 52
- Conte o número de ocorrências de 0, 1, 2, ..., 49, 50, 51
- Normalize esses registros dividindo cada um por 52
- Para i = 1 a i = 52, calcule -p_i * log (p_i) / log (2)
- Soma os valores
Onde stachyra faz uma suposição sutil, é que implementar um embaralhamento humano em um programa de computador virá com alguma bagagem. Com as cartas de baralho em papel, à medida que elas são usadas, o óleo das suas mãos é transferido para as cartas. Por um longo período de tempo, devido ao acúmulo de óleo, os cartões começarão a ficar colados e isso acabará no seu embaralhamento. Quanto mais usado o baralho, maior a probabilidade de duas ou mais cartas adjacentes ficarem juntas e mais frequentemente isso acontecerá.
Além disso, supõe-se que os dois clubes e valete de copas permaneçam juntos. Eles podem acabar presos juntos pela duração do embaralhamento, nunca se separando. Isso pode ser imitado em um programa de computador, mas esse não é o caso da rotina R da stachyra.
Além disso, stachyra tem uma variável de manipulação "mixprob". Sem entender completamente essa variável, é um pouco de uma caixa preta. Você pode configurá-lo incorretamente, afetando os resultados. Então, eu queria ter certeza de que sua intuição estava correta. Então eu verifiquei à mão.
Embaralhei o baralho 20 vezes com a mão, em dois casos diferentes (40 no total). Em um primeiro momento, eu apenas embaralhei, mantendo os cortes direito e esquerdo quase iguais. Na segunda instância, cortei o deck deliberadamente para longe do meio do deck (1/3, 2/5, 1/4 etc.) antes de fazer um corte uniforme para a reprodução aleatória. Meu instinto, no segundo caso, foi que, cortando o convés antes de embaralhar, e ficando longe do meio, eu poderia introduzir difusão no convés mais rapidamente do que embaralhar normalmente.
Aqui estão os resultados. Primeiro, embaralhamento direto da espingarda:
E aqui está o corte do baralho combinado com a reprodução aleatória:
Parece que a entropia é maximizada em cerca de 1/2 do tempo da reivindicação por estaquira. Além disso, minha intuição estava correta ao cortar o convés deliberadamente longe do meio primeiro, antes que o embaralhamento de rifles introduzisse mais difusão no convés. No entanto, após cerca de 5 shuffles, isso realmente não importava mais. Você pode ver que, após cerca de 6 a 7 embaralhamento, a entropia é maximizada, em comparação com os 10 a 12, conforme a reivindicação fez minha estacira. Seria possível que 7 shuffles sejam suficientes ou estou sendo cego?
Você pode ver meus dados no Planilhas Google . É possível que eu tenha gravado um ou dois cartões incorretamente, por isso não posso garantir 100% de precisão com os dados.
É importante que suas descobertas também sejam verificadas independentemente. Brad Mann, do Departamento de Matemática da Universidade de Harvard, estudou quantas vezes seriam necessárias para embaralhar um baralho antes que a previsibilidade de qualquer cartão no baralho fosse completamente imprevisível (a entropia de Shannon é maximizada). Seus resultados podem ser encontrados neste PDF de 33 páginas .
O interessante de suas descobertas é que ele está realmente verificando independentemente um artigo do New York Times de 1990 por Persi Diaconis , que afirma que 7 baralhos são suficientes para misturar minuciosamente um baralho de cartas através do baralho de cartas.
Brad Mann percorre alguns modelos matemáticos diferentes em embaralhamento, incluindo cadeias de Markov, e chega à seguinte conclusão:
Isso é aproximadamente 11,7 para n = 52, o que significa que, de acordo com esse ponto de vista, esperamos que, em média, sejam necessários 11 ou 12 shuffles para randomizar um baralho real. Observe que isso é substancialmente maior que 7.
Brad Mann apenas verificou independentemente o resultado da estaquira, e não o meu. Então, olhei mais de perto meus dados e descobri por que 7 shuffles não são suficientes. Primeiro, a entropia máxima teórica de Shannon em bits para qualquer cartão no baralho é log (52) / log (2) ~ = 5,7 bits. Mas meus dados nunca quebram muito acima de 5 bits. Curioso, criei uma matriz de 52 elementos em Python, embaralhei essa matriz:
>>> 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]
O cálculo da sua entropia por cartão produz cerca de 4,8 bits. Fazer isso uma dúzia de vezes mostra resultados semelhantes, variando entre 5,2 e 4,6 bits, com média de 4,8 a 4,9. Portanto, analisar o valor bruto da entropia dos meus dados não é suficiente; caso contrário, eu poderia chamá-lo de bom em 5 shuffles.
Quando olho mais de perto meus dados, notei o número de "zero buckets". São baldes em que não há dados para deltas entre as faces do cartão para esse número. Por exemplo, ao subtrair o valor de duas cartas adjacentes, não há resultado "15" após o cálculo de todos os 52 deltas.
Vejo que, eventualmente, se instala entre 17 e 18 "zero baldes" entre 11 e 12 shuffles. Com certeza, meu baralho embaralhado via Python tem em média 17-18 "zero buckets", com um máximo de 21 e um mínimo de 14. Por que 17-18 é o resultado estabelecido, não sei explicar ... ainda. Mas, parece que eu quero os dois ~ 4,8 bits de entropia E 17 "zero buckets".
Com o meu estoque riffle baralhar, são 11-12 baralhar. Com o meu corte e reprodução aleatória, são 6-7. Então, quando se trata de jogos, eu recomendaria cortar e embaralhar. Isso não apenas garante que as cartas superior e inferior sejam misturadas no baralho em cada baralhamento, como também é mais rápido do que 11-12 baralhamento. Eu não sei sobre você, mas quando estou jogando cartas com minha família e amigos, eles não são pacientes o suficiente para eu fazer 12 baralhas aleatórias.