リストtransに格納されたn(〜1000000)文字列(DNAシーケンス)のセットがあります。リスト内のすべてのシーケンスの最小ハミング距離を見つける必要があります。私は単純なブルート フォース アルゴリズムを実装しましたが、これは 1 日以上実行されており、まだ解決策が示されていません。私のコードは
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