编辑距离问题

时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:60 测试通过:19

描述

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

(1)删除一个字符;(2)插入一个字符;(3)将一个字符改为另一个字符。

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

对于给定的字符串A和字符串B,编程计算其编辑距离d(A,B)。

输入

输入数的第一行是字符串A,文件的第二行是字符串B。

输出

输出编辑距离d(A,B)的第1行中。

样例输入

fxpimu
xwrs

样例输出

5

题目来源

算法设计与实验题解

题目来源(http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1224)

对于此题,使用动态规划算法是很容易得出最优值的,首先使用二维数组m[i][j]储存由字符串s[1, i]与t[1, j]编辑的最短距离,这样的话,很容易得出递归式:

具体代码如下:

 1 int edictlen(char *s, char *t)
 2 {
 3     int len1=strlen(s);
 4     int len2=strlen(t);
 5     int i,j;
 6     int **m=new int *[len1+2];
 7     for(i=0; i<=len1; i++)
 8         m[i]=new int [len2];
 9     m[0][0]=0;
10     for(i=1; i<len1; i++) m[i][0]=i;
11     for(i=1; i<len2; i++) m[0][i]=i;
12     for(i=1; i<len1; i++)
13     {
14         for(j=1; j<len2; j++)
15         {
16             if(s[i]==t[j]) m[i][j]=m[i-1][j-1];
17             else m[i][j]=min(m[i-1][j-1],m[i-1][j],m[i][j-1])+1;
18         }
19     }
20     int temp=m[len1-1][len2-1];
21
22     for (i=0;i<=len1;i++)
23     {
24         delete[] m[i];
25     }
26     delete[] m;
27     return temp;
28 }

注意,字符串是从1开始算起,使用数组输入时也需要从1开始。还有min函数就是三个数中取最小值。

本代码经测试已经AC。

转载于:https://www.cnblogs.com/zhuorongtan/archive/2012/10/26/2741529.html

算法之动态规划——编辑距离问题相关推荐

  1. 动态规划编辑距离_使用动态规划方法解决编辑距离问题

    动态规划编辑距离 使用动态编程(DP)解决问题时出现的第一个问题是如何弄清楚DP是解决问题的一种方法? 因此,我将使用动态编程解决问题,并说明如何解决这一问题. "明确说明的问题是一半解决的 ...

  2. 数据结构与算法学习⑥(动态规划 题解 背包和打家劫舍问题)

    数据结构与算法学习⑥(动态规划 动态规划 1.初识动态规划 1.1.从贪心说起 1.1.1.贪心的特点 1.1.2.贪心的局限性 1.1.3.贪心失效后怎么办 1.1.4.从最优化问题到递归 1.2. ...

  3. 算法学习--动态规划与贪心算法

    动态规划与贪心算法都是一种递推算法,都是用局部最优解来推导全局最优解:是对遍历解空间的一种优化:当问题具有最优子结构时,可以用动态规划来解决,而贪心算法是动态规划的特例 动态规划 1. 动态规划的思想 ...

  4. Bellman-Ford 算法 和 动态规划

    Floyd算法: 状态: d[k][i][j]定义:"只能使用第1号到第k号点作为中间媒介时,点i到点j之间的最短路径长度." 动态转移方程: d[k][i][j]=min(d[k ...

  5. 五大经典算法之动态规划

    一.概念起源   动态规划,又名DP算法(取自其Dynamic Programming的缩写),最初是运筹学的一个分支,是用来求解决策过程最优化的数学方法. 二.基本思想   把 多阶段过程 转化为一 ...

  6. Java入门算法(动态规划篇2:01背包精讲)

    本专栏已参加蓄力计划,感谢读者支持❤ 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算 ...

  7. NOI入门级:算法之动态规划

    糖糖讲动态规划算法,找零钱完全背包问题,LeetCode 322 糖糖讲动态规划算法,找零钱完全背包问题,LeetCode 322_哔哩哔哩_bilibili 程序员面试再也不怕动态规划了,看动画,学 ...

  8. 【算法】动态规划笔记

    [算法]动态规划笔记 动态规划: 将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解 动态规划会将每个求解过的子问题的解记录下来,这样下一次碰到同样的子问题时,就可以直接使 ...

  9. 贪心算法和动态规划的区别

    一.动态规划  动态规划(简称DP)的思想是把一个大的问题进行拆分,细分成一个个小的子问题,且能够从这些小的子问题的解当中推导出原问题的解. 性质 1.最优子结构性:既所拆分的子问题的解是最优解. 2 ...

最新文章

  1. 关于React面试题汇总
  2. canvas入门-1三种填充方式、渐变、模式
  3. 路由守卫-vue切换路由登录判断、条件判断
  4. python的输出函数_Python输出函数print()总结(python print())
  5. P4231 三步必杀 二次差分
  6. 计算机考研的调查和改进建议
  7. cte公用表表达式_SQL Server中的CTE; 使用公用表表达式解决重新编制标识符列的问题
  8. 动态创建Sql Server数据库相关(全)
  9. 怎么把录音导入库乐队_库乐队导入电脑版 苹果库乐队怎么导入歌
  10. 推荐top10的免费下载破解软件的网站
  11. 大型网站技术架构+核心原理与案例分析+李智慧
  12. iOS 开发的一些奇巧淫技
  13. odbc建oracle dsn,Linux平台配置Oracle ODBC DSN的方法
  14. Java面向对象与代码编写
  15. P4287 [SHOI2011]双倍回文
  16. 详解ISO 13400文档(DoIP协议)-3
  17. 计算机辅助设计还需要手绘吗,建筑设计师,还需要手绘吗?
  18. python字符串知识点_python字符串的相关知识点
  19. 用心,会议才能开出花儿
  20. 二叉树前中后层遍历(递归/非递归)(简单易懂(*^ー^))

热门文章

  1. 什么用于创建python与数据库之间的链接_python3连接数据库用什么
  2. java uppercase方法_java-方法引用
  3. 【读书笔记】沉默的大多数
  4. 每天一道LeetCode-----生命游戏
  5. FreeBSD挂截U盘和光盘
  6. HDU Problem - 6214 Smallest Minimum Cut(最小割边,两种方法)
  7. matlab下三维dla模型模拟,Matlab下三维DLA模型模拟
  8. 标准库类型string的基本功能和使用
  9. xhtml使用style属性
  10. Teamtalk源码分析