我正在尝试解决 rosalind 项目中的一个练习,但显然一直在犯一些错误。全文可在此处获得,但我的简短抽象解释和尝试如下。请帮我找出我做错了什么:
我们有 3 组项目:AA
、Aa
、aa
。我们从 1 in 开始Aa
并k
迭代生成新项目。在每次迭代中,组中的每个项目:
Aa
可以产生:AA
(25%),Aa
(50%),aa
(25%)AA
可以产生:AA
(50%),Aa
(50%)aa
可以产生:aa
(50%),Aa
(50%)
作为迭代的结果,我们计算每个组的预期项目数,假设我们在前一次迭代中从每个项目生成 2 个新项目。所以我们最终得到:
- 第 0 次迭代::
AA
0,Aa
:1,aa
:0 - 第一次迭代:
AA
: .5,Aa
: 1,aa
: .5 - 第二次迭代:
AA
: 1,Aa
: 2,aa
: 1 - 等等 - 组之间的比例保持在 1:2:1
每次迭代的期望值/总体的总和是2^iteration
,并且项目在组中的概率Aa
始终为 50%。
到目前为止,我希望我是对的,但我们真正追求的是:如果我们重复实验两次,至少两次N
都在组中的项目的机会是多少。Aa
(应该相当于:如果我们将组列表扩展到, , .... 从原始问题中,至少有N
项目在组中的机会是多少)AaBb
AABB
AABb
所以项目出现的概率Aa
是 50%,来自迭代(或2^iteration
)的预期值的总体总和,并使用测试数据(k=2,N=1)将其扔给 scipy,我们至少得到一个项目在组中Aa
:
In [75]: bin = scipy.stats.binom(4, .5)
In [76]: sum(b.pmf(x) for x in range(1, 4+1))
Out[76]: 0.93750000000000022
如果我们有两组组,这至少适用于一个项目,所以AaBb
:
In [77]: sum(b.pmf(x) for x in range(1, 4+1))**2
Out[77]: 0.87890625000000044
这与原始问题中的答案完全不同:0.684
我在哪里做错了?(如果可能,请只指出错误,而不是给出解决方案,以免给试图自行解决的人留下剧透)