zoukankan      html  css  js  c++  java
  • CJOJ 1644 编辑距离 / Luogu 2758 编辑距离(动态规划)

    CJOJ 1644 编辑距离 / Luogu 2758 编辑距离(动态规划)

    Description

    字符串是数据结构和计算机语言里很重要的数据类型,在计算机语言中,对于字符串我们有很多的操作定义,因此我们可以对字符串进行很多复杂的运算和操作。实际上,所有复杂的字符串操作都是由字符串的基本操作组成。例如,把子串a替换为子串b,就是用查找、删除和插入这三个基本操作实现的。因此,在复杂字符串操作的编程中,为了提高程序中字符操作的速度,我们就应该用最少的基本操作完成复杂操作。
    在这里,假设字符串的基本操作仅为:删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。
    我们把进行了一次上述三种操作的任意一种操作称为进行了一步字符基本操作。
    下面我们定义两个字符串的编辑距离:对于两个字符串a和b,通过上述的基本操作,我们可以把a变成b或b变成a;那么,把字符串a变成字符串b需要的最少基本字符操作步数称为字符串a和字符串b的编辑距离。
    例如,如a=“ABC”,b=“CBCD”,则a与b的编辑距离为2。
    你的任务就是:编一个最快的程序来计算任意两个字符串的编辑距离。

    Input

    第1行为字符串a;第2行为字符串b。

    Output

    编辑距离

    Sample Input

    ABC
    CBCD

    Sample Output

    2

    Http

    CJOJ:http://oj.changjun.com.cn/problem/detail/pid/1644
    Luogu:https://www.luogu.org/problem/show?pid=2758

    Source

    动态规划

    解决思路

    设F[i][j]表示A串前i个与B串前j个的最小编辑距离,当A[i]==B[j]时,F[i][j]=F[i-1][j-1];当A[i]!=B[j]时,F[i][j]=min(F[i-1][j],F[i][j-1],F[i-1][j-1])+1;

    注意,初始化时F[i][0]=F[0][i]=i;

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    using namespace std;
    
    const int maxN=3000;
    const int inf=2147483647;
    
    char A[maxN];
    char B[maxN];
    int F[maxN][maxN]={0};
    
    int main()
    {
    	cin>>A>>B;
    	for (int i=0;i<=max(strlen(A),strlen(B));i++)
    		F[i][0]=F[0][i]=i;
    	for (int i=1;i<=strlen(A);i++)
    	{
    		for (int j=1;j<=strlen(B);j++)
    		{
    			if (A[i-1]==B[j-1])
    				F[i][j]=F[i-1][j-1];
    			else
    				F[i][j]=min(F[i-1][j]+1,min(F[i][j-1]+1,F[i-1][j-1]+1));
    			//cout<<F[i][j]<<' ';
    		}
    		//cout<<endl;
    	}
        cout<<F[strlen(A)][strlen(B)]<<endl;
        return 0;
    }
    

    ---恢复内容结束---

    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    Shell高级编程学习笔记(基础篇)
    基于Python的机器学习实战:Apriori
    基于Python的机器学习实战:AadBoost
    Theano教程:Python的内存管理
    基于theano的降噪自动编码器(Denoising Autoencoders--DA)
    基于theano的深度卷积神经网络
    推荐系统之矩阵分解及C++实现
    推荐系统之协同过滤的原理及C++实现
    一步一步详解ID3和C4.5的C++实现
    Principal components analysis(PCA):主元分析
  • 原文地址:https://www.cnblogs.com/SYCstudio/p/7138178.html
Copyright © 2011-2022 走看看