动态规划--编辑距离问题

【动态规划算法】编辑距离问题 最近看到了一个编辑距离问题,是笔试和面试中的经典问题之一,在此顺一下思路。 题目 给定一个源串和目标串,能对源串进行如下操作: 1.在给定位置插入一个字符 2.替换任意一个字符 3.删除任意一个字符 要求函数可以返回最少的操作数,使得源串进行这些操作后等于目标串。 思路 我们之前接触过递归算法,所谓递归,就是指一种通过重复将问题分解为同类的子问题而解决问题的方法。而在递归的过程中会出现很多中间过程... 阅读详情

文章目录

1 编辑距离问题

定义: 给定字符串A和字符串B,我们可以进行替换、插入、删除三种操作,使得字符串A和字符串B相等的最小操作次数,称为从字符串A到字符串B的最小编辑距离。

给定字符串“abc”和“dbd”,我们要想得到从“abc”到“dbd”的最小编辑距离,可以有以下几种计算路径:

  • 已知“ab”到“dbd”的编辑距离为x,由于“ab”经过x次操作已经和“dbd”相等,“abc”相对于“ab”来说增加了一个字符’c’,那么“abc”就需要将字符’c’进行删除操作,那么从“abc”到“dbd”的编辑距离就为distance1 = x+1。删除字符操作
  • 已知“ab”到“db”的编辑距离为y,由于“ab”经过y次操作已经和“db”相等,“abc”相对于“ab”增加了一个字符’c’,“dbd”相对于“db”也就只增加了一个字符’d’,此时我们只需要做一步替换操作即可,将’c’替换换成’d’即可,那么从"abc"到"dbd"的编辑距离就为distance = y + 1。替换字符操作
  • 已知“abc”到“db”的编辑距离为z,由于“abc”经过x次操作已经和“db”相等,“dbd”相对于“db”来说增加了一个字符’d’,那么“abc”就需要再增加1个字符“d”,那么从“abc”到“dbd”的编辑距离就为distance1 = z+1。增加字符操作

以上三种情况中的最小值,就是我们求解的最小编辑距离。

我们可以沿着以上思路继续往下分解,直到两个都从空字符开始,我们每次都只保留最优解,然后在此基础上进行递推,这就是动态规划。

递推表格如下:
在这里插入图片描述
我们只需要取3个中间的最小值即可。

写明白还挺难的,先不写了,上面的描述够自己看懂了,直接上代码,哈哈哈哈哈哈。

	public static int getStrDistance(String str1, String str2)
	{
		if ((str1 == null) || (str2 == null))
		{
			return -1;
		}
		
		int[][] distance = new int[str1.length()+1][str2.length()+1];
		
		for (int i=0; i<str1.length()+1; i++)
		{
			distance[i][0] = i;
		}
		
		for (int i=0; i<str2.length()+1; i++)
		{
			distance[0][i] = i;
		}
		
		for (int i=1; i<str1.length()+1; i++)
		{
			for (int j=1; j<str2.length()+1; j++)
			{
				int add_distance = distance[i-1][j] + 1;
				int del_distance = distance[i][j-1] + 1;
				int replace_distance = distance[i-1][j-1];
				
				if (str1.charAt(i-1) != str2.charAt(j-1))
				{
					replace_distance += 1;
				}
				
				int min = Math.min(add_distance, del_distance);
				distance[i][j] = Math.min(min, replace_distance);
			}
		}
		
		return distance[str1.length()][str2.length()];
	}

编辑距离问题——动态规划 编辑距离问题——动态规划问题描述: 编辑距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如: 将EXPONENTIAL转成POLYNOMIAL,最少需要6次编辑操作。如下图: 分析: 根据算法概论的分析如图:对齐后最右侧的列只有下面三种情况: 第一种情况下,该列产生的代价为1,余 阅读详情

相关推荐

动态规划:编辑距离问题

A和B是2个字符串,要用最少的字符操作将字符串A转化为字符串B。(详细解答,Java实现,动态规划。)

坤舆湖畔的万某某的博客 1177

创造一个表格编辑距离指标

替换一个cell的操作数包括两部分,一部分是cell大小操作数,另一部分是位置操作数。删除一个cell,需要的操作数为该cell的跨行列之和,插入一个cell也类似。四个数字代表行和列,0 0 0 0 代表从第0行到第0行,从第0列到第0列。行位置操作数,先计算行起点差值与终点差值,两个差值的的最小值。cell的位置操作数是 二者行位置操作数和列位置操作数之和。与字符的编辑距离类似,可以把一个cell当作一个字符,cell大小的操作数是二者跨行列之和的差值,一个table相当于这样的格式。

