[这是一个精确计算概率的伙伴问题]
这项任务是关于编写代码以准确,快速地计算概率。输出应该是精确的概率,以最简化的形式写为分数。那是它永远不应该输出4/8
,而应该1/2
。
对于某个正整数n
,请考虑一个长度为1s和-1s的均匀随机字符串,n
并将其称为A。现在将A
其串联为第一个值。就是说A[1] = A[n+1]
从1 A
开始的索引 现在具有length 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
。
您的代码必须输出两个内积均为零的概率。
复制MartinBüttner制作的表,我们得到以下示例结果。
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中。Mitch Schwartz的第1版n = 106
在Python中。版本Mitch Schwartz 2015年6月11日n = 151
在C ++中。米奇·施瓦茨港的答案by kirbyfan64sosn = 165
在Python中。版本2015年6月11日,是Mitch Schwartz的“修剪”版本N_MAX = 165
。n = 945
在Min_25中使用精确公式在Python中编写。惊人!n = 1228
由Mitch Schwartz 在Python中使用另一个精确公式(基于Min_25的先前答案)。n = 2761
Mitch Schwartz 在Python中使用相同的精确公式的更快实现。n = 3250
在Python中使用Mitch Schwartz的Pypy使用相同的实现。此分数需要pypy MitchSchwartz-faster.py |tail
避免控制台滚动开销。