最小编辑距离

定义:两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

作用:比较两个字符串的相似度

算法步骤:
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]

你可能感兴趣的:(最小编辑距离)