while entryp1:
#... do what you have to do
fip2 = open("seqp2.fasta")
entryp2 = get_fastq(fip2)
while
.....
fip2.close()
......
hulnglei 发表于 2010-06-01 16:23
回复 t6760915
我的重点还是在比较。两个文件其实是从一个文件里面分离的,每一个序列的名字都是不同的。序列也是要比较,只能有1个字符的不同 ...
hulnglei 发表于 2010-06-01 19:03
回复 hulnglei
如果你希望在100万个和100万个之间任何一对进行比较的话,需要考虑一下算法。例如可以将其中的一组建立一棵树,字符串的每个字符是一个节点,它的子节点是下一个字符,因此树的深度是字符串的长度。然后在此树中对另外一组的每个字符串进行搜索,当发现有两个节点不同时就可以停止搜索。这时可以省略后续所有节点的搜索,应该可以成数量级的加快计算速度。
如果你的字符串中的字符只有ATCG四个字符的话,并且长度是31的话,可以考虑使用两个32bit的长整型数保存其状态。这样可以通过异或位操作快速比较,当然还需要一个数比特1个数的函数,这些在C语言级别做的话应该是非常快的。
HyryStudio 发表于 2010-06-02 20:52
回复 hulnglei
因为你只找相差一个字符的,因此对于字符串中的每个字符,都修改为其它三个,这样31*3 = 93,也就是每个字符串搜索93次。也就是穷举和此字符串相差一个的所有可能情况,然后都到字典中去找:
例如对于
AC....
搜索
TC...., CC..., GC..., AA..., AT..., AG...,
这样搜索空间从180万*180万降低到180万*93,应该能在有限的时间之内完成。 ...
HyryStudio 发表于 2010-06-03 19:41
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |