字符串编辑距离
来源:互联网 发布:ldc1314中文数据手册 编辑:程序博客网 时间:2024/05/12 08:45
1.关于两个字符串的距离,一种自然度量就是看他们相互匹配的程度如何。 简单的说,编辑距离可以被看为将一个字符串变换为另一个字符串所需的最小编辑操作(插入,删除以及替换)
2. 一般采用dp来解决这个问题。dp首要问题就是定义子问题。
假设我们目标是寻找两个字符串x[1..m]和y[1..n]之间的编辑距离。 好的子问题是解决问题道路上的一个部分. 故我们考虑一下两个字符串的前缀x[1..i]与y[1..j]的编辑距离。
我们记该子问题为 E(i,j) 。所以,最终我们的目标就变成了求解 E(m,n)
3. 下面便是关键的步骤了:
x[1..i] 与y[1..j]的最佳对齐右侧的列只可能是如下三种情况之一:
x[i] - x[i]
- y[j] y[j]
(y末尾插入一个字符) (x末尾插入一个字符) (两者相同或者替换)
故我们可以得到以下的关系式:
E(i,j) = min { 1+E(i-1,j) , 1+E(i,j-1), E(i-1,j-1) } if E(i) == E (j)
min { 1+E(i-1,j) , 1+E(i,j-1), 1+E(i-1,j-1) } if E(i) != E (j)
4.所有我们可以得到如下的基本求解算法:
for i = 0,1,2, .... , m: E(i,0) = i for j = 0,1,2,....., n: E(0,j) = j for i=1,2,...., m: for j = 1,2,...,n: if E(i) == E (j): E(i,j) = min { 1+E(i-1,j) , 1+E(i,j-1), E(i-1,j-1) } else: E(i,j) = min { 1+E(i-1,j) , 1+E(i,j-1), 1+E(i-1,j-1) } return E(m,n)
一个leetcode上面的具体列子:
http://blog.csdn.net/jkwangbest/article/details/23430203
本文参考自 书籍<<算法概论>>
- 字符串的编辑距离
- 字符串编辑距离查表法
- 求字符串编辑距离
- 字符串的编辑距离
- 字符串编辑距离
- 字符串编辑距离
- 1020 字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离
- 求字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离算法
- 编辑字符串距离
- 字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离
- 计算机大端小端
- 重拳出击打击新闻敲诈 多举措清新闻“蛀虫”
- struct 与 typedef struct
- 常考笔试题,详细解剖C++运算符sizeof()的使用及字节对齐问题
- Oracle中的视图、触发器、函数、包
- 字符串编辑距离
- raw socket
- 唠叨
- 解决“IE图标不见了”问题
- GT-Grid初学服务端数据加载
- java网路编程学习之路(1)
- MySQL新建一个数据库的时,产生的新文件在哪?
- 线程天敌TerminateThread与SuspendThread
- 一切从基础开始