[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/8
mas sim 1/2
.
Para um número inteiro positivo n
, considere uma sequência uniformemente aleatória de 1s e -1s de comprimento n
e chame-a de A. Agora concatene A
seu primeiro valor. Ou seja, A[1] = A[n+1]
se a indexação de 1. A
agora tiver comprimento n+1
. Agora considere também uma segunda sequência aleatória de comprimento n
cujos primeiros n
valores 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 B
e o produto interno de A[2,...,n+1]
e B
.
Por exemplo, considere n=3
. Valores possíveis para A
e B
poderiam ser A = [-1,1,1,-1]
e B=[0,1,-1]
. Nesse caso, os dois produtos internos são 0
e 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=1
e 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 n
atingida 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 = 64
em Python . Versão 1 por Mitch Schwartzn = 106
em Python . Versão 11 de junho de 2015 por Mitch Schwartzn = 151
em C ++ . Resposta de Port of Mitch Schwartz por kirbyfan64sosn = 165
em Python . Versão 11 de junho de 2015, a versão "poda" de Mitch Schwartz comN_MAX = 165
.n = 945
em Python por Min_25 usando uma fórmula exata. Surpreendente!n = 1228
em Python, por Mitch Schwartz, usando outra fórmula exata (com base na resposta anterior de Min_25).n = 2761
em Python por Mitch Schwartz usando uma implementação mais rápida da mesma fórmula exata.n = 3250
em Python usando Pypy por Mitch Schwartz usando a mesma implementação. Essa pontuação precisapypy MitchSchwartz-faster.py |tail
evitar a rolagem do console.