美文网首页
两个字符串最小编辑距离算法

两个字符串最小编辑距离算法

作者: stonehank | 来源:发表于2018-07-19 19:17 被阅读0次

学习Levenshtein Distance算法

任意单个字符变动有3种情况,替换,增加和删除:

1. 如果对应的字符相同,则从它的左,斜或者上方选取最小值,直接填写
2. 如果对应的字符不相同,则从它的左,斜或者上方选取最小值,+1后填写

括号内部表示需要进行移动的步数

  • 情况一:从ab到ac的变动

x位置 字符不相等(b!==c),但是 i位置变动最小,所以从i位置的数值加1,斜线说明说替换

  a     b
a i(0) j(1)
c l(1)  x
// x=1
  • 情况二:从acd到ac的变动

x位置 字符不相等(b!==c),但是 m位置变动最小,所以从m位置的数值加1,横向说明增加

   a     c     d
a i(0)  j(1)  k(2)
c l(1)  m(0)  x 
// x=1
  • 情况三:从ab到abc的变动

x位置 字符不相等(b!==c),但是 l位置变动最小,所以从l位置的数值加1,竖向说明减少

  a      b
a i(0)  j(1)
b k(1)  l(0)
c m(2)  x
// x=1

每一次的判断所确定的最小变动数,又是下一次判断变动的基础

function minED(a,b){
  // 先创建a和b的二维数组(横竖都额外多一行,作为第一个字符比较的基础)
  let arr=Array(b.length+1).fill(null);
  for(let i=0;i<arr.length;i++){
    arr[i]=Array(a.length+1).fill(null);
    if(i===0){
      for(let j=0;j<arr[0].length;j++){arr[0][j]=j;}
    }
    arr[i][0]=i;
  }
  // 对每一个字符进行比较,利用上一次比较的基础
  for(let i=1;i<arr.length;i++){
    for(let j=1;j<arr[i].length;j++){
      let count=0;
      if(b[i-1]!==a[j-1]){
        count++;
      }
      arr[i][j]=Math.min(arr[i-1][j-1],arr[i-1][j],arr[i][j-1])+count;
    }
  }
  return arr[b.length][a.length]
}

let a='abcd',b="adbc"
minED(a,b)
let a='abcd',b="adbc"
minED(a,b)

// 输出数据:
[ [ 0, 1, 2, 3, 4 ],
  [ 1, 0, 1, 2, 3 ],
  [ 2, 1, 1, 2, 2 ],
  [ 3, 2, 1, 2, 3 ],
  [ 4, 3, 2, 1, 2 ] ]

因此从'abcd'变动到'adbc',最小移动步数是2

相关文章

  • 最小编辑距离_Python

    最小编辑距离或莱文斯坦距离(Levenshtein),指由字符串A转化为字符串B的最小编辑次数。允许的编辑操作有:...

  • 最小编辑距离算法

    https://github.com/youngwind/blog/issues/106

  • iOS - 最小编辑距离算法

    1、https://blog.csdn.net/qq_34552886/article/details/72556242

  • 两个字符串最小编辑距离算法

    学习Levenshtein Distance算法 任意单个字符变动有3种情况,替换,增加和删除: 1. 如果对应的...

  • 序列比对(二十五)——编辑距离

    原创:hxj7 本文介绍两个字符串的编辑距离并给出代码。 编辑距离 所谓编辑距离,就是给定两个字符串后,将一个字符...

  • Levenshtein 距离

    简介 Levenshtein 距离是一种编辑距离,用来表示两个字符串的差异。编辑距离是指从字符串 A 开始,修改成...

  • 最小编辑距离

    编辑距离,又称为Levenshtein距离,由俄罗斯的数学家Vladimir Levenshtein在1965年提...

  • 最小编辑距离

    题目 给定一个源串S和目标串T,能够对源串进行如下操作:1.在给定位置上插入一个字符2.替换任意字符3.删除任意字...

  • 最小编辑距离

    定义:两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包...

  • 最小编辑距离

    1.定义 假设只有三种编辑方式:插入,删除,替换。每种编辑方式对应一次操作。按规定的编辑方式,将原始字符串变换到目...

网友评论

      本文标题:两个字符串最小编辑距离算法

      本文链接:https://www.haomeiwen.com/subject/fknnpftx.html