嘿伙计我有以下问题:
假设我们正在处理DNA链,每条链由 10个核苷酸的序列。每个核苷酸可以是四个中的任何一个 不同类型:A,G,T或C.编码a需要多少位 DNA链?
这是我的方法,我想知道这是否正确。
我们有10个点。每个点可以有4个不同的符号。这意味着我们需要使用二进制数字进行4 ^ 10种组合。
4 ^ 10 = 1048576。
然后我们将找到其中的日志库2。你们怎么看待我的做法?
答案 0 :(得分:2)
每个核苷酸(也称为碱基对)取两位(四种状态之一 - > 2位信息)。因此,10个碱基对需要20位。推理这种方式比做log2(4 ^ 10)更容易,但给出相同的答案。
如果有任何组合无法出现,那么信息就会减少。例如一些从未出现的密码子(三个碱基对的序列)。但是10个独立的 2位信息总和为20位。
如果某些序列看起来比其他序列更频繁,并且可变长度表示是可行的,那么霍夫曼编码或其他压缩方案可以在大多数时间节省比特。这在文件格式中可能会很好,但在您使用它们时,内存不太可能很好。
将数据密集地打包到2位字段数组中会使访问单个碱基对的速度变慢,但是将整个块与另一个块进行相等比较仍然是有效的。 (memcmp
)。
这是存储密码子(编码氨基酸的三个碱基对的组)的类似问题:6位信息不填充一个字节。但是,只浪费每8位中的2位并不是那么糟糕。
氨基酸序列(您不关心仍然编码相同AA的不同密码子之间的突变)每个位置大约有20个符号,这意味着符号不会 < / em>适合4位半字节。
我曾经在Dalhousie的系统发育研究小组工作,所以我有时想过看一下DNA序列软件,看看我是否可以改进他们内部存储序列数据的方式。不过,我从未接触过它。在您已经计算出每对输入序列之间的进化距离矩阵之后,真正的CPU密集型工作发生在找到最大似然进化树。因此,实际的序列比较并不是瓶颈。
答案 1 :(得分:-1)
做数学: 4 ^ 10 = 2 ^ 2 ^ 10 = 2 ^ 20
答案:20位