算法基础之最短编辑距离

最短编辑距离

  • 核心思想 : 线性dp

    • 集合定义 : f[i][j]为操作方式的最小值

    • 集合计算 : 三种操作 取最小

      • ① 删除 : 将a[i]删掉 使ab相同 –> f[i-1][j] + 1 = f[i][j]
      • ② 增添 : 在a[i]后加上一个数 使ab相同 –> f[i][j-1] + 1 = f[i][j]
      • ③ 替换 : 将a[i] 换成 b[j] 使ab相同 若a[i] == b[j] 则不用操作
        • ​ 若!= 则 f[i-1][j-1] + 1 = f[i][j]
    • 在这里插入图片描述

      •   #include<iostream>
          #include<algorithm>
          #include<cstring>
          
          using namespace std;
          const int N = 1010;
          
          int n,m;
          char a[N],b[N];
          int f[N][N];
          
          int main()
          {
                 
              cin>>n>>a+1>>m>>b+1;
              //初始化 因为求的是最小值 所以初始0的话结果会错
              //第一个是 a是空的 添加m次 和b相同
              //第二个是 a是非空的 删除n次 和b相同
              for(int i=1;i<=m;i++) f[0][i] = i;
              for(int i=1;i<=n;i++) f[i][0] = i;
              
              for(int i=1;i<=n;i++)
              {
                 
                  for(int j=1;j<=m;j++)
                  {
                 
                      //先取两个确定的式子的最小值
                      f[i][j] = min(f[i-1][j] +1 ,f[i][j-1] + 1);
                      if(a[i] == b[j]) f[i][j] = min(f[i][j] , f[i-1][j-1]);
                      else f[i][j] = min(f[i][j] , f[i-1][j-1] +1);
                  }
              }
              
              cout<<f[n][m];
          }
        

    一点思考 : 为什么确定删掉a[i]就能使a[i-1] 和 b[j] 相等 ?

    ​ 因为在求a[i-1]时 已经从概念上使它和b[j]相等 (不等的话操作次数+1 然后就等了)

相关推荐

  1. 算法基础Hamilton路径

    2023-12-29 01:22:02       55 阅读
  2. 算法题】72. 编辑距离

    2023-12-29 01:22:02       42 阅读
  3. 面试算法65:的单词编码

    2023-12-29 01:22:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-29 01:22:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-29 01:22:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-29 01:22:02       87 阅读
  4. Python语言-面向对象

    2023-12-29 01:22:02       96 阅读

热门阅读

  1. node实现对git仓库的管理

    2023-12-29 01:22:02       56 阅读
  2. 递归---选数

    2023-12-29 01:22:02       56 阅读
  3. 部署UOS PXE服务器

    2023-12-29 01:22:02       42 阅读
  4. web安全,常见的攻击以及如何防御

    2023-12-29 01:22:02       55 阅读
  5. Obsidian 快捷方式总结 ——提升你的工作效率

    2023-12-29 01:22:02       91 阅读
  6. 安装Paddlehub报错

    2023-12-29 01:22:02       62 阅读
  7. c++ day3

    c++ day3

    2023-12-29 01:22:02      57 阅读
  8. MySQL-长事务详解

    2023-12-29 01:22:02       46 阅读