我想用iOS应用程序打包一个巨大的DNA序列(大约3,000,000,000个碱基对)。每个碱基对可以包含值A
,C
,T
或G
。将每个碱基对存储在一个字节中会产生3 GB的文件,这太过分了。 :)
现在我将每个碱基对存储在两位(每个八位字节四个碱基对)中,这样可以得到750 MB的文件。即使压缩,750 MB仍然太多了。
有没有更好的文件格式可以有效地在磁盘上存储巨型碱基对?因为我读了大块内存不是问题。
答案 0 :(得分:10)
我认为你必须为每个碱基对使用两位,并按this paper中所述实现压缩。
“DNA序列......不是随机的;它们包含 重复切片,回文和其他功能 可以用比拼写所需的更少的比特来表示 完整的二进制序列......
使用所提出的算法,序列将被压缩75% 无论重复或不重复的次数 序列中的模式。“
使用基于哈希的数据结构进行DNA压缩,国际信息技术和知识管理杂志 2010年7月至12月,第2卷,第2期,第383-386页。
编辑:有一个名为GenCompress的程序声称能有效地压缩DNA序列:
http://www1.spms.ntu.edu.sg/~chenxin/GenCompress/
编辑:另请参阅BioStar上的this question。
答案 1 :(得分:2)
如果您不介意使用复杂的解决方案,请查看this paper或this paper甚至this one which is more detailed。
但我认为你需要更好地指明你正在处理的事情。某些特定应用程序可能导致不同的存储。例如,我引用的最后一篇论文涉及DNA的有损压缩......
答案 2 :(得分:1)
碱基对总是对向上,因此您只需要存储该链的一侧。现在,我怀疑如果DNA中存在某些突变(如二硫胺键)会导致相反的链与储存的链完全相反,这是有效的。除此之外,我认为除了以某种方式压缩它之外你还有很多选择。但是,再一次,我不是生物信息学家,所以可能有一些非常复杂的方法可以在一个狭小的空间中存储一堆DNA。如果它是iOS应用程序的另一个想法就是将读取器放在设备上并从Web服务中读取序列。
答案 3 :(得分:1)
使用参考基因组的差异。根据您发布的大小(3Gbp),您似乎想要包含完整的人类序列。由于序列在人与人之间没有太大差异,因此您应该能够通过仅存储差异来大量压缩。
可以提供很多帮助。除非您的目标是存储参考序列本身。然后你就被困住了。
答案 4 :(得分:0)
考虑一下,你能得到多少种不同的组合?满分4分(我认为大概是16分)
actg = 1 atcg = 2 atgc = 3等等,所以
你可以创建一个像[1,2,3]这样的数组,然后你可以更进一步,
检查1是否跟随2,将12转换为a,13 = b等等...... 如果我理解DNA有点意味着你无法获得某个值
必须与c匹配,而t与g或类似的东西会减少您的选择, 所以基本上你可以寻找一个序列并给它一些你也可以转换回来的东西......
答案 5 :(得分:0)
您想要查看三维空间填充曲线。 3d sfc将3d复杂度降低到1d复杂度。它有点像n八叉树或r树。如果您可以将完整的dna存储在sfc中,您可以在树中查找类似的图块,尽管sfc最有可能用于有损压缩。如果您知道瓷砖的大小,然后尝试像霍夫曼压缩或哥伦布代码那样的熵压缩,你可以使用像bwt这样的块排序算法吗?
答案 6 :(得分:0)
你可以使用像MFCompress,Deliminate,Comrad这样的工具。这些工具提供的熵小于2.即存储每个符号需要少于2位