Odległość Hamminga pomiędzy dwa ciągi o równej długości jest numer pozycji, w którym odpowiednie symbole są różne.
Niech P
będzie dwójkowym ciągiem długości n
i T
dwójkowym ciągiem długości 2n-1
. Możemy obliczyć n
odległości Hamminga między podciągami P
każdej n
długości T
w kolejności od lewej do prawej i umieścić je w tablicy (lub liście).
Przykład sekwencji odległości Hamminga
Niech P = 101
i T = 01100
. Sekwencja odległości Hamminga uzyskana z tej pary to 2,2,1
.
Zadanie
Aby zwiększyć, n
zaczynając od n=1
, rozważ wszystkie możliwe pary ciągów binarnych P
o długości n
i T
długości 2n-1
. Istnieją 2**(n+2n-1)
takie pary, a zatem wiele sekwencji odległości Hamminga. Jednak wiele z tych sekwencji będzie identycznych. Zadanie polega na ustaleniu, ile jest odrębnych dla każdego z nich n
.
Twój kod powinien wypisywać jedną liczbę na wartość n
.
Wynik
Twój wynik jest najwyższy, jaki n
Twój kod osiągnie na moim komputerze w ciągu 5 minut. Czas dotyczy całkowitego czasu działania, a nie tylko tego czasu n
.
Kto wygrywa
Osoba z najwyższym wynikiem wygrywa. Jeśli dwie lub więcej osób uzyska ten sam wynik, wygrywa pierwsza odpowiedź.
Przykładowe odpowiedzi
Ponieważ n
od 1
do 8
optymalnych odpowiedzi są 2, 9, 48, 297, 2040, 15425, 125232, 1070553
.
Języki i biblioteki
Możesz użyć dowolnego dostępnego języka i bibliotek, które ci się podobają. Tam, gdzie jest to wykonalne, dobrze byłoby móc uruchomić kod, więc proszę podać pełne wyjaśnienie, jak uruchomić / skompilować kod w systemie Linux, jeśli to w ogóle możliwe.
Moja maszyna Czasy zostaną uruchomione na moim komputerze 64-bitowym. Jest to standardowa instalacja ubuntu z 8 GB pamięci RAM, ośmiordzeniowym procesorem AMD FX-8350 i Radeon HD 4250. Oznacza to również, że muszę mieć możliwość uruchomienia kodu.
Wiodące odpowiedzi
- 11 w C ++ przez feersum. 25 sekund.
- 11 w C ++ autorstwa Andrew Epsteina. 176 sekund.
- 10 w JavaScript autorstwa Neila. 54 sekundy.
- 9 w Haskell autorstwa nich. 4 minuty i 59 sekund.
- 8 w JavaScript autorstwa fəˈnɛtɪk. 10 sekund.
fastest-code
pozostawia więcej miejsca na optymalizacje dzięki optymalizacji zarówno poziomu kodu, jak i dobrego algorytmu. Myślę więc, że faster-code
to lepsze niż faster-algorithm
.