Problemas do mundo real com embaralhamento ingênuo

Eu estou escrevendo uma série de artigos destinados a ensinar conceitos de programação iniciantes através do uso de tópicos relacionados ao poker. Atualmente, estou trabalhando no assunto de embaralhar.

Como Jeff Atwood aponta na CodingHorror.com , um método de embaralhamento simples (iterando através de uma matriz e trocando cada cartão com uma placa aleatória em outro lugar na matriz) cria uma distribuição desigual de permutações. Em um aplicativo real, eu usaria apenas o shuffle Knuth Fisher-Yates shuffle para uma aleatoriedade mais uniforme. Mas eu não quero atrapalhar uma explicação dos conceitos de programação com o algoritmo muito menos amigável aos codificadores.

Isso leva à pergunta: o quanto de vantagem um black-hat teria se soubessem que você estava usando um shuffle ingênuo de um baralho de 52 cartas? Parece que seria infinitamente pequeno.

0

5 Respostas

O knuth shuffle é uma mudança insignificante comparada ao shuffle ingênuo: Basta trocar com qualquer carta na seção restante (unshuffled) do baralho em vez de em qualquer lugar do baralho inteiro. Se você pensar nela repetidamente escolhendo a próxima carta na ordem das cartas restantes não escolhidas, ela também é bastante intuitiva.

Pessoalmente, acho que ensinar aos alunos um algoritmo ruim quando o correto não é mais complicado (e mais fácil de visualizar!) É uma má abordagem.

0
adicionado
Concordo. Neste caso, acho que ambos os algoritmos devem ser mostrados e uma explicação de por que um é melhor que o outro. Neste caso, é uma mudança muito pequena e, na minha opinião, não a torna mais complicada.
adicionado o autor some, fonte

Apenas como um aparte, havia uma postagem no blog sobre ITtoolbox sobre embaralhar que pode ser interessante quando se trata de simular um shuffle.

Quanto à sua pergunta, considere que existem 52! configurações de deck que podem começar com isso podem ter um papel em onde as coisas acontecem, como no exemplo de Jeff do baralho de 3 cartas, note que o 1 no over-representado ocorre em cada slot uma vez. Observe também que ele diz que você teria que ter alguns milhares de exemplos antes que se torne aparente onde a vantagem é, mas com um deck você provavelmente não começará novamente com o mesmo deck inicial, certo? Você pegaria as cartas distribuídas e as colocaria no fundo e as embaralharia, o que provavelmente não repetiria.

0
adicionado

Não é como se você estivesse escrevendo um programa de pôquer que será usado para um site de apostas online real. A capacidade de alguém enganar o programa não é grande coisa quando você está ensinando as pessoas a programar.

Deixe uma nota dizendo que este é um modelo pobre do mundo real (com uma referência a ele como uma possível falha de segurança), e continue com o ensino.

0
adicionado
Eu não tinha, no momento em que escrevi isso, percebi que a diferença é tão trivial. Eu concordaria: diga-lhes o bom algoritmo de embaralhamento. Talvez os detalhes exatos sobre "por que" possam ser "referem-se a esta literatura".
adicionado o autor Keith B, fonte
Não, mas as pessoas que lêem esses artigos podem continuar. Conseguir embaralhar certo é importante, porque fazer isso errado causou uma pausa antes.
adicionado o autor afrazier, fonte

Subjetivo.

Parece que seria infinitesimalmente pequeno.

Aceita.

0
adicionado

It turns out the advantage is quite significant. Check out this article

Parte do problema é o algoritmo defeituoso, mas outra parte é a suposição de que você pode obter números "aleatórios" de um computador.

0
adicionado