[Dies ist eine Partnerfrage, um eine Wahrscheinlichkeit genau zu berechnen ]
Bei dieser Aufgabe geht es darum, Code zu schreiben, um eine Wahrscheinlichkeit genau und schnell zu berechnen . Die Ausgabe sollte eine genaue Wahrscheinlichkeit sein, die als Bruch in ihrer am meisten reduzierten Form geschrieben wird. Das heißt, es sollte nie ausgegeben werden 4/8
, sondern 1/2
.
n
Betrachten Sie für eine positive Ganzzahl eine gleichmäßig zufällige Zeichenfolge mit einer Länge von 1s und -1s n
und nennen Sie sie A. Verketten Sie nun mit A
ihrem ersten Wert. Das heißt, A[1] = A[n+1]
wenn die Indizierung von 1. A
jetzt Länge hat n+1
. Nun auch eine zweite zufällige Zeichenfolge der Länge betrachten , n
deren erste n
Werte -1, 0 oder 1 , mit einer Wahrscheinlichkeit von 1 / 4,1 / 2, 1/4 und jedes nennen es B.
Betrachten Sie nun das innere Produkt von A[1,...,n]
und B
und das innere Produkt von A[2,...,n+1]
und B
.
Betrachten Sie zum Beispiel n=3
. Mögliche Werte für A
und B
könnten A = [-1,1,1,-1]
und sein B=[0,1,-1]
. In diesem Fall sind die beiden inneren Produkte 0
und 2
.
Ihr Code muss die Wahrscheinlichkeit ausgeben, dass beide inneren Produkte Null sind.
Wenn wir die von Martin Büttner erstellte Tabelle kopieren, erhalten wir die folgenden Beispielergebnisse.
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
Sprachen und Bibliotheken
Sie können jede frei verfügbare Sprache und Bibliothek verwenden, die Sie mögen. Ich muss in der Lage sein, Ihren Code auszuführen. Bitte geben Sie eine vollständige Erklärung an, wie Sie Ihren Code unter Linux ausführen / kompilieren können, wenn dies überhaupt möglich ist.
Die Aufgabe
Ihr Code muss mit beginnen n=1
und die richtige Ausgabe für jedes zunehmende n in einer separaten Zeile angeben. Es sollte nach 10 Sekunden aufhören.
Die Punktzahl
Die Punktzahl ist einfach die höchste, die n
erreicht wird, bevor Ihr Code nach 10 Sekunden auf meinem Computer stoppt. Wenn es ein Unentschieden gibt, ist der Gewinner derjenige, der am schnellsten die höchste Punktzahl erreicht.
Tabelle der Einträge
n = 64
in Python . Version 1 von Mitch Schwartzn = 106
in Python . Version 11. Juni 2015 von Mitch Schwartzn = 151
in C ++ . Port of Mitch Schwartz 'Antwort von kirbyfan64sosn = 165
in Python . Version 11. Juni 2015 die "Schnitt" -Version von Mitch Schwartz mitN_MAX = 165
.n = 945
in Python von Min_25 mit einer genauen Formel. Tolle!n = 1228
in Python von Mitch Schwartz unter Verwendung einer anderen exakten Formel (basierend auf der vorherigen Antwort von Min_25).n = 2761
in Python von Mitch Schwartz mit einer schnelleren Implementierung derselben exakten Formel.n = 3250
in Python mit Pypy von Mitch Schwartz mit der gleichen Implementierung. Diese Punktzahl musspypy MitchSchwartz-faster.py |tail
vermeiden, dass die Konsole über den Bildlauf blättert.