简单实现计算Edit Distance算法
最近因为工作需要,学习了NLP的相关知识,简单动手实现了一下计算Edit Distance的算法,就是计算一个字符串要变成另一个字符串需要的代价,这其中采用Levenshtein方式,即规定一个插入和一个删除的代价是1,一次替换的代价是2.
简单的逻辑:
对于长度为M的字符串X,长度为N的字符串Y,
Initialization:
D(i,0)=i
D(0,j)=j
Recurrence Relation:
for each i=1...M
for each j=1...N
D(i,j)=Min(D(i-1,j)+1,D(i,j-1)+1,X(i)==Y(j)?D(i-1,j-1):D(i-1,j-1)+2)
Termination:
D(M,N) is distance
public static int EditDistance(string str1, string str2)
{
int len1 = str1.Length;
int len2 = str2.Length; int[,] table = new int[len1+, len2+];
for (int i = ; i < len1; i++)
{
for (int j = ; j < len2; j++)
{
table[i, j] = ;
}
}
table[, ] = ; for (int i = ; i <= len1; i++)
{
for (int j = ; j <= len2; j++)
{
if (i == && j != )
{
table[i, j] = table[i, j - ] + ;
}
if (j == && i != )
{
table[i, j] = table[i - , j] + ;
}
if (i > && j > )
{
int temp = (str1[i-] == str2[j-]) ? table[i - , j - ] : table[i - , j - ] + ;
table[i, j] = Min(table[i, j - ] + , table[i - , j] + , temp);
}
}
}
return table[len1, len2];
}
public static int Min(int val1, int val2, int val3)
{
return (val1 < val2 ? val1 : val2) < val3 ? (val1 < val2 ? val1 : val2) : val3;
}
递归:
public static int EditDistanceD(string str1, string str2, int len1, int len2)
{
if (len1 == || len2 == )
{
return Max(len1, len2);
} return str1[len1-]==str2[len2-]?Min(EditDistanceD(str1.Substring(,len1-), str2.Substring(, len2-), len1-, len2-), EditDistanceD(str1.Substring(,len1-), str2, len1-, len2)+, EditDistanceD(str1, str2.Substring(, len2-), len1, len2-)+):Min(EditDistanceD(str1.Substring(,len1-), str2.Substring(, len2-), len1-, len2-)+, EditDistanceD(str1.Substring(,len1-), str2, len1-, len2)+, EditDistanceD(str1, str2.Substring(, len2-), len1, len2-)+);
}
public static int Max(int val1, int val2)
{
return val1 > val2 ? val1 : val2;
}
具体讲解参考:
http://blog.csdn.net/huaweidong2011/article/details/7727482
简单实现计算Edit Distance算法的更多相关文章
- 字符串相似度算法——Levenshtein Distance算法
Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一 ...
- 字符串相似度算法-LEVENSHTEIN DISTANCE算法
Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一 ...
- 利用编辑距离(Edit Distance)计算两个字符串的相似度
利用编辑距离(Edit Distance)计算两个字符串的相似度 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可 ...
- stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)
I. 最小编辑距离的定义 最小编辑距离旨在定义两个字符串之间的相似度(word similarity).定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等. 编辑距离就 ...
- Minimum edit distance(levenshtein distance)(最小编辑距离)初探
最小编辑距离的定义:编辑距离(Edit Distance),又称Levenshtein距离.是指两个字串之间,由一个转成还有一个所需的最少编辑操作次数.许可的编辑操作包含将一个字符替换成还有一个字符. ...
- [LeetCode] Edit Distance 编辑距离
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- Levenshtein Distance算法(编辑距离算法)
编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符, ...
- 编辑距离——Edit Distance
编辑距离 在计算机科学中,编辑距离是一种量化两个字符串差异程度的方法,也就是计算从一个字符串转换成另外一个字符串所需要的最少操作步骤.不同的编辑距离中定义了不同操作的集合.比较常用的莱温斯坦距离(Le ...
- 动态规划 求解 Minimum Edit Distance
http://blog.csdn.net/abcjennifer/article/details/7735272 自然语言处理(NLP)中,有一个基本问题就是求两个字符串的minimal Edit D ...
随机推荐
- 【译】Optimize caching-缓存优化
缓存优化 大部分的网页都包括不常更改的资源,比如CSS文件,图片文件,JavaScript文件等.这些资源通过网络下载需要一定的时间,这就增加了网页加载的总时间.HTTP缓存可以让这些资源通过浏览器以 ...
- MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具
MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具.它是著名的数据库设计工具DBDesigner4的继任者.你可以用MySQL Workbench设计和创建新的数据库 ...
- smarty之缓存笔记
smarty缓存技术 在smarty中,缓存分为:普通缓存,单模版都缓存,局部缓存. 缓存:1:首选打开缓存配置项:$smarty->caching=true; 2:缓存生命周期的配置选项:$s ...
- IC卡、M1卡、CPU卡、SAM卡、PSAM卡的联系与区别
一. 技术方面(非接触式IC卡) 1. 逻辑加密卡又叫存储卡,卡内的集成电路具有加密逻辑和EEPROM(电可擦除可编程只读存储器). 2. CPU卡又叫智能卡,卡内的集成电路包括中央处理器(CPU ...
- Hibernate 1、Hello Hibernate
所使用到的jar 包: 1.创建实体类 public class User { private Integer id; private String name; private String addr ...
- ios的标志常量
1 dec 2 fixed 3 hex 4 internal 5 left 6 oct 7 right 8 scientific 9 showbase 10 showpoint 11 showpos ...
- LinqToSQL实例参见
/// <summary> /// (增)向表中插入数据 /// </summary> public void InsertData() { LinqToSQLDataCont ...
- Robotium双client測试框架
互联网的本质就是信息交换.移动互联网更是如此, 所以很多移动互联网的服务类应用中有着身份地位不同的两种用户(比如:交易中的买家和卖家, 教学中的老师和学生, 打车中的车主和乘客).近期的工作是给公司的 ...
- mac itunes ios 7 升级 出现 this device isn't eligible for the requested build
今天在对我的iPod 进行iOS7 升级的时候(在mac iTunes 上进行的),一直弹出框提示 解决办法就是 1. 打开HOSTS (Mac 下路径为:/etc/hosts, 至于怎么打开host ...
- java设计模式之——代理模式
1,什么是代理模式? 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 2,策略模式有什么好处? 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象 ...