<p>正如Jens所指出的,这很容易通过<a href="https://en.wikipedia.org/wiki/Binomial_distribution" rel="nofollow noreferrer">Binomial distribution</a>进行计算。<a href="https://docs.scipy.org/doc/scipy/reference/stats.html" rel="nofollow noreferrer">SciPy stats module</a>允许您通过执行以下操作来计算:</p>
<pre><code>from scipy import stats
# i.e. 305 draws with equal probability
d = stats.binom(305, 0.5)
# the probability of seeing something greater than this value
p = d.sf(210)
</code></pre>
<p>这应该给你和Jens一样的价值:~8.8e-12</p>
<p>接下来,我们可以使用<code>datetime</code>模块将此数字转换为您必须等待的<a href="https://en.wikipedia.org/wiki/Expected_value" rel="nofollow noreferrer">expected</a>时间:</p>
<pre><code>from datetime import timedelta
time_per_try = timedelta(seconds=1/1000)
print(time_per_try / p)
</code></pre>
<p>这将给你1300天或3.6年的时间。从技术上讲,这是你必须等待的时间,以有50%的机会看到它,它可能会出现早或晚</p>
<p>您可以使用<a href="https://en.wikipedia.org/wiki/Negative_binomial_distribution" rel="nofollow noreferrer">negative binomial distribution</a>计算发生这种情况时的合理值。在Python中,这看起来像:</p>
<pre><code>for q in stats.nbinom(1, p).ppf([0.025, 0.975]):
print(time_per_try * q)
</code></pre>
<p>其中,0.025和0.975的值给出了科学家们谈论的95%置信区间</p>
<p>它告诉你,如果你有20台计算机并行运行你的算法,每台计算机每秒进行1000次测试,你可以预期第一台计算机将在大约一个月内完成,而最慢的一台可能会持续10年以上</p>