scala文本编辑距离算法实现
来源:互联网 发布:wps两列对比重复数据 编辑:程序博客网 时间:2024/05/29 10:19
编辑距离定义:
编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。
许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如将eeba转变成abac:
1. eba(删除第一个e)
2. aba(将剩下的e替换成a)
3. abac(在末尾插入c)
所以eeba和abac的编辑距离就是3
俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。
许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如将eeba转变成abac:
1. eba(删除第一个e)
2. aba(将剩下的e替换成a)
3. abac(在末尾插入c)
所以eeba和abac的编辑距离就是3
俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。
代码实现:
def editDist(s1:String, s2:String):Int ={ val s1_length = s1.length+1 val s2_length = s2.length+1 val matrix=Array.ofDim[Int](s1_length,s2_length) for(i <- 0.until(s1_length)){ matrix(i)(0) = i } for(j <- 0.until(s2_length)){ matrix(0)(j) = j } var cost = 0 for(j <- 1.until(s2_length)){ for(i <- 1.until(s1_length)){ if(s1.charAt(i-1)==s2.charAt(j-1)){ cost = 0 }else{ cost = 1 } matrix(i)(j)=math.min(math.min(matrix(i-1)(j)+1,matrix(i)(j-1)+1),matrix(i-1)(j-1)+cost) } } matrix(s1_length-1)(s2_length-1)}
阅读全文