[To jest pytanie partnera, aby dokładnie obliczyć prawdopodobieństwo ]
To zadanie dotyczy pisania kodu w celu dokładnego i szybkiego obliczenia prawdopodobieństwa . Wynik powinien być precyzyjnym prawdopodobieństwem zapisanym jako ułamek w najbardziej zredukowanej formie. Oznacza to, że nigdy nie powinien generować, 4/8
ale raczej 1/2
.
Dla pewnej dodatniej liczby całkowitej n
, rozważ jednolicie losowy ciąg 1s i -1s długości n
i nazwij ją A. Teraz połączmy się do A
jej pierwszej wartości. To znaczy, A[1] = A[n+1]
jeśli indeksowanie od 1. A
ma teraz długość n+1
. Teraz rozważ także drugi losowy ciąg długości, n
którego pierwsze n
wartości to -1, 0 lub 1 z prawdopodobieństwem 1 / 4,1 / 2, 1/4 każdy i nazwij go B.
Rozważmy teraz wewnętrzną produkt A[1,...,n]
oraz B
i wewnętrzną produkt A[2,...,n+1]
i B
.
Rozważmy na przykład n=3
. Możliwe wartości A
i B
mogą być A = [-1,1,1,-1]
i B=[0,1,-1]
. W tym przypadku dwoma produktami wewnętrznymi są 0
i 2
.
Twój kod musi przedstawiać prawdopodobieństwo, że oba produkty wewnętrzne są równe zero.
Kopiując tabelę wyprodukowaną przez Martina Büttnera otrzymaliśmy następujące przykładowe wyniki.
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
Języki i biblioteki
Możesz korzystać z dowolnego darmowego języka i bibliotek, które ci się podobają. Muszę być w stanie uruchomić Twój kod, więc proszę podać pełne wyjaśnienie, jak uruchomić / skompilować kod w systemie Linux, jeśli to w ogóle możliwe.
Zadanie
Twój kod musi zaczynać się od n=1
i dawać poprawne dane wyjściowe dla każdego rosnącego nw osobnej linii. Powinno się zatrzymać po 10 sekundach.
Wynik
Wynik jest po prostu najwyższy n
osiągnięty, zanim kod przestanie działać po 10 sekundach od uruchomienia na moim komputerze. W przypadku remisu zwycięzca najszybciej zdobędzie najwyższy wynik.
Tabela wpisów
n = 64
w Pythonie . Wersja 1 autorstwa Mitcha Schwartzan = 106
w Pythonie . Wersja z 11 czerwca 2015 r. Autor: Mitch Schwartzn = 151
w C ++ . Odpowiedź Port of Mitch Schwartz autorstwa kirbyfan64sosn = 165
w Pythonie . Wersja 11 czerwca 2015 r. W wersji „przycinanie” autorstwa Mitcha Schwartza zN_MAX = 165
.n = 945
w Pythonie przez Min_25 przy użyciu dokładnej formuły. Niesamowity!n = 1228
w Pythonie autorstwa Mitcha Schwartza przy użyciu innej dokładnej formuły (na podstawie poprzedniej odpowiedzi Min_25).n = 2761
w Pythonie autorstwa Mitcha Schwartza przy użyciu szybszej implementacji tej samej dokładnej formuły.n = 3250
w Pythonie przy użyciu Pypy autorstwa Mitcha Schwartza przy użyciu tej samej implementacji. Ten wynik musipypy MitchSchwartz-faster.py |tail
unikać przewijania konsoli nad głową.