[Questa è una domanda del partner per calcolare esattamente una probabilità ]
Questa attività riguarda la scrittura di codice per calcolare una probabilità esattamente e rapidamente . L'output dovrebbe essere una probabilità precisa scritta come una frazione nella sua forma più ridotta. Cioè non dovrebbe mai essere prodotto 4/8
ma piuttosto 1/2
.
Per alcuni numeri interi positivi n
, considera una stringa uniformemente casuale di 1 e -1 secondi di lunghezza n
e chiamala A. Ora concatena al A
suo primo valore. Cioè A[1] = A[n+1]
se l'indicizzazione da 1. A
ora ha lunghezza n+1
. Ora considera anche una seconda stringa casuale di lunghezza i n
cui primi n
valori sono -1, 0 o 1 con probabilità 1 / 4,1 / 2, 1/4 ciascuno e chiamalo B.
Consideriamo ora il prodotto interno A[1,...,n]
e B
ed il prodotto interno di A[2,...,n+1]
e B
.
Ad esempio, considera n=3
. I valori possibili per A
e B
potrebbero essere A = [-1,1,1,-1]
e B=[0,1,-1]
. In questo caso i due prodotti interni sono 0
e 2
.
Il codice deve generare la probabilità che entrambi i prodotti interni siano zero.
Copiando la tabella prodotta da Martin Büttner abbiamo i seguenti risultati di esempio.
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
Lingue e biblioteche
Puoi usare qualsiasi linguaggio e librerie liberamente disponibili che ti piacciono. Devo essere in grado di eseguire il tuo codice, quindi per favore includi una spiegazione completa su come eseguire / compilare il tuo codice in Linux, se possibile.
L'obiettivo
Il codice deve iniziare con n=1
e fornire l'output corretto per ogni n crescente su una riga separata. Dovrebbe fermarsi dopo 10 secondi.
Il punteggio
Il punteggio è semplicemente il più alto n
raggiunto prima che il codice si interrompa dopo 10 secondi quando viene eseguito sul mio computer. In caso di pareggio, il vincitore sarà quello che otterrà il punteggio più alto più rapidamente.
Tabella delle voci
n = 64
in Python . Versione 1 di Mitch Schwartzn = 106
in Python . Versione dell'11 giugno 2015 di Mitch Schwartzn = 151
in C ++ . La risposta di Port of Mitch Schwartz di kirbyfan64sosn = 165
in Python . Versione dell'11 giugno 2015 la versione "potatura" di Mitch Schwartz conN_MAX = 165
.n = 945
in Python di Min_25 usando una formula esatta. Sorprendente!n = 1228
in Python di Mitch Schwartz usando un'altra formula esatta (basata sulla risposta precedente di Min_25).n = 2761
in Python di Mitch Schwartz usando un'implementazione più veloce della stessa formula esatta.n = 3250
in Python usando Pypy di Mitch Schwartz usando la stessa implementazione. Questo punteggio devepypy MitchSchwartz-faster.py |tail
evitare lo scorrimento dall'alto della console.