zoukankan      html  css  js  c++  java
  • 动态规划之寻找编辑距离

    废话少说:上代码

     1 /*此程序实现功能:输入两串字符s1,s2,求出其编辑距离。编辑距离:表示插入一个字符,删除一个字符,替换一个字符使得一个字符串和另一个字符串相等,三种操作分别表示1*/
     2 /*算法思想:动态规划*/
     3 #include<iostream>
     4 #include<string>
     5 using namespace std;
     6 template <typename T> T min(T a, T b, T c) {
     7     if (a < b&&a < c)
     8         return a;
     9     else
    10         if (b < c)
    11             return b;
    12         else
    13             return c;
    14 }
    15 int EditDistance(string s1, string s2);//求编辑距离
    16 int main() {
    17     string s1 , s2;
    18     cout << "请输入字符串s1:";  cin >> s1; cout << endl;
    19     cout << "请输入字符串s2:";  cin >> s2; cout << endl;
    20     cout << "s1与s2的编辑距离是:" << EditDistance(s1, s2) << endl;
    21     //delete s1, s2;
    22 }
    23 int EditDistance(string s1, string s2) {
    24     //m[|s1|][|s2|]是一个二维数组,矩阵第i行第j列的元素保存的是s1的前i个字符和s2的前j个字符的编辑距离
    25     // 分配行指针数组
    26     int x = 0;
    27     int **m = new int*[s1.length() + 1];
    28     // 分配列指针数组
    29     for (int i = 0; i < s1.length() + 1; i++) {
    30         m[i] = new int[s2.length() + 1];
    31         //初始化,将数组的第一列每行设为对应的值,即假设s2是一个空串
    32         m[i][0] = i;
    33     }
    34     //初始化,将数组的第一列每行设为对应的值,即假设s2是一个空串
    35     for (int j = 0; j < s2.length() + 1; j++)
    36         m[0][j] = j;
    37     //动态规划核心算法:min中的三个参数分别表示在s1中替换一个,插入一个和在s2中插入一个(即在s1中删除一个)的操作
    38     for (int i = 1; i < s1.length() + 1; i++) {
    39         
    40         for (int j = 1; j < s2.length() + 1; j++) {
    41             x = 0;
    42             if (s1[i - 1] != s2[j - 1])
    43                 x = 1;
    44             m[i][j] = min<int>(m[i - 1][j - 1] + x, m[i - 1][j] + 1, m[i][j - 1] + 1);
    45         }
    46     }
    47     x = m[s1.length()][s2.length()];
    48     for (int i = 0; i < s1.length() + 1; i++)
    49         delete[] m[i];
    50     return x;
    51 }
  • 相关阅读:
    SQL Server 2008数据库镜像+故障转移集群原理摘自网络
    AHCI和IDE区别,和在目前系统中设置 AHCI 摘自网络
    中国计算机技术职业资格网(软考 官方 官网)
    第十一节 导出Excel 简单
    第五章 IF语句与逻辑运算符 简单
    第十一节 10图片权限控制 简单
    第四章 C++数据类型 简单
    第二章 从一个最简短的C++程 简单
    php 解析xml文件 简单
    第十一节 6HttpHandler案例 简单
  • 原文地址:https://www.cnblogs.com/1996313xjf/p/5940689.html
Copyright © 2011-2022 走看看