这个问题要求我们计算在一组随机生成的DNA字符串中,至少有一个字符串与给定的基序(特定的DNA序列)相匹配的概率。这些DNA字符串的随机生成受到给定的GC含量的控制,这是指DNA中要么是鸟嘌呤(G)要么是胞嘧啶(C)的碱基所占的比例。
这个问题可以分解为以下几个部分:
我们需要计算在N个随机字符串中,至少有一个字符串与给定的DNA序列s完全相同的概率。
要解决这个问题,请考虑以下步骤:
计算生成给定DNA序列(s)的概率:我们首先需要找到在单次尝试中随机生成DNA序列s的概率。这个概率取决于GC含量(x)和s中的特定碱基。对于s中的每个碱基,如果碱基是G或C,概率是x;如果碱基是A或T,概率是(1 - x)。将这些概率乘在一起。
单次尝试中未生成给定DNA序列的概率:这简单地是1减去第1步中计算的概率。
N次尝试中未生成给定DNA序列的概率:由于尝试是独立的,这个概率是第2步结果的N次方。
N次尝试中至少生成一次给定DNA序列的概率:最后,我们找到补事件的概率,即1减去第3步中计算的概率。
https://rosalind.info/problems/rstr/
N = N
x = x
s = s
AT = 0
GC = 0
for nt in s:
if nt == 'A' or nt == 'T':
AT += 1
elif nt == 'G' or nt == 'C':
GC += 1
s_prob = (((1 - x) / 2)**AT) * (((x) / 2)**GC)
prob = 1 - (1 - s_prob)**N
print('%0.3f' % prob)