令 f ( w o r d 1 [ : i ] , w o r d 2 [ : j ] ) f(word1[:i],word2[:j]) f(word1[:i],word2[:j])表示为:word2[:j]可由word1[:i]最少经过 f ( w o r d 1 [ : i ] , w o r d 2 [ : j ] ) f(word1[:i],word2[:j]) f(word1[:i],word2[:j])次insert、delete和replace操作后得到。则原问题转换成:
求 解 函 数 : f ( w o r d 1 [ : n ] , w o r d 2 [ : m ] ) 求解函数:f(word1[:n],word2[:m]) 求解函数:f(word1[:n],word2[:m])
则:
令 f ( w o r d 1 [ : i ] , w o r d 2 [ : j ] ) 为 S [ i ] [ j ] S [ i ] [ j ] = m i n ( S [ i ] [ j − 1 ] + 1 , S [ i − 1 ] [ j ] + 1 , S [ i − 1 ] [ j − 1 ] + w o r d 1 [ i ] = = w o r d 2 [ j ] ? 0 : 1 ) 令f(word1[:i],word2[:j]) 为S[i][j] \\ S[i][j] = min\Big(S[i][j-1]+1,S[i-1][j]+1,S[i-1][j-1]+word1[i]==word2[j]?0:1\Big) 令f(word1[:i],word2[:j])为S[i][j]S[i][j]=min(S[i][j−1]+1,S[i−1][j]+1,S[i−1][j−1]+word1[i]==word2[j]?0:1)
S [ i ] [ j ] S[i][j] S[i][j]表示 w o r d 1 [ : i ] word1[:i] word1[:i]转换成 w o r d 2 [ : j ] word2[:j] word2[:j]的最少次数;当insert时,i<j。因为 w o r d 1 [ : i ] word1[:i] word1[:i]需要 S [ i ] [ j − 1 ] S[i][j-1] S[i][j−1]次转换成 w o r d 2 [ : j − 1 ] word2[:j-1] word2[:j−1],则 w o r d 1 [ : i ] word1[:i] word1[:i]只需要 S [ i ] [ j − 1 ] + 1 S[i][j-1]+1 S[i][j−1]+1(多了次插入)次转换成 w o r d 2 [ : j ] word2[:j] word2[:j];当delete时,说明 w o r d 1 [ : i − 1 ] word1[:i-1] word1[:i−1]可以以更少的次数转换成 w o r d 2 [ : j ] word2[:j] word2[:j]。可以直接delete w o r d 1 [ i ] word1[i] word1[i],转换次数为 S [ i − 1 ] [ j ] + 1 S[i-1][j]+1 S[i−1][j]+1;当replace时, w o r d 1 [ i ] ! = w o r d 2 [ j ] word1[i]!=word2[j] word1[i]!=word2[j]。转换次数为 S [ i − 1 ] [ j − 1 ] + 1 S[i-1][j-1]+1 S[i−1][j−1]+1;当 w o r d 1 [ i ] = = w o r d 2 [ j ] word1[i]==word2[j] word1[i]==word2[j]时,则不需要任何操作。转换次数为 S [ i − 1 ] [ j − 1 ] S[i-1][j-1] S[i−1][j−1]。