[Esta é uma pergunta de parceiro para calcular exatamente uma probabilidade ]
Esta tarefa é sobre escrever código para calcular uma probabilidade exata e rapidamente . A saída deve ser uma probabilidade precisa escrita como uma fração em sua forma mais reduzida. Ou seja, nunca deve produzir, 4/8mas sim 1/2.
Para um número inteiro positivo n, considere uma sequência uniformemente aleatória de 1s e -1s de comprimento ne chame-a de A. Agora concatene Aseu primeiro valor. Ou seja, A[1] = A[n+1]se a indexação de 1. Aagora tiver comprimento n+1. Agora considere também uma segunda sequência aleatória de comprimento ncujos primeiros nvalores sejam -1, 0 ou 1 com probabilidade 1 / 4,1 / 2, 1/4 cada e chame-a de B.
Agora considere o produto interno de A[1,...,n]e Be o produto interno de A[2,...,n+1]e B.
Por exemplo, considere n=3. Valores possíveis para Ae Bpoderiam ser A = [-1,1,1,-1]e B=[0,1,-1]. Nesse caso, os dois produtos internos são 0e 2.
Seu código deve gerar a probabilidade de que ambos os produtos internos sejam zero.
Copiando a tabela produzida por Martin Büttner, temos os seguintes resultados de amostra.
n P(n)
1 1/2
2 3/8
3 7/32
4 89/512
5 269/2048
6 903/8192
7 3035/32768
8 169801/2097152
Línguas e bibliotecas
Você pode usar qualquer idioma e bibliotecas disponíveis gratuitamente que desejar. Devo ser capaz de executar seu código, portanto, inclua uma explicação completa de como executar / compilar seu código no Linux, se possível.
A tarefa
Seu código deve começar com n=1e fornecer a saída correta para cada n crescente em uma linha separada. Deve parar após 10 segundos.
A pontuação
A pontuação é simplesmente a mais alta natingida antes que seu código pare após 10 segundos quando executado no meu computador. Se houver um empate, o vencedor será o vencedor mais rápido.
Tabela de entradas
n = 64em Python . Versão 1 por Mitch Schwartzn = 106em Python . Versão 11 de junho de 2015 por Mitch Schwartzn = 151em C ++ . Resposta de Port of Mitch Schwartz por kirbyfan64sosn = 165em Python . Versão 11 de junho de 2015, a versão "poda" de Mitch Schwartz comN_MAX = 165.n = 945em Python por Min_25 usando uma fórmula exata. Surpreendente!n = 1228em Python, por Mitch Schwartz, usando outra fórmula exata (com base na resposta anterior de Min_25).n = 2761em Python por Mitch Schwartz usando uma implementação mais rápida da mesma fórmula exata.n = 3250em Python usando Pypy por Mitch Schwartz usando a mesma implementação. Essa pontuação precisapypy MitchSchwartz-faster.py |tailevitar a rolagem do console.


