笔者最近在学习python, 用于一些简单开发和数据研究,needleman-wunch 算法是字符近似匹配算法,主要用于字符串近似匹配(拼写纠正)和生物学应用。以下是试验的代码:
str1 = 'crat'
str2 = 'arts'
ins = -1
dele = -1
repl = -1
match = 1
ls1 = len(str1)
ls2 = len(str2)
j = 0 # row
k = 1 #(column)
l = 0
valtab =[[0 for i in range(ls1+1)] for i in range(ls2+1)]
valtab1 = valtab[0]
# -------matrix initialization--------------
for valtab1 in valtab[0]:
valtab[0][j] = j*dele
j = j+1
while k < ls2+1:
valtab[k][0] = k*ins
k = k+1
# print(valtab1)
# -------matrix initialization--------------
k = 1
j = 1
while j < ls1+1:
while k < ls2+1:
if str1[j-1] == str2[k-1]:
valtab[j][k] = max(valtab[j-1][k-1]+match,valtab[j-1][k]+match,valtab[j][k-1]+match)
k = k+1
else:
valtab[j][k] = max(valtab[j-1][k-1]+repl,valtab[j-1][k]+dele,valtab[j][k-1]+ins)
k = k+1
k = 1
j = j+1
print(valtab[0][1],valtab[1][1],valtab[2][1],valtab[3][1],valtab[4][1])