[Це питання партнера, щоб точно обчислити ймовірність ]
Це завдання полягає в написанні коду для того, щоб точно і швидко обчислити ймовірність . Вихід повинен бути точною ймовірністю, записаною у вигляді дробу в найбільш скороченому вигляді. Тобто вона ніколи не повинна виводити, 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уникати прокрутки консолі над головою.


