[Это вопрос партнера, чтобы точно рассчитать вероятность ]
Эта задача о написании кода для точного и быстрого вычисления вероятности . Вывод должен быть точной вероятностью, записанной в виде дроби в наиболее сокращенной форме. То есть это никогда не должно выводиться, 4/8а скорее 1/2.
Для некоторого положительного целого числа nрассмотрим равномерно случайную строку длиной 1 с и 1 с nи назовем ее A. Теперь объединяем 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 Min_25 с использованием точной формулы. Удивительно!n = 1228в Python Митч Шварц, используя другую точную формулу (на основе предыдущего ответа Min_25).n = 2761в Python Митч Шварц, используя более быструю реализацию той же точной формулы.n = 3250в Python с использованием Pypy Митч Шварц, используя ту же реализацию. Этот счет долженpypy MitchSchwartz-faster.py |tailизбежать прокрутки консоли.


