最小编辑距离动态规划python

两个字符串的相似程度
将一个字符串转换成另一个字符串的最小操作次数
状态方程:
dp是(len(a)+1)*(len(b)+1)
a[i-1]=b[j-1]:dp[i][j]=dp[i-1][j-1]
a[i-1]!=b[j-1]:dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1)

边界条件:
dp[i][0]=i
dp[0][j]=j

while True:
    try:
        a=input()
        b=input()
        dp=[[0 for i in range(len(b)+1)]for j in range(len(a)+1)]
        for i in range(len(a)+1):
            dp[i][0]=i
        for j in range(len(b)+1):
            dp[0][j]=j
        for i in range(1,len(a)+1):
            for j in range(1,len(b)+1):
                if a[i-1]==b[j-1]:
                    dp[i][j]=dp[i-1][j-1]
                else:

#如果str1的第i个和str2的第j个不同,那么就需要给str1增加一个字母(也就是str1的前i-1个转化为str2的前j个的代价还要+1)
#给str2增加一个字母(也就是str1的前i个转化为str2的前j-1个的代价还要+1)
#或者把两个不同的字母换成相同的(也就是str1的前i-1个转化为str2的前j-1个的代价还要+1)
 #这样就得到str1的前i个字符转换为str2前j个字符的最小代价
                    dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1)
        print(dp[-1][-1]
    except:
        break

第三方库:
莱文斯坦(Levenshtein)距离:
最小编辑距离动态规划python_第1张图片

Levenshtein.distance(str1,str2)计算编辑距离。是描述一个字符串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、替换。算法实现:动态规划。

Levenshtein.hamming(str1,str2):计算汉明距离,要求str1和str2必须长度一致。是描述两个等长字串之间对应位置上不同字符的个数。


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200406231641748.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3QxNDcxNDY0Njcy,size_16,color_FFFFFF,t_70)

你可能感兴趣的:(最小编辑距离动态规划python)