Levenshtein距離(LD)是衡量兩個字符串之間的類似度,咱們將稱之爲源字符串(s)和目標字符串(t)的距離是刪除,插入,或須要替換變換成t。例如,算法
LD(s, t) = 0
,由於他們以前不須要轉換,字符串已經徹底相同。LD(s, t) = 1
,由於一次替換(將's'替換爲'n')就能夠將s轉換成t。萊溫斯坦距離越大,則表示兩個字符串的類似度越小。ide
Levenshtein distance是以俄羅斯科學家Vladimir Levenshtein,他在1965年設計了這個算法,這個度量值有時也被稱爲編輯距離(edit distance)設計
用途:code
String s; String t; int n = s.length() int m = t.length() int cost = 0;
n
是字符串s
的長度,m
是字符串t
的長度
n == 0
返回m
m == 0
返回n
0...m
,列數(columns)是0...n
0-m
,
0-n
s
的每一個字符(i = 1; i < n; i++
)t
的每一個字符串(j = 1; j < n; j++
)s[i] == t[j]
, cost = 0
,不然cost = 1
matrix
單元格d[i, j]
的值爲下面三種狀況的最小值:
d[i-1, j]+1
d[i, j-1] + 1
cost
:d[i - 1, j - 1] + cost
(3,4,5,6)
完成以後,在單元格d[n, m]
中找到距離# 兩個字符串s 和t String s = "GUMBO"; String t = 「GAMBOL」;
- | G | U | M | B | O |
---|
- | - | G | U | M | B | O | -- | - | - | - | - | - | - | - | 0 | 1 | 2 | 3 | 4 | 5 G | 1 | 0 | A | 2 | 1 M | 3 | 2 B | 4 | 3 O | 5 | 4 L | 6 | 5
- | G | U | M | B | O |
---|
- | G | U | M | B | O |
---|
- | G | U | M | B | O |
---|
- | G | U | M | B | O |
---|
獲得距離在矩陣的右下角,"GUMBO"能夠經過兩個步驟獲得"GAMBOL"htm
U
替換成A
O
後面插入L
因此他們的距離是2
字符串