其他分享
首页 > 其他分享> > 关于编辑距离的再次认识

关于编辑距离的再次认识

作者:互联网

 

定义​f[i][j]​为word1前i个字符到word2的前j个字符的转化的最小步。

接着,我们来考虑状态转移方程。

 

pattern, target = "book", "d7fh"
m, n = len(pattern), len(target)
dp = [[0]*n for _ in range(m)]   
# dp[i][j]表示第一个字符的前i个字符到第二个前j个字符需要的最小操作数
# word1后面插入一个就和word2相等:word1插入前(i-1)到word2(j)的编辑距离+1,即dp[i-1][j] + 1
# word1和word2删除一个字符相等:word1(i)到word2删除前(j-1)的编辑距离+1,即dp[i][j-1] + 1
# word1和word2替换最后一个字符相等:不产生相对位置移动,只是在各自前一个字符上最小操作数加1,及dp[i-1][j-1] + 1
for i in range(m):
    dp[i][0] = i
for j in range(n):
    dp[0][j] = j
for i in range(m):
    for j in range(n):
        if pattern[i] == target[j]:
            dp[i][j] = dp[i-1][j-1]
        else:
            dp[i][j] = min(dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-1]+1)
print(dp[m-1][n-1])

 

标签:认识,字母,距离,编辑,range,word1,word2,dp
来源: https://www.cnblogs.com/demo-deng/p/16580760.html