[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/8sino más bien 1/2.
Para algún número entero positivo n, considere una cadena uniformemente aleatoria de 1s y -1s de longitud ny llámela A. Ahora concatene a Asu primer valor. Es decir, A[1] = A[n+1]si la indexación desde 1. Aahora tiene longitud n+1. Ahora también considere una segunda cadena aleatoria de longitud ncuyos primeros nvalores 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 By el producto interno de A[2,...,n+1]y B.
Por ejemplo, considere n=3. Los posibles valores de Ay Bpodrían ser A = [-1,1,1,-1]y B=[0,1,-1]. En este caso, los dos productos internos son 0y 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=1y 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 nalcanzado 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 = 64en Python . Versión 1 por Mitch Schwartzn = 106en Python . Versión del 11 de junio de 2015 por Mitch Schwartzn = 151en C ++ . La respuesta del puerto de Mitch Schwartz por kirbyfan64sosn = 165en Python . Versión del 11 de junio de 2015, la versión de "poda" de Mitch Schwartz conN_MAX = 165.n = 945en Python por Min_25 usando una fórmula exacta. ¡Asombroso!n = 1228en Python por Mitch Schwartz usando otra fórmula exacta (basada en la respuesta anterior de Min_25).n = 2761en Python por Mitch Schwartz usando una implementación más rápida de la misma fórmula exacta.n = 3250en Python usando Pypy por Mitch Schwartz usando la misma implementación. Esta puntuación debepypy MitchSchwartz-faster.py |tailevitar la sobrecarga de desplazamiento de la consola.


