莱文斯坦距离计算(LD levenshtein Distance)
基本理论
莱文斯坦距离用户衡量两个字符串之间的相似度.s(原字符串)和t(目标字符串).莱文斯坦距离被定义为"将字符串s变换为字符串t所需的删除 插入 替换操作的次数
算法原理
该算法的解决是基于动态规划的思想,具体如下:
设 s 的长度为 n,t 的长度为 m。如果 n = 0,则返回 m 并退出;如果 m=0,则返回 n 并退出。否则构建一个数组 d[0…m, 0…n]。
将第0行初始化为 0…n,第0列初始化为0…m。
依次检查 s 的每个字母(i=1…n)。
依次检查 t 的每个字母(j=1…m)。
如果 s[i]=t[j],则 cost=0;如果 s[i]!=t[j],则 cost=1。将 d[i,j] 设置为以下三个值中的最小值:
紧邻当前格上方的格的值加一,即 d[i-1,j]+1
紧邻当前格左方的格的值加一,即 d[i,j-1]+1
当前格左上方的格的值加cost,即 d[i-1,j-1]+cost
重复3-6步直到循环结束。d[n,m]即为莱茵斯坦距离。
为什么:
其实思想就是基于上一个状态的最小距离,推出下一个的最小距离,对于两个数据A,B来说,如何找出他们的上一个状态呢,其实穷举一下就可以了假设当前状态大家都是一个字符A=“a”,B=“a”,那么他们上一个状态有以下3种情况,A="",