文件格式-存储大DNA序列的最有效方法



我想用iOS应用程序打包一个巨大的DNA序列(大约300000000个碱基对)。每个基对可以具有值ACTG。将每个基对存储在一个字节中会得到一个3GB的文件,这太多了。:)

现在,我想把每个碱基对存储在两个比特中(每个八位字节四个碱基对),这会得到一个750MB的文件。即使在压缩的情况下,750 MB仍然太多。

有没有更好的文件格式可以有效地在磁盘上存储巨大的碱基对?记忆不是问题,因为我是分块阅读的。

我认为您必须使用每个基对两个比特,并实现本文中描述的压缩。

"DNA序列……不是随机的;它们包含重复节、回文和其他功能可以用比拼写所需更少的位来表示写出二进制的完整序列。。。

使用所提出的算法,序列将被压缩75%无论重复或不重复的次数序列中的模式。"

使用基于哈希的数据结构进行DNA压缩,国际信息技术与知识管理杂志2010年7月至12月,第2卷第2期,第383-386页。

编辑:有一个名为GenCompress的程序声称可以有效地压缩DNA序列:

http://www1.spms.ntu.edu.sg/~chenxin/GenCompress/

编辑:另请参阅BioStar上的这个问题。

如果你不介意有一个复杂的解决方案,看看这篇论文或这篇论文,甚至这篇更详细的论文。

但我认为你需要更好地说明你在处理什么。某些特定的应用程序可能导致不同的存储。例如,我引用的最后一篇论文涉及DNA的有损压缩。。。

基对总是向上,因此您应该只存储链的一侧。现在,如果DNA中存在某些突变(如二硫胺键),导致相反的链与存储的链不完全相反,我怀疑这是否有效。除此之外,我认为除了以某种方式压缩它之外,你别无选择。但是,再说一遍,我不是一个生物信息学的人,所以可能有一些非常复杂的方法可以在一个小空间里存储一堆DNA。如果是iOS应用程序,另一个想法就是在设备上放一个阅读器,从网络服务中读取序列。

使用参考基因组的差异。从你发布的大小(3Gbp)来看,你似乎想要包含一个完整的人类序列。由于序列在人与人之间没有太大的差异,您应该能够通过只存储不同的来进行大规模压缩

可以帮很多忙。除非您的目标是存储引用序列本身。然后你就被卡住了。

考虑一下,你能得到多少不同的组合?共4个(我认为大约是16个)

actg=1atcg=2atgc=3等等,使得

你可以创建一个像[1,2,3]这样的数组,然后你可以更进一步,

检查1后面是否跟2,将12转换为a,13=b,依此类推。。。如果我稍微了解一下DNA,那就意味着你无法获得特定的值

a必须与c匹配,t必须与g匹配,或者类似的东西,这会减少你的选择,所以基本上你可以找到一个序列,给它一个你也可以转换回来的东西。。。

您想要查看三维空间填充曲线。3d sfc将3d复杂度降低为1d复杂度。它有点像n八叉树或r树。如果你可以将你的完整dna存储在sfc中,你可以在树中寻找类似的瓦片,尽管sfc最有可能与有损压缩一起使用。如果你知道瓦片的大小,然后尝试像huffman压缩或golomb代码这样的熵压缩,也许你可以使用像bwt这样的块排序算法?

您可以使用MFCompress、Delimite、Comrad等工具。这些工具提供的熵小于2。也就是说,存储每个符号所需的小于2位

最新更新