莱文斯坦(列文斯坦)距离

莱文斯坦距离(LD)用于衡量两个字符串之间的相似度。 以下我们称这两个字符串分别为 s (原字符串) 和 t (目标字符串)。莱文斯坦距离被定义为''将字符串 s 变换为字符串 t 所需的删除、插入、替换操作的次数''。

例如:

  • s="test", t="test", 那么 LD(s,t)=0,因为不需要做任何变换两者已相等;
  • s="test", t="tent", 那么 LD(s,t)=1,因为s变换为t只需做一次替换(将"s"替换为"n")。

莱文斯坦距离越大,字符串的相似程度越低。

莱文斯坦距离以俄国科学家Vladimir Levenshtein命名,他于1965年发明了这个算法。 如果你对Levenshtein这个词的发音有问题,也可以称这个距离为编辑距离

莱文斯坦距离被应用于以下领域:

  • 拼写检查
  • 语音识别
  • DNA分析
  • 剽窃检测
  • 莱文斯坦距离 - 算法

     

    1. 设 s 的长度为 n,t 的长度为 m。如果 n = 0,则返回 m 并退出;如果 m=0,则返回 n 并退出。否则构建一个数组 d[0..m, 0..n]。
    2. 将第0行初始化为 0..n,第0列初始化为0..m。
    3. 依次检查 s 的每个字母(i=1..n)。
    4. 依次检查 t 的每个字母(j=1..m)。
    5. 如果 s[i]=t[j],则 cost=0;如果 s[i]!=t[j],则 cost=1。
    6. 将 d[i,j] 设置为以下三个值中的最小值:
      1. 紧邻当前格上方的格的值加一,即 d[i-1,j]+1
      2. 紧邻当前格左方的格的值加一,即 d[i,j-1]+1
      3. 当前格左上方的格的值加cost,即 d[i-1,j-1]+cost
    7. 重复3-6步直到循环结束。d[n,m]即为莱茵斯坦距离。

转载于:https://www.cnblogs.com/PierreDelatour/archive/2011/11/12/2246644.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值