【发布时间】:2014-02-13 17:44:08
【问题描述】:
我一直在 edX 上学习 python 编程,这是一门非常好的课程,到目前为止我可以完全推荐。刚刚在Statistics 上观看了 TED 演讲,我觉得很棒,这是一种锻炼我在现实世界场景中学到的 Python 技能的简单方法。这家伙举了一个关于不断抛硬币并寻找两个重复序列的概率的例子,他解释说,你会认为发生的概率与他声称的实际上没有发生的概率相同。简单地说,他声称序列 Heads Tails Heads 比 Heads Tails Tails 更有可能发生,因为在第一个序列结束时,您已经有三分之一的时间再次重复该序列,而在第二个序列结束时,您必须折腾另一个头再次开始序列。这很有意义,所以我开始尝试用这里显示的我的小型 python 程序来证明它。
import random
HTH = 0
HTT = 0
myList = []
i = 0
numberOfTosses = 1000000
while i < numberOfTosses:
myList.append(random.randint(0,1))
i += 1
for i in range (len(myList)):
if i+2 >= len(myList):
break
if myList[i] == 1 and myList[i+1] == 0 and myList[i+2] == 1:
HTH +=1
if myList[i] == 1 and myList[i+1] == 0 and myList[i+2] == 0:
HTT +=1
print 'HTT :' ,numberOfTosses, HTT, numberOfTosses/HTT
print 'HTH :' ,numberOfTosses, HTH, numberOfTosses/HTH
所以我已经多次运行该程序并将最大迭代值更改得越来越高,但似乎无法证明他的说法,即 HTH 序列应该平均每 8 次投掷发生,而 HTT 序列应该每 10 次发生,就像看起来一样无论哪种方式,我都能得到平均平衡的结果。所以我的问题是我在执行问题时哪里出错了?
【问题讨论】:
-
我认为这家伙的说法是虚假的,除非他说你更有可能通过少量的投掷获得 HTH。为了从 HTH 中获得比 HTT 更多的里程,出于他所说的原因,您还必须获得比 HTTH 更多的 HTHT 出现次数。但是,如果你应用他的相同逻辑,HTTH 已经在序列的开头结束了,而你必须使用 HTHT 重新开始。
-
@MarkkuK。实际上,当您拥有 HTHT 时,您已经拥有下一个 HTHT 的前两个字母。对于 HTTH,您只有第一个字母。
-
@MattParker,这是真的,我把那家伙说的话应用得太狭隘了。但是,HTHT 与 HTTH 的统计数据也大致相同,至少使用此处的方法。
-
@MarkkuK。同意 - 我认为你关于翻转总数的观点可能是它的核心。当 N = 5 时(正如 EducateMe 在下面指出的那样),HTH 具有明显的优势,可能也在 10 和 15 时,但它可能已经减少了一百万......
标签: python python-2.7 statistics