[Esta es una pregunta de socio para calcular una probabilidad exactamente ]
Esta tarea consiste en escribir código para calcular una probabilidad de manera exacta y rápida . El resultado debe ser una probabilidad precisa escrita como una fracción en su forma más reducida. Es decir, nunca debería salir, 4/8
sino más bien 1/2
.
Para algún número entero positivo n
, considere una cadena uniformemente aleatoria de 1s y -1s de longitud n
y llámela A. Ahora concatene a A
su primer valor. Es decir, A[1] = A[n+1]
si la indexación desde 1. A
ahora tiene longitud n+1
. Ahora también considere una segunda cadena aleatoria de longitud n
cuyos primeros n
valores son -1, 0 o 1 con probabilidad 1 / 4,1 / 2, 1/4 cada uno y llámelo B.
Consideremos ahora el producto interno de A[1,...,n]
y B
y el producto interno de A[2,...,n+1]
y B
.
Por ejemplo, considere n=3
. Los posibles valores de A
y B
podrían ser A = [-1,1,1,-1]
y B=[0,1,-1]
. En este caso, los dos productos internos son 0
y 2
.
Su código debe generar la probabilidad de que ambos productos internos sean cero.
Copiando la tabla producida por Martin Büttner tenemos los siguientes resultados de muestra.
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
Idiomas y bibliotecas
Puede utilizar cualquier idioma y bibliotecas disponibles gratuitamente que desee. Debo poder ejecutar su código, así que incluya una explicación completa sobre cómo ejecutar / compilar su código en Linux si es posible.
La tarea
Su código debe comenzar con n=1
y dar la salida correcta para cada n creciente en una línea separada. Debería detenerse después de 10 segundos.
El marcador
El puntaje es simplemente el más alto n
alcanzado antes de que su código se detenga después de 10 segundos cuando se ejecuta en mi computadora. Si hay un empate, el ganador será el que obtenga el puntaje más alto más rápido.
Tabla de entradas
n = 64
en Python . Versión 1 por Mitch Schwartzn = 106
en Python . Versión del 11 de junio de 2015 por Mitch Schwartzn = 151
en C ++ . La respuesta del puerto de Mitch Schwartz por kirbyfan64sosn = 165
en Python . Versión del 11 de junio de 2015, la versión de "poda" de Mitch Schwartz conN_MAX = 165
.n = 945
en Python por Min_25 usando una fórmula exacta. ¡Asombroso!n = 1228
en Python por Mitch Schwartz usando otra fórmula exacta (basada en la respuesta anterior de Min_25).n = 2761
en Python por Mitch Schwartz usando una implementación más rápida de la misma fórmula exacta.n = 3250
en Python usando Pypy por Mitch Schwartz usando la misma implementación. Esta puntuación debepypy MitchSchwartz-faster.py |tail
evitar la sobrecarga de desplazamiento de la consola.