[Ceci est une question partenaire pour calculer une probabilité exactement ]
Cette tâche consiste à écrire du code pour calculer une probabilité exactement et rapidement . La sortie doit être une probabilité précise écrite sous forme de fraction dans sa forme la plus réduite. C'est-à-dire qu'il ne devrait jamais sortir 4/8
mais plutôt 1/2
.
Pour un entier positif n
, considérez une chaîne uniformément aléatoire de 1 et -1 de longueur n
et appelez-la A. Maintenant, concaténez à A
sa première valeur. C'est A[1] = A[n+1]
si l'indexation à partir de 1. a A
maintenant une longueur n+1
. Considérons maintenant également une deuxième chaîne aléatoire de longueur n
dont les premières n
valeurs sont -1, 0 ou 1 avec probabilité 1 / 4,1 / 2, 1/4 chacune et appelons-la B.
Considérons maintenant le produit intérieur de A[1,...,n]
et B
et le produit intérieur de A[2,...,n+1]
et B
.
Par exemple, réfléchissez n=3
. Les valeurs possibles pour A
et B
pourraient être A = [-1,1,1,-1]
et B=[0,1,-1]
. Dans ce cas, les deux produits intérieurs sont 0
et 2
.
Votre code doit générer la probabilité que les deux produits internes soient nuls.
En copiant le tableau produit par Martin Büttner, nous avons les exemples de résultats suivants.
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
Langues et bibliothèques
Vous pouvez utiliser n'importe quelle langue et bibliothèque librement disponibles. Je dois être en mesure d'exécuter votre code, veuillez donc inclure une explication complète sur la façon d'exécuter / compiler votre code sous Linux si possible.
La tâche
Votre code doit commencer par n=1
et donner la sortie correcte pour chaque n croissant sur une ligne distincte. Il devrait s'arrêter après 10 secondes.
Le score
Le score est simplement le plus élevé n
atteint avant que votre code ne s'arrête après 10 secondes lorsqu'il est exécuté sur mon ordinateur. S'il y a égalité, le vainqueur sera celui qui obtiendra le plus rapidement le score le plus élevé.
Tableau des entrées
n = 64
en Python . Version 1 par Mitch Schwartzn = 106
en Python . Version 11 juin 2015 par Mitch Schwartzn = 151
en C ++ . Port de la réponse de Mitch Schwartz par kirbyfan64sosn = 165
en Python . Version 11 juin 2015 la version "élagage" de Mitch Schwartz avecN_MAX = 165
.n = 945
en Python par Min_25 en utilisant une formule exacte. Incroyable!n = 1228
en Python par Mitch Schwartz en utilisant une autre formule exacte (basée sur la réponse précédente de Min_25).n = 2761
en Python par Mitch Schwartz en utilisant une implémentation plus rapide de la même formule exacte.n = 3250
en Python en utilisant Pypy par Mitch Schwartz en utilisant la même implémentation. Ce score doitpypy MitchSchwartz-faster.py |tail
éviter les frais généraux de défilement de la console.