编辑距离(Edit Distance | Levenshtein距离)

标签: 编辑距离 edit distance | 发表时间:2013-12-17 07:03 | 作者:jituotianxia2009
出处:http://blog.csdn.net

1.问题定义

编辑距离又称为Levenshtein距离,是指两个字符串之间,从一个字符串变成另一个字符串所需要的 最小编辑操作次数。可以采用的编辑操作包括: 插入操作、替换操作和删除操作。例如:字符串“a“ 与字符串 ”b“的编辑距离为1,只有一个替换操作。
将”kitten一字转成“sitting”的编辑距离为3:
sitten (k→s):替换操作
sittin (e→i):替换操作
sitting (→g):插入操作

2.问题分析

编辑距离问题可以采用 动态规划的方式来解决。假设dp[i][j]表示字符串的长度为i的字符串strA[0...i-1]和字符串长度为j的字符串strB[0...j-1]的编辑距离。接下来就要分析dp[i][j]与dp[i-1][j-1]、dp[i-1][j]、dp[i][j-1]之间的关系。
假设strA的最后一个字符为‘x’,strB的最后一个字符为‘y’,则通过‘x’与‘y’的关系得到如下:
1)如果x==y,则dp[i][j]=dp[i-1][j-1];
2)如果x!=y,将x替换为y,则dp[i][j]=dp[i-1][j-1]+1;
3)如果x!=y,将y插入到x后面,则dp[i][j]=dp[i][j-1]+1;
4)如果x!=y,将x从strA中删除,则dp[i][j]=dp[i-1][j]+1;
在x!=y的情况下,dp[i][i]的值为2)3)4)中的最小值。
初始条件:
dp[i][0]=i,dp[0][j]=j.

3.程序实现

public static int getEditDistance(String strA,String strB){
	int lenA=strA.length();
	int lenB=strB.length();
	int[][] dp=new int[lenA+1][lenB+1];
	int i,j;
	for(i=0;i<lenA;i++){
		dp[i][0]=i;
	}
	for(j=0;j<lenB;++j){
		dp[0][j]=j;
	}
	for(i=0;i<lenA;++i){
		char c1=strA.charAt[i];
		for(j=0;j<lenB;++j){
			char c2=strB.charAt[j];
			if(c1==c2)
				dp[i+1][j+1]=dp[i][j];
			else{
				int replaceTemp=dp[i][j]+1;
				int insertTemp=dp[i+1][j]+1;
				int deleteTemp=dp[i][j+1]+1;
				dp[i+1][j+1]=getMin(replaceTemp,insertTemp,deleteTemp);
			}
		}
	}
	return dp[lenA][lenB];
}
public static int getMin(int a,int b,int c){
	int min=a>b?b:a;
	return (c>min?min:c)
}

4.辑距离的应用

编辑距离可以用到以下场景:
DNA分析
拼字检查
语音辨识
抄袭侦测
相似度计算
作者:jituotianxia2009 发表于2013-12-16 23:03:50 原文链接
阅读:114 评论:0 查看评论

相关 [编辑距离 edit distance] 推荐:

编辑距离(Edit Distance | Levenshtein距离)

- - CSDN博客互联网推荐文章
编辑距离又称为Levenshtein距离,是指两个字符串之间,从一个字符串变成另一个字符串所需要的 最小编辑操作次数. 可以采用的编辑操作包括: 插入操作、替换操作和删除操作. 例如:字符串“a“ 与字符串 ”b“的编辑距离为1,只有一个替换操作. 将”kitten一字转成“sitting”的编辑距离为3:.

利用编辑距离(Edit Distance)计算两个字符串的相似度

- - Java - 编程语言 - ITeye博客
利用编辑距离(Edit Distance)计算两个字符串的相似度.         编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数. 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 一般来说,编辑距离越小,两个串的相似度越大.

[记录]字符串相似度算法(编辑距离算法 Levenshtein Distance)

- - xilo's blog
在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同. 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.

java 两字符串相似度计算算法 (转)Levenshtein Distance编辑距离算法

- - 开源软件 - ITeye博客
Levenshtein distance最先是由俄国科学家Vladimir Levenshtein在1965年发明,用他的名字命名. 不会拼读,可以叫它edit distance(编辑距离). 原理很简单,就是返回将第一个字符串转换(删除、插入、替换)成第二个字符串的编辑次数. 次数越少,意味着字符串相似度越高 .

字符串相似算法-Jaro-Winkler Distance

- - 开源软件 - ITeye博客
Jaro-Winkler Distance 算法. 这是一种计算两个字符串之间相似度的方法,想必都听过Edit Distance,Jaro-inkler Distance 是Jaro Distance的一个扩展,而Jaro Distance(Jaro 1989;1995)据说是用来判定健康记录上两个名字是否相同,也有说是是用于人口普查,具体干什么就不管了,让我们先来看一下Jaro Distance的定义.

字幕編輯軟體Subtitle Edit的使用技巧

- - 簡睿隨筆
Subtitle Edit相較 AegiSub是比較少人使用的字幕編輯軟體,但是因為它仍持續在開發,因此我挑選了它做為我主要使用的字幕編輯工具. 本影片先介紹Subtitle Edit的安裝,再介紹快捷鍵的設定與語氣詞的刪除與替換,再說明使用上的一些小技巧,讓字幕的修改能更迅速、更有效率. 多重取代設定(Ctrl+Alt+M):加入要移除或變更的語氣詞.

Komodo Edit – 免费跨平台文本编辑 | 小众软件 > 办公软件

- Coolxll - 小众软件
公广二狗每天切换于 Mac/Win/Linux 之间,刚习惯一种环境就换另一种,神经分裂的厉害. 在文本编辑方面,二狗用 Komodo Edit,不轻量不强大,但中规中矩该有的都有了,关键是免费且跨平台使用体验一致,减少精神病患风险. 下载: 官网 | 下载 | 来自小众软件. ©2011 Thruth for 小众软件 | 原文链接 | 17 留言 | 加入我们 | 投稿 | 订阅指南.