在Python中找到一组字符串的最小汉明距离
我有一组n(〜1000000)个字符串(DNA序列)存储在列表trans中。我必须在列表中找到所有序列的最小汉明距离。我实现了一个幼稚的蛮力算法,该算法已经运行了一天多,并且尚未提供解决方案。我的代码是
dmin=len(trans[0])for i in xrange(len(trans)):
for j in xrange(i+1,len(trans)):
dist=hamdist(trans[i][:-1], trans[j][:-1])
if dist < dmin:
dmin = dist
有没有更有效的方法可以做到这一点?hamdist是我编写的用于查找汉明距离的函数。它是
def hamdist(str1, str2): diffs = 0
if len(str1) != len(str2):
return max(len(str1),len(str2))
for ch1, ch2 in zip(str1, str2):
if ch1 != ch2:
diffs += 1
return diffs
回答:
您可以hamdist
通过添加一个可选参数来优化功能,该参数包含到目前为止的最小距离,这样,如果diffs
达到该值,您将停止计算距离,因为此比较将为您提供比最小距离更大的距离:
def hamdist(str1, str2,prevMin=None): diffs = 0
if len(str1) != len(str2):
return max(len(str1),len(str2))
for ch1, ch2 in zip(str1, str2):
if ch1 != ch2:
diffs += 1
if prevMin is not None and diffs>prevMin:
return None
return diffs
您将需要调整主循环以使用None
来自的返回值hamdist
:
dmin=len(trans[0])for i in xrange(len(trans)):
for j in xrange(i+1,len(trans)):
dist=hamdist(trans[i][:-1], trans[j][:-1])
if dist is not None and dist < dmin:
dmin = dist
以上是 在Python中找到一组字符串的最小汉明距离 的全部内容, 来源链接: utcz.com/qa/414251.html