问题描述

设A和B是两个字符串,要用最少的字符操作将字符串A转换成字符串B。这里所说的字符操作包括

1)删除一个字符;

2)插入一个字符;

3)将一个字符改为另一个字符。

将字符串A变换为字符串B所用的最少字符操作数成为字符串A到B的编辑距离,记为d(A,B)。对任给的2个字符串A和B,计算出它们的编辑距离d(A,B)。

问题分析

这是一道DP问题,DP问题的核心是“全局最优解的部分解是部分子问题的最优解”。构造字符串A,B如下

A:  abcdef

B:  acdefgh

全局最优解B=“abcdef”的部分解B1=“abcde”,是部分子问题A1=“abcde”,B1="acdef"的最优解,抓住此关键点,可知应对单个字符进行考虑,进而求出整个字符串的最优解。对第一个字符,B中的’a‘与A中的’a‘相同,因此可以不操作;第二个字符,B中的’c‘与A中的’b‘不同,则此时有三种情况:

1)删除’c‘

2)插入’b‘

3)将’c‘改为’b‘

计算三种情况下两个字符串中位置相同且字符相同的字符数量,选择最大那种方法,然后进行下一个字符的计算。遇到多余的字符,则直接删去并将编辑距离增加即可。此例中的计算步骤即为“acdefgh”=>"abcdefgh"=>"abcdef"。

上述方法有误,通过比较位置相同且字符相同的字符数量并不能衡量其是否是最优路径。关键步骤在于,

#include<iostream>
#include<string>
using namespace std;
int getEqualsNum(string &a, string &b) {int num = 0;for (unsigned int i = 0; i < a.length()&&i<b.length(); i++) {if (a[i] == b[i])num++;}return num;
}
int max(int a, int b, int c) {if (a > b&&a > c)return 1;if (b > a&&b > c)return 2;return 3;
}
int main() {string a, b;a = "abcdef";b = "acdefg";int res = 0;for (unsigned int i = 0; i < a.length()&& i < b.length(); i++) {if (a[i] == b[i])continue;else {//获取三种操作后的字符串与A串相等字符的个数int add, del, change;string c;c = b;c.insert(i, a, i);add = getEqualsNum(a, c);c = b;c.erase(i, 1);del = getEqualsNum(a, c);c = b;c[i] = a[i];change = getEqualsNum(a, c);//选取最优字串,对B串进行处理int temp;temp = max(add, del, change);if (temp == 1)b.insert(i, a, i,1);else if (temp == 2)b.erase(i, 1);else b[i] = a[i];res++;}}int len1 = a.length(), len2 = b.length();res += (len1 - len2) >= 0 ? (len1 - len2): -(len1 - len2);cout << "A:" << a << endl << "B:" << b << endl;cout << "Eidt Distance:" << res << endl;system("pause");return 0;
}

  

转载于:https://www.cnblogs.com/msnhere/p/7642019.html

编辑距离问题(Edit Distance Problem)相关推荐

  1. 字符串编辑距离(Edit Distance)

    一.问题描述 定义 字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符 ...

  2. 最小编辑距离算法 Edit Distance(经典DP)

    最小编辑距离算法 Edit Distance(经典DP) 转载baodream 最后发布于2018-05-23 11:36:32 阅读数 22226  收藏 展开 编辑距离(Edit Distance ...

  3. 最小编辑距离(Minimum Edit Distance)

    概念 编辑距离的概念: 给定两个字符串oppa和apple,如何把前者变成后者?你可以使用的操作有:1.增加字符2.删除字符3.更新字符. 一种可能的做法是: oppa->appa->ap ...

  4. 编辑距离(Edit Distance)

    编辑距离是用于比较两个字符串或者符号序列之间距离的常用距离函数. 含义为:给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数,可以对一个单词进行如下 ...

  5. mysql 编辑距离 搜索_最小编辑距离(Minimum Edit Distance)

    最小编辑距离 1)定义 编辑距离(Minimum Edit Distance,MED),又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需要的最少编辑操作次数.允许的编辑操作包括 ...

  6. Minimum edit distance(levenshtein distance)(最小编辑距离)初探

    最小编辑距离的定义:编辑距离(Edit Distance),又称Levenshtein距离.是指两个字串之间,由一个转成还有一个所需的最少编辑操作次数.许可的编辑操作包含将一个字符替换成还有一个字符. ...

  7. 一文详解编辑距离(Levenshtein Distance)

    更多博文请关注:https://blog.bigcoder.cn 一. 什么是Levenshtein Distance Levenshtein Distance,一般称为编辑距离(Edit Dista ...

  8. 详解编辑距离(Edit Distance)及其代码实现

    概述 编辑距离(Minimum Edit Distance,MED),由俄罗斯科学家 Vladimir Levenshtein 在1965年提出,也因此而得名 Levenshtein Distance ...

  9. Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶

    sam格式很精炼,几乎包含了比对的所有信息,我们平常用到的信息很少,但特殊情况下,我们会用到一些较为生僻的信息,关于这些信息sam官方文档的介绍比较精简,直接看估计很难看懂. 今天要介绍的是如何通过b ...

  10. stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)

    I. 最小编辑距离的定义 最小编辑距离旨在定义两个字符串之间的相似度(word similarity).定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等. 编辑距离就 ...

最新文章

  1. OpenCV 获取并修改图中的像素点
  2. 设计模式——享元模式具体解释
  3. eclipse在线安装ivy和ivyde
  4. 计算机视觉(三)——人脸识别
  5. 互联网十几年 我们错失了哪些创业机会
  6. CR渲染器全景图如何渲染颜色通道_无需凤凰流体,就可以制作3D火焰效果?「渲云渲染」...
  7. bios不识别 光驱固态_bios识别不到固态硬盘
  8. hyperf中的缓存之CacheEvict
  9. ERROR 1118 (42000): Row size too large (8126). Changing some columns to TEXT or BLOB or using ROW_
  10. 前端UI:element-ui,ant-design-vue
  11. nrf52832 UICR 寄存器
  12. 2007中国手机客户端软件TOP50
  13. 微信小程序 java物流车辆货物托运配送管理系统springboot
  14. java ee李兴华_李兴华Java EE入门视频教程(魔乐科技解密版)
  15. word中图片自动编号和与文字编号对应及自动更新
  16. 基于qlib自定义的A股股票池:计算均线,动量,MACD等以及可视化
  17. Xilisoft Video Editor(视频编辑软件)v2.2永久版
  18. 技术评审中常见的一些问题
  19. PHP飞机票航空售票查询预定系统
  20. buck双闭环控制仿真降压电路PI调节器设计降压斩波电路建模和数学模型建模

热门文章

  1. HDOJ--1728--逃离迷宫(广搜)
  2. linux dhcp的详细配置
  3. 覆盖原有div或者Input的鼠标移上去描述
  4. Spring 的 ApplicationEvent and ApplicationListener
  5. div探索系列(二):让多个div显示在一行(浮动的div)
  6. ADO.NET Entity Framework 实体框架映射方案
  7. html点击标签c,html - 标签并以html形式输入点击其他提交按钮(所有浏览器) - 堆栈内存溢出...
  8. matlab分析具体问题论文,matlab论文12010245327马文建.doc
  9. python_入门初级
  10. linux系统编程 -- 僵尸进程 孤儿进程