[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/8ma piuttosto 1/2.
Per alcuni numeri interi positivi n, considera una stringa uniformemente casuale di 1 e -1 secondi di lunghezza ne chiamala A. Ora concatena al Asuo primo valore. Cioè A[1] = A[n+1]se l'indicizzazione da 1. Aora ha lunghezza n+1. Ora considera anche una seconda stringa casuale di lunghezza i ncui primi nvalori 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 Bed il prodotto interno di A[2,...,n+1]e B.
Ad esempio, considera n=3. I valori possibili per Ae Bpotrebbero essere A = [-1,1,1,-1]e B=[0,1,-1]. In questo caso i due prodotti interni sono 0e 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=1e 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 nraggiunto 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 = 64in Python . Versione 1 di Mitch Schwartzn = 106in Python . Versione dell'11 giugno 2015 di Mitch Schwartzn = 151in C ++ . La risposta di Port of Mitch Schwartz di kirbyfan64sosn = 165in Python . Versione dell'11 giugno 2015 la versione "potatura" di Mitch Schwartz conN_MAX = 165.n = 945in Python di Min_25 usando una formula esatta. Sorprendente!n = 1228in Python di Mitch Schwartz usando un'altra formula esatta (basata sulla risposta precedente di Min_25).n = 2761in Python di Mitch Schwartz usando un'implementazione più veloce della stessa formula esatta.n = 3250in Python usando Pypy di Mitch Schwartz usando la stessa implementazione. Questo punteggio devepypy MitchSchwartz-faster.py |tailevitare lo scorrimento dall'alto della console.