邮箱:feboreigns001@163.com 464

动态规划解决编辑距离问题

动态规划解决编辑距离问题 作者:禅与计算机程序设计艺术 1. 背景介绍 编辑距离(Edit Distance)是一种用于衡量两个字符串相似度的重要度量指标。它描述了将一个字符串转换成另一个字符串所需的最少编辑操作次数,常见的编辑操作包括插入、删除和替换。编辑距离广泛应用于自然语言处理

AI架构师小马 1025

最小编辑距离之Levenshtein distance

原理 编辑距离是用来计算一个字符串(s1)变为另一个字符串(s2)所用的最小编辑操作次数(edit distance)。 编辑距离有好几种计算方式wiki详细介绍,这里介绍的是Levenshtein distance,这种计算方法只包含三种操作: 替换(substitution):将一个字符替换成另一个字符 插入(insertion):插入一个字符 删除(deletion):删除一个字符 举个栗子 比如: sduud转换为study 替换:sduud -> stuud 删除:stuud->

weixin_37763340的博客 895

用SimaPro做碳足迹分析:手把手教你完成产品生命周期评估报告

本文详细介绍了如何使用SimaPro进行碳足迹分析,从软件安装到生命周期评估报告的完整流程。通过实战案例演示,帮助制造业企业、咨询机构和科研团队掌握产品生命周期评估(LCA)的核心技术,精准识别环境热点并优化决策,为可持续发展转型提供科学依据。

yhn45678901的博客 715

Maven证书信任危机:PKIX path building failed的全面解析与实战修复

本文全面解析了Maven构建中常见的`PKIX path building failed`证书验证错误。该错误通常在使用特定镜像仓库或自建仓库时,因SSL/TLS证书不被JDK默认信任而触发。文章深入剖析了错误根源,对比了临时忽略检查与永久导入证书等不同修复方案的安全性与适用场景,并推荐通过`keytool`将证书导入JDK信任库的根治方法,以保障构建安全与稳定。

zzz56的博客 506

Python学习笔记7-计算编辑距离

编辑距离(Edit Distance),也称为Levenshtein距离,是衡量两个字符串之间相似度的一个指标。它表示将一个字符串转换为另一个字符串所需的最小操作次数,操作包括插入、删除和替换字符。

992

手把手教你用CANape调试XCP安全会话:DLL权限管理+四种加密模式实战演示

本文详细介绍了如何使用CANape调试XCP安全会话,重点解析了DLL权限管理的实现与配置方法,并通过实战演示了标定页切换、DAQ测量、STIM旁路和PGM刷写四种典型加密模式的操作流程与调试技巧,帮助工程师深入理解并掌握XCP安全访问机制。

smartcontract5的博客 562

动态规划---编辑距离

动态规划---编辑距离系列问题

m0_51431003的博客 2368

ASPICE1-配置管理

SUP.8配置管理 BP1:开发配置管理策略 BP2:识别配置项 BP3:建立配置项管理系统 BP4:建立分支管理 BP5:控制变更和发布 BP6: 建立基线 BP7:报告配置项状态 BP8:验证配置项信息 BP9:管理配置项和基线的存储 1.配置管理概念 配置管理(Configuration Management,CM)是通过使用技术或行政手段对软件产品进行控制,以实现对软件开发过程和生命周期进行控制、规范的一系列措施。 完整性、一致性、可控性。 2.配置管理的主要活动: 1.

HDZQ2005的专栏 3687

从零构建企业级多智能体系统:LangGraph 全流程实战 + 部署指南(含代码与架构图)

> 在大模型应用爆发的今天,如何构建一个可协作、可调试、可部署的多智能体系统?LangGraph 正在成为工程师的新宠。本文从原理剖析、流程建模、代码实战到前后端部署,手把手带你用 LangGraph 构建一个企业级 AI 助理系统,整合财务分析、法务审阅、报告生成与图表可视化等 Agent 模块,全面打通从用户输入到报告输出的全链路闭环。适合有工程思维的 AI 架构师、Agent 研发人员、以及大模型项目实践者。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3449

编辑距离(Edit Distance)的动态规划算法

编辑距离是衡量两个字符串S和T相似程度的一种度量方法。 编辑距离定义:将字符串S通过插入、删除、替换三种编辑操作,转变为字符串T,所需最少的编辑次数。 计算编辑距离的问题,符合动态规划的几个特征: 最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。无后

==.== 1万+

windows exe爬虫:exe抓包

