算法之动态规划——编辑距离问题
编辑距离问题
总提交: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
算法之动态规划——编辑距离问题相关推荐
- 动态规划编辑距离_使用动态规划方法解决编辑距离问题
动态规划编辑距离 使用动态编程(DP)解决问题时出现的第一个问题是如何弄清楚DP是解决问题的一种方法? 因此,我将使用动态编程解决问题,并说明如何解决这一问题. "明确说明的问题是一半解决的 ...
- 数据结构与算法学习⑥(动态规划 题解 背包和打家劫舍问题)
数据结构与算法学习⑥(动态规划 动态规划 1.初识动态规划 1.1.从贪心说起 1.1.1.贪心的特点 1.1.2.贪心的局限性 1.1.3.贪心失效后怎么办 1.1.4.从最优化问题到递归 1.2. ...
- 算法学习--动态规划与贪心算法
动态规划与贪心算法都是一种递推算法,都是用局部最优解来推导全局最优解:是对遍历解空间的一种优化:当问题具有最优子结构时,可以用动态规划来解决,而贪心算法是动态规划的特例 动态规划 1. 动态规划的思想 ...
- Bellman-Ford 算法 和 动态规划
Floyd算法: 状态: d[k][i][j]定义:"只能使用第1号到第k号点作为中间媒介时,点i到点j之间的最短路径长度." 动态转移方程: d[k][i][j]=min(d[k ...
- 五大经典算法之动态规划
一.概念起源 动态规划,又名DP算法(取自其Dynamic Programming的缩写),最初是运筹学的一个分支,是用来求解决策过程最优化的数学方法. 二.基本思想 把 多阶段过程 转化为一 ...
- Java入门算法(动态规划篇2:01背包精讲)
本专栏已参加蓄力计划,感谢读者支持❤ 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算 ...
- NOI入门级:算法之动态规划
糖糖讲动态规划算法,找零钱完全背包问题,LeetCode 322 糖糖讲动态规划算法,找零钱完全背包问题,LeetCode 322_哔哩哔哩_bilibili 程序员面试再也不怕动态规划了,看动画,学 ...
- 【算法】动态规划笔记
[算法]动态规划笔记 动态规划: 将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解 动态规划会将每个求解过的子问题的解记录下来,这样下一次碰到同样的子问题时,就可以直接使 ...
- 贪心算法和动态规划的区别
一.动态规划 动态规划(简称DP)的思想是把一个大的问题进行拆分,细分成一个个小的子问题,且能够从这些小的子问题的解当中推导出原问题的解. 性质 1.最优子结构性:既所拆分的子问题的解是最优解. 2 ...
最新文章
- 关于React面试题汇总
- canvas入门-1三种填充方式、渐变、模式
- 路由守卫-vue切换路由登录判断、条件判断
- python的输出函数_Python输出函数print()总结(python print())
- P4231 三步必杀 二次差分
- 计算机考研的调查和改进建议
- cte公用表表达式_SQL Server中的CTE; 使用公用表表达式解决重新编制标识符列的问题
- 动态创建Sql Server数据库相关(全)
- 怎么把录音导入库乐队_库乐队导入电脑版 苹果库乐队怎么导入歌
- 推荐top10的免费下载破解软件的网站
- 大型网站技术架构+核心原理与案例分析+李智慧
- iOS 开发的一些奇巧淫技
- odbc建oracle dsn,Linux平台配置Oracle ODBC DSN的方法
- Java面向对象与代码编写
- P4287 [SHOI2011]双倍回文
- 详解ISO 13400文档(DoIP协议)-3
- 计算机辅助设计还需要手绘吗,建筑设计师,还需要手绘吗?
- python字符串知识点_python字符串的相关知识点
- 用心,会议才能开出花儿
- 二叉树前中后层遍历(递归/非递归)(简单易懂(*^ー^))