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
字符串