收藏 分享(赏)

编辑距离--计算字符串相似度.docx

上传人:11xg27ws 文档编号:6967668 上传时间:2019-04-28 格式:DOCX 页数:3 大小:71.67KB
下载 相关 举报
编辑距离--计算字符串相似度.docx_第1页
第1页 / 共3页
编辑距离--计算字符串相似度.docx_第2页
第2页 / 共3页
编辑距离--计算字符串相似度.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、基于编辑距离求两个字符串的相似度最近在编程之美这本书上看到这样一道题,计算两个字符串的相似度。首先得明确的是两个字符串的相似度有很多定义,既有字符表面意义的,如 apple 和 applet 很接近只相差 1 个字符,但是意思相差很远,也有基于语义的,如 person 和 people,人的单复数,但是相差了好几个字符。这里主要讨论字符表面意义的相似度。在给出字符串表面意义的相似度之前首先给出编辑距离的概念。编辑距离是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例 如 将 kitten 一 字 转 成 sit

2、ting: sitten ( k s) sittin ( e i) sitting ( g)总共需要三次变换,那么他们之间的距离就是 3定义:相似度=1/(编辑距离+1),那么 kitten 和 sitting 的相似度就是 0.25那么如何计算编辑距离呢?编程之美上给的解法个人没看懂。于是搜索出另外一种解法,简易明确。算法思路如下:给出字符串 s1,字符串 s2,长度分别是 m 和 n。 初始化:构造一个矩阵 distance,(m+1)(n+1),其中第一行写上 0-m,第一列写上 0-n。 构造:给每个矩阵元素赋值,赋值规则如下,如果当前指向的 s1 和 s2 中的元素相同,那么设 co

3、st 为 0 否则为 1.比较当前赋值元素 current 的左边的值(left),上面的值(top),左上角的值(left-top),取出最小值 min。如果 min 是 left 或 top,那么 current=min+1.否则 current=min + cost。 依次赋值,distancemn就是两个字符串的编辑距离。例子:kitten 和 sitting 的距离矩阵如下:原理:为什可以这样做呢?为什么这样做能够求出两个字符串的编辑距离呢?自己的考量如下,各位看官若有不对,不完善之处,恳请纠正。 首先看初始化,第一行 0-m,显然是空字符到一个长度 m 的字符串的距离,就是依次加上

4、去呗!执行插入操作。第一列的值也是同样的道理。 那么第二步构造是啥意思呢?为了简便起见,假设我们正在填 distance33。该点的值无非是三种选择。a) current = left+1 = 3 执行插入操作。依次变化为 ki-si-s-sib) current = top+1 = 3 执行删除操作。依次变化为 ki-si-sii-sic) current = left-top+cost = 1 不执行任何操作。 依次变化为 ki-si。显然这种方式最优用装逼语言描述如下:设 。由 到 经过这三种途径(保证完备性)1=1,1,.2=1,1, 1 2 由 到 ,最后插入1,1,1,1 由 到

5、,最后删除1,1 1,1, 由 到 ,最后将 改成1,1 1,1 这上述三种方式对应上面的 a,b,c 三种方式。因此我们取他们之间的最小值然后得到当前距离可能能保持最小,即编辑距离。附 Java 代码class editDistance private String s1;private String s2;public editDistance(String s1,String s2) this.s1 = s1;this.s2 = s2;public double getSimilarity()int matrix=new ints1.length()+1s2.length()+1;int i,j;int cost=0;/初始化矩阵for (i=0;is2.length()?s1.length():s2.length();return sim;public static void main(String args) String s1 = “apple“;String s2 = “applet“;editDistance ed = new editDistance(s1,s2);System.out.print(“The similarity between s1 and s2 is:“);System.out.println(ed.getSimilarity();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报