定义:两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
作用:比较两个字符串的相似度
算法步骤:
1.str1或str2的长度为0返回另一个字符串的长度。
2.初始化(n+1) * (m+1)的矩阵d,并让第一行和列的值从0开始增长。扫描两字符串(n * m级的),如果:str1[i] == str2[j],用temp记录它,为0。否则temp记为1。然后在矩阵d[i,j]赋于d[i-1,j]+1 、d[i,j-1]+1、d[i-1,j-1]+temp三者的最小值。
3.扫描完后,返回矩阵的最后一个值d[n][m]即是它们的距离。
举例:str1和str2分别为“ivan1”和“ivan2”
1、第一行和第一列的值从0开始增长
2、举证元素的产生 Matrix[i - 1, j] + 1 ; Matrix[i, j - 1] + 1 ; Matrix[i - 1, j - 1] + t 三者当中的最小值
3、依次类推直到矩阵全部生成
python实现:
def EditDistance(str1, str2):
len1 = len(str1)
len2 = len(str2)
if len1 == 0:
return len2
elif len2 == 0:
return len1
# 矩阵初始化
array = [[0 for _ in range(len1+1)] for _ in range(len2+1)]
for i in range(len1+1):
array[0][i] = i
for i in range(len2+1):
array[i][0] = i
for i in range(1, len2+1):
for j in range(1, len1+1):
if str1[i-1] == str2[j-1]:
temp = 0
else:
temp = 1
array[i][j] = min(array[i-1][j]+1, array[i][j-1]+1, array[i-1][j-1]+temp)
return array[len2][len1]