我之前曾问过一个问题,该如何快速准确地计算概率。但是,显然,提供封闭式解决方案太容易了!这是一个更困难的版本。
这项任务是关于编写代码以准确,快速地计算概率。输出应该是精确的概率,以最简化的形式写为分数。那是它永远不应该输出4/8
,而应该输出1/2
。
对于某个正整数n
,请考虑一个长度为1s和-1s的均匀随机字符串,n
并将其称为A。现在连接到A
其自身的副本。那就是A[1] = A[n+1]
从1开始索引,A[2] = A[n+2]
依此类推。 A
现在有长度2n
。现在还考虑长度的第二随机串n
,其第一n
值是-1,0或1的概率是1 / 4,1 / 2,1/4每并调用它B.
现在考虑不同的B
with 的内积。A[1+j,...,n+j]
j =0,1,2,...
例如,考虑n=3
。对于可能的值A
,并B
可能会A = [-1,1,1,-1,...]
和B=[0,1,-1]
。在这种情况下,前两个内积是0
和2
。
任务
对于每个j
,从j=1
您的代码开始,您的代码应该输出每个第一个j+1
内积为零的概率n=j,...,50
。
复制MartinBüttner生成的表,j=1
我们得到以下示例结果。
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
得分了
您的分数是j
我的计算机在1分钟内完成的最大代码。为了澄清一点,每一个j
都花一分钟。请注意,上一个链接的问题中的动态编程代码将很容易做到这一点j=1
。
抢领带
如果两个条目获得相同的j
分数,则获胜的条目将是n
我机器上一分钟内得分最高的条目j
。如果两个最佳作品在此标准上也相等,那么获胜者将是第一个提交的答案。
语言和图书馆
您可以使用任何喜欢的免费语言和库。我必须能够运行您的代码,因此请尽可能提供有关如何在Linux中运行/编译代码的完整说明。
我的机器时间将在我的机器上运行。这是在AMD FX-8350八核处理器上的标准ubuntu安装。这也意味着我需要能够运行您的代码。
获奖作品
j=2
在Mitch Schwartz的Python中。j=2
由feersum 在Python中编写。目前最快的进入。