編輯距離在自然語言處理中的應用是非常廣泛的,比如在文字糾錯中,編輯距離是必不可少的演算法,下面這個題目就是計算兩個單詞的編輯距離計算:
這道題目基本上用普通的辦法很難去解決,只能考慮用動態規劃來進行遞推解答。首先我們可以確定只定義一維的dp[
i]dp[i]
dp[i
]不能夠有效地簡化問題的處理,那麼我們嘗試用二維的dpdp
dp來解答這個問題,首先我們定義乙個二維的dp列表 dp[
i][j
]dp[i][j]
dp[i][
j],表示wor
d1word1
word
1的前i
ii個字母和wor
d2word2
word
2的前j
jj個字母相同,需要操作的步數。我們可以看看以下這些操作:
for i in range(len1+1):
# 表示word1長度為i,word2為空,需要進行i次刪除操作或者插入操作
dp[i][0] = i
for j in range(len2+1):
# 表示word1為空,word2長度為j,需要進行j次刪除操作或者插入操作
dp[0][j] = j
這樣我們就可以寫出完整的動態規劃解題**了:
class solution(object):
def mindistance(self, word1, word2):
""":type word1: str
:type word2: str
:rtype: int
"""len1 = len(word1)
len2 = len(word2)
dp = [[0 for _ in range(len2+1)] for _ in range(len1+1)]
# 初始化
for i in range(len1+1):
dp[i][0] = i
for j in range(len2+1):
dp[0][j] = j
for i in range(1,len1+1):
for j in range(1,len2+1):
if word1[i - 1] == word2[j -1]:
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)
return dp[len1][len2]
所以這樣的題目,我們必須要考慮清楚,使用二維的動態規劃思想來解答問題,這個編輯距離的演算法在nlp領域也是使用非常廣泛的,希望不管是在nlp領域還是演算法方面,能夠對動態規劃思想有著深刻的理解,謝謝。 Leetcode 72 編輯距離
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 r ...
leetcode 72 編輯距離
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3解釋 horse rorse 將 h 替換為 r r...
LeetCode72 編輯距離
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 r rorse rose 刪除 r rose ...