我正在遍历大量字符串以查找相似的字符串(有几个不匹配)。以下代码有效,但需要约 20 分钟,而我的目标是在 5 分钟内完成。有没有更有效的方法来做到这一点?这段代码的哪一部分是最受限制的?
我有k=10
, mism=3
,seq
是一个由字符 A、T、C 和 G 组成的字符串。每个pattern
和kmer
是 k 个字符长。我生成了patterns
长度为 4**k(~100 万)和kmers
长度为 len(seq)-k+1(~300)的列表。frequent
是一本字典。
测试迭代不到一分钟:
for i in range (0,4**k):
for j in range(0,len(kmers)):
pass
这是我需要提高效率的真实计算:
for pattern in patterns:
for kmer in kmers:
mism_counter=0
for j in range(0,k):
if not kmer[j]==pattern[j] : mism_counter+=1
if mism_counter <= mism :
if pattern in frequent:
frequent[pattern] += 1
else:
frequent[pattern] = 1
我尝试了 wikipedia 的hamming_distance
功能而不是我的每个字符比较,并且还尝试删除字典并将pattern
's 转储到列表中以供进一步处理。这些都没有提高循环的性能。任何帮助,将不胜感激!