05列文斯登距离
定义:给定两个序列x和y,需要多少次增、删、改的操作,才能把x变成y?
输入:AUDI,LADA
输出:3
复杂度: O(nm)
算法:
#coding=utf-8
"""
算法:列文斯登距离
作者:lph-China
时间:2019/7/5
"""
def levenshtenin(x, y):
n = len(x)
m = len(y)
A = [[i + j for j in range(m + 1)] for i in range(n + 1)]
for i in range(n):
for j in range(m):
A[i + 1][j + 1] = min(A[i][j + 1] + 1,
A[i + 1][j] + 1,
A[i][j] + int(x[i] != y[j]))
return A[n][m]
if __name__ == '__main__':
x = 'AUDI'
y = 'LADA'
result = levenshtenin(x, y)
print(result)