[动态规划----基本DP]编辑距离 51nod 1183

原创 2017年10月11日 02:27:24

Part1 题意

编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如将kitten一字转成sitting:
sitten (k->s)
sittin (e->i)
sitting (->g)
所以kitten和sitting的编辑距离是3。俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。
给出两个字符串a,b,求a和b的编辑距离。

Part2 思考过程

从表面上看这个题是个搜索题,根据这个思路可以用bfs+A*来做,这样做可能比较麻烦,但是是一条路线。第二种思想是动态规划的思想,每一次状态变动都是基于上一个状态进行的,简化问题,可以从头到尾进行状态的转移。对于两个字符串,完成前k个字符相同的前提是前k-1个字符相同,所以前k个字符相同状态可以从前k-1个字符相同的状态转移过来。有三种变化,如果增加或者删除,都是基于上一种状态的步数+1得到结果,如果是修改,则根据当前字符串的当前位置上的字符与另外一个字符串的对于位置上的字符的关系来取得,不相同+1,反之不加。

Part3 初步实现

注意点:
1、注意对DP矩阵进行初始化。
2、注意字符串的起始下标。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int dp[1010][1010];
char str1[1010];
char str2[1010];
int len1,len2;

int main()
{
    scanf("%s%s",str1,str2);
    len1 = strlen(str1),len2 = strlen(str2);
    for(int i=0;i<len1;i++) dp[i][0] = i;
    for(int i=0;i<len2;i++) dp[0][i] = i;

    for(int i=1;i<=len1;i++){
        for(int j=1;j<=len2;j++){
            dp[i][j]=min(dp[i-1][j-1]+(str1[i-1]!=str2[j-1]),min(dp[i][j-1],dp[i-1][j])+1);
        }
    }
    printf("%d\n",dp[len1][len2]);
    return 0;
}

Part4 优化思想

与最长公共子序列的优化思想相同,可以将N2的空间复杂度优化到2*N的空间复杂度,用到循环数组,由于每一个点的值都只与其左、左上与上个位置中的位置,则可以将偶数行放置于一个两行数组的第一行,奇数行放置于一个两行数组的第二行,每次产生的新一行放置在对应的行数。由于现在空间复杂度的要求宽松不少,所以现在也不常用。

Part5 优化实现

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

51NOD 1183——编辑距离(动态规划基础)

1183 编辑距离 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 编辑距离,又称Levenshtei...

51nod--1183 编辑距离(动态规划)

题目:1183 编辑距离 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 编辑距离,又称Levenshtein距离(也叫做Edit Distance),...

51nod 1183编辑距离 经典dp

编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除...

51nod 1183 编辑距离

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183. 题意不再赘述。 分析:对于两个字符串s和t,dp[i][j]记录...

51nod 1183 编辑距离

dp问题,类似于LCS 开个大数组存一下分别截止到i,j,两个子字符串的最短距离 然后对于两个m,n长的字串,如果末尾相同,那距离就是dp[i-1][j-1] 如果末尾不同,那距离就是min(a...

51Nod 1183 编辑距离

编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除...

[LeetCode 72] Edit Distance(编辑距离/动态规划/DP)

72. Edit DistanceGiven two words word1 and word2, find the minimum number of steps required to conve...
  • zlasd
  • zlasd
  • 2016-12-01 23:24
  • 110

51nod 编辑距离问题 dp

/*************************************************************************     > File Name: 51nod.编...

最长公共子序列与编辑距离动态规划原理分析

前段时间看过最长公共子序列的动态规划算法,这两天又看到了编辑距离的动态规划算法,感觉两者有相似之处,而状态转移方程又不十分直观,所以打算把其原理记录下来,以防以后忘记。

POJ 3356 最短编辑距离(动态规划)

引用地址:http://blog.sina.com.cn/s/blog_69c49e390100ju95.html 题目地址:http://poj.org/problem?id=3356 中文描述: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)