我想用iOS应用程序打包一个巨大的DNA序列(大约3,000,000,000个碱基对)。每个碱基对都可以有一个值 A
, C
, T
要么 G
。将每个碱基对存储在一个字节中会产生3 GB的文件,这太过分了。 :)
现在我将每个碱基对存储在两位(每个八位字节四个碱基对)中,这样就得到了750 MB的文件。即使压缩,750 MB仍然太多了。
有没有更好的文件格式可以有效地在磁盘上存储巨型碱基对?内存不是问题,因为我读了块。
我想用iOS应用程序打包一个巨大的DNA序列(大约3,000,000,000个碱基对)。每个碱基对都可以有一个值 A
, C
, T
要么 G
。将每个碱基对存储在一个字节中会产生3 GB的文件,这太过分了。 :)
现在我将每个碱基对存储在两位(每个八位字节四个碱基对)中,这样就得到了750 MB的文件。即使压缩,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应用程序只是将读者放在设备上并从Web服务读取序列。
使用参考基因组的差异。根据您发布的大小(3Gbp),您似乎想要包含完整的人类序列。由于序列在人与人之间没有太大差异,因此您应该能够通过仅存储差异来大量压缩。
可以帮到很多。除非您的目标是存储参考序列本身。然后你就被困住了。
考虑一下,你能得到多少种不同的组合?满分4分(我认为大约16分)
actg = 1 atcg = 2 atgc = 3,等等
你可以创建一个像[1,2,3]这样的数组,然后你可以更进一步,
检查1是否跟随2,将12转换为a,13 = b等等...... 如果我理解DNA有点意味着你无法获得某种价值
作为必须与c匹配,t与g或类似的东西,以减少您的选择, 所以基本上你可以寻找一个序列并给它一些你也可以转换回来的东西......
您想要查看三维空间填充曲线。 3d sfc将3d复杂度降低到1d复杂度。它有点像n八叉树或r树。如果你可以将完整的dna存储在sfc中,你可以在树中查找类似的图块,尽管sfc最有可能用于有损压缩。如果您知道瓷砖的大小,然后尝试像霍夫曼压缩或哥伦布代码那样的熵压缩,也许您可以使用像bwt这样的块排序算法?
你可以使用像MFCompress,Deliminate,Comrad这样的工具。这些工具提供的熵小于2.用于存储每个符号需要少于2位