算法/概率练习

标签 algorithm probability rosalind

我正在尝试解决 rosalind 项目中的一个练习,但显然一直在犯一些错误。全文可见here ,但我更简短的抽象解释和尝试如下。请帮我找出我做错了什么:

我们有 3 组项目:AAAaaa。我们从 Aa 中的 1 开始,进行 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%。

到目前为止,我希望我是对的,但我们实际追求的是:在组 Aa 中至少有 N 个项目的机会是多少如果我们重复实验两次。 (应该等同于:如果我们将组列表扩展到 AABB,那么组 AaBb 中至少有 N 项的机会是多少, AABb,....来自原始问题)

所以项目在 Aa 中的概率是 50%,迭代期望值的总体总和(或 2^iteration),并使用测试数据(k=2,N=1),我们只为 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

我哪里做错了? (如果可能的话请只指出错误,而不是给出解决方案,以免剧透留给尝试自行解决的人)

最佳答案

我先是按照你的例子,觉得好像有道理,但过了一会儿我发现了问题所在。

这里指出了您的错误:

你已经计算了在第二代中至少得到一个Aa--和至少一个--Bb的概率。但这还不足以找出二代是否至少有一个AaBbAa----Bb有重合。

例如考虑以下第二代:aaBb, AABb, Aabb, AaBB 所有个体都具有 Aa----Bb但是这一代没有AaBb

关于算法/概率练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14764571/

相关文章:

c - 一个大整数如何除以另一个大整数?

syntax-error - OpenBUGS中的:“Multiple definitions of node”错误。

python - 罗莎琳德:孟德尔第一定律

python - 计算 pandas DataFrame 中值的频率

algorithm - 用于 SCC 最坏情况分析的 Tarjan 算法

algorithm - 规范霍夫曼编码算法

c - 稀疏矩阵乘法期间的最后一个元素不打印?

probability - 定义取决于单个条件的两个随机变量

java - 如何以给定的概率传播随机值?

Python 查找函数不起作用。我究竟做错了什么?