python实现Levenshtein Distance计算
Levenshtein Distance,是编辑距离的一种。指两个字符串之间,由一个转成另一个所需的最少编辑次数。允许的编辑操作包括替换、插入和删除。
例如将单词kitten转成sitting:
- sitten(k→s)
- sittin(e→i)
- sitting(none→g)
在DNA序列分析、拼写检查、语音辨识、抄袭侦测等方面都有应用。
LD算法的基本数学思想
动态规划是实现LD算法的主要思想。它的大致原理是对于一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。
举一个具体例子:
序列A:GGATCGA
序列B:GAATTCAGTTA
求这两个序列的编辑距离。
Len(A)=7
Len(B)=11
对于 1<=i<=7,1<=j<=11 有:
若 Ai = Bj,LD(i,j) = LD(i-1,j-1)
若 Ai ≠ Bj,LD(i,j) = Min(LD(i-1,j-1),(LD(i,j-1),(LD(i-1,j)) + 1
如果两个序列最后一个位点相同,这两个序列的编辑距离和分别去掉最后一个位点的编辑距离相等;
如果两个序列最后一个位点不同,这两个序列的编辑距离是三种可能性最小值加一个编辑距离。
LD(A,B)要求的即下图中最右下角的值
从第一行开始求值:
∵A1=B1=G ∴LD(A1,B1)=LD(0,0)=0
∵A1≠B2 ∴LD(A1,B2)=Min+1=1
∵A1≠B3 ∴LD(A1,B3)=Min+1=2
……
∵A1=B8 ∴LD(A1,B8)=LD(A0,B7)=7
……
求得
LD(A,B)=5
python实现
def ld