在不知情所拦截应用使用的流量时,所以建议用Wireshark。本文利用python代码,实现自动拦截,写入pcap包,并用代码分析流量的协议。这样会在本地目录下生成capture_inbound.pcap,可以用wireshark分析,也可以利用python代码进行分析,如果使用python代码进行分析,需要借助pyshark或者scapy。使用的python WinDivert的包,当然前提也是需要安装Wireshark软件,设置环境变量,并安装pydirvert包。

youbingchen的博客 617

动态规划——编辑距离系列问题

动态规划——编辑距离系列问题1 概述2 实战2.1 判断子序列2.2 不同的子序列 1 概述 编辑距离原题——72. 编辑距离,是LeetCode上的一道 hard 级别的题目,该题允许对两个字符串进行增删改(没有查)的操作,而一些类似的题目可能操作起来没有这道题这么复杂,但是也可利用同样的思路去做,因此我们把这些题型提取出来,当作一个知识点来做巩固。下面将按照由易到难的顺序来依次解决这些题目,当然有一些题目也可以用贪心等思想去做,但是由于本文着重讲解动态规划算法,所以涉及到其它的算法暂不作讨论。 2 实战

chuangshangbeidong的博客 894

[Dify] 如何在Dify中解析上传的TXT文件内容

在Dify平台上构建智能应用时,解析用户上传的.txt文件是关键步骤。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 2637

ansys license许可证问题:Ansys License Manager Release 2024 R1...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 5369

动态规划问题之编辑距离

前言:编辑距离此题为LeetCode的第72号题,本质上可以采用动态规划DP的方法求解,但是在求解的时候理解出现了问题,导致懵逼了一段时间,还好终于想通了,现将自己的理解思路、程序实现以及空间复杂度优化整理如下,希望可以帮到大家。 问题描述: 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三...

Heart_M的博客 706

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

编辑距离问题(动态规划)

zhai

wwangzai的博客 312

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

动态规划Dynamic programming详解-编辑距离问题【python】

编辑距离问题详解包括方程式推导、代码示例、图解,快速掌握动态规划

10年数据\经营分析经验,现任大厂数据分析负责人 1744

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

动态规划编辑距离 使用动态编程(DP)解决问题时出现的第一个问题是如何弄清楚DP是解决问题的一种方法? 因此,我将使用动态编程解决问题,并说明如何解决这一问题。 “明确说明的问题是一半解决的问题。” - 约翰·杜威 让我们讨论使问题解决一半的问题。 给定两个单词word1和word2。 找到将word1转换为word2所需的最少操作数。 一个单词允许进行以下3种操作: ...

编程故事的地方 1674

动态规划算法解决最小编辑距离问题

动态规划算法解决最小编辑距离问题

li_peixiansang的博客 1078

最短编辑距离问题与动态规划----LeetCode 72.编辑距离

在这个问题中,我们定义f[i][j]为从word1的前i个字符转换到word2的前j个字符所需的最少操作次数。这个定义本身就隐含了一个最优子结构的性质,即要得到f[i][j]的值,我们可以依赖于f[i-1][j]f[i][j-1]和的值,这些都是更小的子问题。

like455的博客 1127

动态规划 41. 编辑距离(以及子序列编辑问题总结)

72. 编辑距离 - 力扣(LeetCode)代码随想录难度 6 - 中等刷动态规划偶遇编辑距离强如怪物拼尽全力也无法战胜并非并非并非动态规划之编辑距离总结篇编辑距离终于来了,这道题目如果大家没有了解动态规划的话,会感觉超级复杂。编辑距离是用动规来解决的经典题目,这道题目看上去好像很复杂,但用动规可以很巧妙的算出最少编辑距离。思路(摘录、修改自代码随想录):dp定义:(本题重要的部分)​​dp[i][j]​​表示以下标​​i-1​​为结尾的字符串​​word1​​,和以下标​​j-1​​。

m0_49844155的博客 903

动态规划 编辑距离问题 三题

从 s a t u变为s u 需要经过或者或者三次:从左上方下来:从左边过来:从上面下来。

2301_78947898的博客 1527

编辑距离问题(动态规划)

编辑距离问题 参考:https://blog.youkuaiyun.com/sinat_31790817/article/details/78376402?utm_medium=distribute.pc_relevant.none-task-blog-title-5&spm=1001.2101.3001.4242 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的

Reinhart_L的博客 579

从最短编辑距离问题到初识动态规划

今天的题目虽然是从最短编辑距离到初识动态规划,但实际上,要解最短编辑距离,还是得从动态规划开始。

Jiuto_crx的博客 923
上一篇: find
下一篇: 内存泄露检测工具--VisualC++ debugger 和 CRT 库
SlowIsFastLemon
博客等级 码龄8年 265粉丝 790原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值