[Це питання партнера, щоб точно обчислити ймовірність ]
Це завдання полягає в написанні коду для того, щоб точно і швидко обчислити ймовірність . Вихід повинен бути точною ймовірністю, записаною у вигляді дробу в найбільш скороченому вигляді. Тобто вона ніколи не повинна виводити, 4/8
а навпаки 1/2
.
Для деякого додатного цілого числа n
розглянемо рівномірно випадковий рядок довжиною 1s та -1s n
і назвемо його А. Тепер приєднайтесь до A
свого першого значення. Тобто A[1] = A[n+1]
якщо індексація від 1. A
тепер має довжину n+1
. Тепер також розглянемо другий випадковий рядок довжини n
, перші n
значення якого становлять -1, 0 або 1 з вірогідністю 1/4,1 / 2, 1/4 кожне і назвемо його B.
Тепер розглянемо внутрішній продукт A[1,...,n]
і B
і внутрішній продукт A[2,...,n+1]
і B
.
Наприклад, розглянемо n=3
. Можливі значення для A
і B
можуть бути A = [-1,1,1,-1]
і B=[0,1,-1]
. У цьому випадку два внутрішні продукти є 0
і 2
.
Ваш код повинен виводити ймовірність того, що обидва внутрішні продукти дорівнюють нулю.
Копіюючи таблицю, виготовлену Мартином Бюттнером, ми маємо такі результати вибірки.
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
Мови та бібліотеки
Ви можете використовувати будь-яку вільно доступну мову та бібліотеки, які вам подобаються. Я повинен бути в змозі запустити ваш код, тому, будь-ласка, включіть повне пояснення, як запустити / скомпілювати ваш код у Linux.
Завдання
Ваш код повинен починатися з n=1
і давати правильний вихід для кожного збільшення n в окремому рядку. Він повинен припинитися через 10 секунд.
Рахунок
Оцінка - це найвищий показник, n
перш ніж ваш код зупиниться через 10 секунд при запуску на моєму комп’ютері. Якщо є нічия, виграє той, хто швидше потрапить до найвищої оцінки.
Таблиця записів
n = 64
в Python . Версія 1 Мітча Шварцаn = 106
в Python . Версія 11 червня 2015 року Мітчем Шварцомn = 151
в C ++ . Відповідь Мітта Шварца від kirbyfan64sosn = 165
в Python . Версія 11 червня 2015 р. "Обрізка" версія Мітча Шварца сN_MAX = 165
.n = 945
в Python by Min_25, використовуючи точну формулу. Дивовижний!n = 1228
в Python від Мітча Шварца, використовуючи іншу точну формулу (на основі попередньої відповіді Min_25).n = 2761
в Python від Мітча Шварца з використанням більш швидкої реалізації тієї ж точної формули.n = 3250
в Python, використовуючи Pypy by Mitch Schwartz, використовуючи ту ж саму реалізацію. Цей показник повиненpypy MitchSchwartz-faster.py |tail
уникати прокрутки консолі над головою.