zoukankan      html  css  js  c++  java
  • 字符串编辑距离

    字符串编辑距离

    是⼀种字符串之间相似度计算的⽅法。给定两个字符串S、T,将S转换成T所需要的删除,插
    ⼊,替换操作的数量就叫做S到T的编辑路径。⽽最短的编辑路径就叫做字符串S和T的编辑距
    离。
    举个例⼦:S=“eeba” T="abac" 我们可以按照这样的步骤转变:(1) 将S中的第⼀个e变成a;(2) 删
    除S中的第⼆个e;(3)在S中最后添加⼀个c; 那么S到T的编辑路径就等于3。当然,这种变换并不是
    唯⼀的,但如果3是所有变换中最⼩值的话。那么我们就可以说S和T的编辑距离等于3了。

    动态规划解决编辑距离

    动态规划(dynamic programming)是⼀种解决复杂问题最优解的策略。它的基本思路就是:将⼀
    个复杂的最优解问题分解成⼀系列较为简单的最优解问题,再将较为简单的的最优解问题进⼀步
    分解,直到可以⼀眼看出最优解为⽌。
    动态规划算法是解决复杂问题最优解的重要算法。其算法的难度并不在于算法本身的递归难以实
    现,⽽主要是编程者对问题本身的认识是否符合动态规划的思想。现在我们就来看看动态规划是
    如何解决编辑距离的。

     1 int minDistance(string word1,string word2){
     2     int m=word1.length(),n=word2.length();
     3     int[][] dp=new int[m+1][n+1];
     4     //初始化空字符串情况
     5     for(int i=1;i<=m;i++){
     6         dp[i][0]=i;
     7     }
     8     for(int i=1;i<=n;i++){
     9         dp[0][i]=i;
    10     }
    11     for(int i=1;i<=m;i++){
    12         for(int j=1;j<=n;j++){
    13             //增加
    14         int insertion =dp[i][j-1]+1;
    15         //删除
    16         int deletion =dp[i-1][j]+1;
    17         //替换
    18         int replae =dp[i-1][j-1]+(word1.charAt(i-1) ==word2.charAt(j-1)?0:1;
    19         //三者得最小
    20         dp[i][j]=min(replace,min(insertion,deletion);
    21         }
    22     }
    23     retrurn dp[m][n];
    24 }
    转载请说明出处!
  • 相关阅读:
    [SDOI2006] 保安站岗
    [NOIP2003] 传染病控制
    [USACO13OPEN] 照片Photo
    [HNOI/AHOI2018] 道路
    [TJOI2007] 线段
    [HAOI2009] 逆序对数列
    codeforces|CF1054D Changing Array
    hihoCoder 1785
    luogu 1712
    luogu 3248
  • 原文地址:https://www.cnblogs.com/zengshangzhi/p/9561461.html
Copyright © 2011-2022 走看看