[Это вопрос партнера, чтобы точно рассчитать вероятность ]
Эта задача о написании кода для точного и быстрого вычисления вероятности . Вывод должен быть точной вероятностью, записанной в виде дроби в наиболее сокращенной форме. То есть это никогда не должно выводиться, 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
избежать прокрутки консоли.