Pergunta

Eu estou escrevendo uma série de artigos destinados a ensinar começando conceitos de programação através do uso de temas de poker-relacionados. Atualmente, estou trabalhando no assunto de baralhar.

Como Jeff Atwood assinala em CodingHorror.com , um método simples de embaralhar (a iteração através de uma matriz e trocando cada cartão com uma placa de aleatória em outras posições na matriz) cria uma distribuição desigual de permutações. Em um aplicativo real, gostaria apenas de usar a Knuth Fisher-Yates shuffle para aleatoriedade mais uniforme. Mas, eu não quero atolar uma explicação de conceitos de programação com o algoritmo muito menos codificador de usar.

Isso leva à pergunta: o quanto de uma vantagem que um black-hat têm se eles sabiam que você estava usando um baralhamento ingênuo de um baralho de 52 cartas? Parece que seria infinitamente pequeno.

Foi útil?

Solução

Não é como se você está escrevendo um programa de poker que será usado para um site real de jogo online. Uma habilidade para alguém fazer batota no programa não é um grande negócio quando você está ensinando as pessoas como programa.

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 só vai manter com o ensino.

Outras dicas

O Shuffle knuth é uma mudança insignificante em comparação com o shuffle ingênua: troca Apenas com qualquer cartão na seção restante (dissimuladas) da plataforma em vez de qualquer lugar em todo o convés. Se você pensar nisso como escolher repetidamente a próxima carta, a fim dos cartões não escolhidas restantes, é bastante intuitivo, também.

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

Acontece que a vantagem é bastante significativo. Confira este artigo

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

Um simples e justo algoritmo para baralhar seria atribuir um número de ponto flutuante aleatório (por exemplo, entre 0 e 1) para cada carta do baralho, em seguida, classificar o baralho pelos números atribuídos.

Este é realmente um exemplo perfeito para os alunos a perceber que só porque algo é intuitivo, o shuffle ingênua no nosso caso, não significa que ele está correto.

Subjetiva.

Parece que seria infinitamente pequeno.

Concordo.

Apenas como um aparte, houve uma blog sobre em ITtoolbox sobre baralhar que podem ser de interesse quando se trata de simular um shuffle.

Quanto à sua pergunta, considere que existem 52! configurações da plataforma que se poderia começar com que podem desempenhar um papel no lugar onde as coisas da terra como no exemplo da plataforma 3 do cartão, nota que a 1 na sobre-representados ocorre em cada slot vez de Jeff. Observe também que ele diz que você teria que ter alguns milhares de exemplos antes que se torne evidente que a vantagem é, mas com uma plataforma que não são susceptíveis de começar de novo com a exata mesma plataforma inicial, não é? Você tomaria a cartas dadas e colocá-los na parte inferior e embaralhe-os o que não é provável que repita eu pensaria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top