算法第三章上机实践报告
时间:2019-10-18
本文章向大家介绍算法第三章上机实践报告,主要包括算法第三章上机实践报告使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 实践题目
- 最短编辑距离问题
- 问题描述
- 设A和B是2个字符串。将字符串A转换为字符串B所要用到的最少的字符操作(对单个字符进行插删改)的次数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。
- 算法描述
- 从A字符串(fxpimu)只有0个字符开始,只有增加的操作满足其转换为B串(xwrs)。(同样的B串转换为A串也是同样的)那么此时就需要用到一个二维数组c[n][n](灰色的部分)来存储这些操作数:
1 for (int i = 0; i <= len_a; ++i) { 2 c[i][0] = i; 3 } 4 for (int i = 0; i <= len_b; ++i) { 5 c[0][i] = i; 6 }
-
然后:运用动态规划的的思想,将问题层层递进(嵌套for循环),从只观察字符串的一个字符开始,直到所有的字符
-
如果此时A串和B串各增加一个相同的字符在末尾那么就相当于只用对该字符前面的字串进行操作。例如,fx 转换为x,只需要相当于 f转换为空的操作次数所以c[1][2] = c[0][1]
- 如果增加不同的字符,那么只需要在原基础增加一个操作数就能实现,所以就在c[i-1][j-1], c[i-1][j]+1和c[i][j-1]中选一个最少的操作数加一就行了
1 for (int i = 1; i <= len_a; ++i) // len_a = a.size();#include <cstring> 2 for (int j = 1; j <= len_b; ++j) { 3 if (a[i-1] == b[j-1]) { // 相同的字符 4 c[i][j] = c[i-1][j-1]; 5 } 6 else { // 不同的字符;min操作用到了#include <algorithm> 7 c[i][j] = min(c[i-1][j-1]+1, min(c[i-1][j]+1, c[i][j-1]+1)); 8 } 9 }
-
- 从A字符串(fxpimu)只有0个字符开始,只有增加的操作满足其转换为B串(xwrs)。(同样的B串转换为A串也是同样的)那么此时就需要用到一个二维数组c[n][n](灰色的部分)来存储这些操作数:
- 算法时间及空间复杂度分析(要有分析过程)
- 嵌套for循环:时间复杂度为O(N*M) N为len_a, M为len_b len_a = a.size();
- 新开了一个二维数组:空间复杂度为O(N*M) N为len_a, M为len_b
- 心得体会(对本次实践收获及疑惑进行总结)
- 动态规划真的有助于完成一些看似非常复杂,但是其子问题却不是很难的题目。
原文地址:https://www.cnblogs.com/Winston-wmj/p/11696588.html
- Dora.Interception, 为.NET Core度身打造的AOP框架[4]:演示几个典型应用
- Dora.Interception, 为.NET Core度身打造的AOP框架[3]:Interceptor的注册
- Dora.Interception, 为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式
- Dora.Interception,为.NET Core度身打造的AOP框架:全新的版本
- ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
- 浅谈 Java 并发编程中的若干核心技术
- ASP.NET Core的路由[3]:Router的创建者——RouteBuilder
- ASP.NET Core的路由[2]:路由系统的核心对象——Router
- ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
- 学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?
- 学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
- 学习ASP.NET Core, 怎能不了解请求处理管道[4]: 应用的入口——Startup
- 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的
- .NET Core多平台开发体验[4]: Docker
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- leetcode队列之最近的请求次数
- 安防视频云服务EasyCVR集成海康SDK时语音对出现杂音问题,如何解决?
- arm linux利用alsa驱动并使用usb音频设备
- linux 磁盘转移空间的方法
- 详解git中配置的.gitignore不生效的解决办法
- Apache Thrift环境配置
- CentOS 7更新时出现:Multilib version problems问题的解决方法
- Linux模拟网络丢包与延迟的方法
- centos6.5通过yum安装nginx
- Linux系统利用cp命令实现强制覆盖功能的方法
- leetcode队列之设计循环双端队列
- Centos7学习之添加用户和用户组的方法
- Linux静态库与动态库实例详解
- Linux字符终端如何用鼠标移动一个红色矩形详解
- Linux中出现“No space left on device”错误的排查与解决方法