參考了部落格
import numpy as np
"""此為編輯距離,就是str1轉化為str2的編輯距離
採用的就是動態規劃思想
舉例說明,我們以 str1="leensh",str2="levensh"為例,首先得到的結果為:
l e v e n s h
[[0. 1. 2. 3. 4. 5. 6. 7.]
l [1. 0. 1. 2. 3. 4. 5. 6.]
e [2. 1. 0. 1. 2. 3. 4. 5.]
e [3. 2. 1. 1. 1. 2. 3. 4.]
n [4. 3. 2. 2. 2. 1. 2. 3.]
s [5. 4. 3. 3. 3. 2. 1. 2.]
h [6. 5. 4. 4. 4. 3. 2. 1.]]
首先第乙個字元完全一致,所以矩陣[1,1]為0,不需要更改,如果[1,2],[1,3],...[1,7]都做改變,距離一次累加,相當於,不管以後的字元,只管
str1只有乙個字元l的情況下,變成str2的方法,需要把後邊全部變化成str2對應的字串,所以【1,2】,..,[1,7]依次累計,同理
當第二行,[2,1],認為str2,只有l的時候,由於第乙個字元相同,所以str2變成str1只需當前1個過程,【2,2】為0,由於前兩個字元相同,同理[2,3],...
[2,7],當在第3行時,【3,3】為1,但是[3,4]為什麼也為1,這個是關鍵,變成[3,4],有三個可能,[2,4],[3,3],[2,3],由於最小積累在,[3,3],[2,3]對應的
待匹配字串分別為lev ,lev,,但是[3,3]進入到[3,4],需要新增e,這樣總代價變成了[3,3]+1=2,而[2,3]當前字串為lev,我們提供的【2,3】變成第3行
新增了乙個e所以,與待匹配e相同,沒有變化,所以總代價還是1,而[3,3]已經把給的e變成了v,所以到第4步,需要重新新增e,所以代價為2,依次剩餘字串相同
所以總代價為1,他只需新增了乙個
"""def distance_str(str1,str2):
dp=np.zeros((len(str1)+1,len(str2)+1))
m=len(str1)
n=len(str2)
for k in range(1,m+1):
dp[k][0]=k
for k in range(1,n+1):
dp[0][k]=k
for k in range(1,m+1):
for j in range(1,n+1):
dp[k][j]=min(dp[k-1][j],dp[k][j-1])+1 #這裡表示上邊和下邊的數值最小數值
if str1[k-1]==str2[j-1]:
dp[k][j]=min(dp[k][j],dp[k-1][j-1])
else:
dp[k][j]=min(dp[k][j],dp[k-1][j-1]+1)
print(dp)
if __name__ == '__main__':
str1="leensh"
str2="levensh"
編輯距離演算法(Levenshtein)
編輯距離定義 編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。例如將eeba轉變成abac eba 刪除第乙個e aba 將剩下的e替換成a abac 在末尾插入c 所以eeba和abac的編輯距離就是3 俄羅斯科學家vladimir levens...
Levenshtein 計算編輯距離
levenshtein 距離,又稱編輯距離,指的是兩個字串之間,由乙個轉換成另乙個所需的最少編輯操作次數。編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。即 插入 刪除 替換 1 首先安裝python levenshtein庫,安裝完使用import levenshtein匯入該...
levenshtein字串編輯距離演算法
指的是字串a向字串b轉換的最小步數。比如字串 abc 轉換成 a 最少需要刪除 b c 兩個字元。字串操作有三種,乙個是新增插入,乙個是刪除,乙個是替換。該演算法最早由 levenshtein提出。從a字串向b字串轉換,最重要的是考慮不要重複操作,比如 abd 轉換成 abcd 只需要插入乙個 c ...