俄罗斯科学家Vladimir Levenshtein在1965年提出了编辑距离概念。

编辑距离,又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的三种编辑操作包括插入一个字符、删除一个字符、将一个字符替换成另一个字符。 至今,编辑距离一直在相似句子检索的领域中发挥着不可忽视的作用。

如果是: 
abcde 
acefg 
最优对齐状态是: 
abcde 
a  c  efg 
没有对上的列数是4,函数输出值为4。

状态转移方程是:d[i][j] = min{ d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1]+(a[i]==b[j]? 0:1) }

你看懂啦吗?

d[i][j]表示s1的前i个和s2的前j个字符相等。

初始状态为d[i][0]=i;d[0][i]=i;

(1)d[i-1][j]表示s1的前i-1个字符和s2的前j个字符已经相同啦,此时可以在s1的后面加上s2的最后一个字符或者把s2最后的字符去掉,即此时d[i][j]=d[i-1][j]+1;

(2)d[i][j-1]和(1)相同;

(3)d[i-1][j-1]时分两种情况

当s1[i]==s2[j]时,d[i][j]=d[i-1][j-1];

当s1[i]!=s2[j]时,d[i][j]=d[i-1][j-1]+1;

Hrbust 1284

 #include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
char s1[],s2[];
int dp[][];
int main()
{
int n;
cin>>n;
while(n--)
{
cin>>s1+>>s2+;
int l1=strlen(s1+);
int l2=strlen(s2+);
dp[][]=;
for(int i=;i<=l1;i++){
dp[i][]=i;
}
for(int i=;i<=l2;i++){
dp[][i]=i;
}
for(int i=; i<=l1; i++)
{
for(int j=; j<=l2; j++)
{if(s1[i]==s2[j])//if一定要紧接着for,顺序错啦就不对啦哦
dp[i][j]=dp[i-][j-];
else dp[i][j]=dp[i-][j-]+;
dp[i][j]=min(dp[i][j],dp[i][j-]+);
dp[i][j]=min(dp[i][j],dp[i-][j]+); }
}
cout<<dp[l1][l2]<<endl;
}
return ;
}

DP编辑距离的更多相关文章

  1. 51nod 1183 - 编辑距离 - [简单DP][编辑距离问题][Levenshtein距离问题]

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 编辑距离,又称Levenshtein距离(也叫做Edi ...

  2. [dp]编辑距离问题

    https://www.51nod.com/tutorial/course.html#!courseId=3 转移方程: 注意如何对齐的. 这个算法的特点是,S和T字符串左边始终是对齐的.为了更好地理 ...

  3. POJ3356 – AGTC(区间DP&&编辑距离)

    题目大意 给定字符串X和Y,可以对字符串进行一下三种操作: 1.删除一个字符 2.插入一个字符 3.替换一个字符 每个操作代价是1,问运用以上三种操作把X变为Y所需的最小步数是多少? 题解 定义dp[ ...

  4. 经典dp 编辑距离

    给定两个字符串S和T,对于T我们可以进行三种操作 (1)在任意位置增加字符 (2)删除字符 (3)替换字符 问最少多少次能把T变成S? 设f(i,j)是S的前i位和T的前j位对齐的最小花费 接下来分析 ...

  5. 51nod 1183 编辑距离(dp)

    题目链接:51nod 1183 编辑距离 #include<cstdio> #include<cstring> #include<algorithm> using ...

  6. Codeforces 56D Changing a String 编辑距离 记忆dp

    主题链接:点击打开链接 编辑距离.,== 一边dp虽然录制前体累,,依然是dp #include<iostream> #include<cstdio> #include< ...

  7. POJ 3356 AGTC(DP求字符串编辑距离)

    给出两个长度小于1000的字符串,有三种操作,插入一个字符,删除一个字符,替换一个字符. 问A变成B所需的最少操作数(即编辑距离) 考虑DP,可以用反证法证明依次从头到尾对A,B进行匹配是不会影响答案 ...

  8. (编辑距离问题 线性DP) nyoj1431-DNA基因鉴定

    题目描述: 我们经常会听说DNA亲子鉴定是怎么回事呢?人类的DNA由4个基本字母{A,C,G,T}构成,包含了多达30亿个字符.如果两个人的DNA序列相差0.1%,仍然意味着有300万个位置不同,所以 ...

  9. HDU 4323 Magic Number(编辑距离DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=4323 题意: 给出n个串和m次询问,每个询问给出一个串和改变次数上限,在不超过这个上限的情况下,n个串中有多少个 ...

随机推荐

  1. 【jmeter】元件的作用域与执行顺序

    1.元件的作用域 JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(conf ...

  2. ettercap ARP dns 欺骗

    1.arp 这个简单,太熟了.略过1     2.dns   根据arp欺骗的步骤. 多了个etter.dns文件 找到它:locate etter.dns 进入后添加dns正向解析     启动,选 ...

  3. PHP中使用CURL实现get和post请求(总结)

    一.什么是curl curl是利用url语法在命令行方式下工作的开源文件传输工具. 二.PHP curl函数

  4. Sprite的原点

    对于某些类型的游戏,例如飞行射击游戏或者顶视角的2D游戏,通常会直接选取图片的中心做为原点.但对于<冰杖秘闻>这样的 2D ARPG 来说,会更多的从三维场景的角度来选择原点,即选择物品底 ...

  5. spark RDD transformation与action函数整理

    1.创建RDD val lines = sc.parallelize(List("pandas","i like pandas")) 2.加载本地文件到RDD ...

  6. OAF_VO系列3 - Binding Style绑定方式

    在OAF VO开发中,Binding Style主要用于对VO的where clause做动态传值,总共有三种方式 1.       Oracle Named 2.       Oracle Posi ...

  7. 2011-2015年Journal of Mathematical Physics高引用文章

    http://aip-info.org/1XPS-45FE9-0AC9S389C5/cr.aspx

  8. SqlServer调用外部程序实现数据同步

    首先创建两个数据库:SyncA是数据源,SyncB是对SyncA进行同步的数据库. 在SyncA和SyncB中分别创建Source表和Target表,实际业务中,两张表的结构大多不相同.     然后 ...

  9. 值不能为 null 或为空。参数名: linkText

    “/”应用程序中的服务器错误. 值不能为 null 或为空.参数名: linkText 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的 ...

  10. CSS根据屏幕分辨率应用相应样式

    当屏幕尺寸小于1200px时,应用下面的CSS样式 @media screen and (max-width: 1200px) { /*当屏幕尺寸小于1200px时,应用下面的CSS样式*/ .ind ...