Edit Distance 算法实现及其设计原理

经典动态规划问题:最短编辑距离算法的原理及实现 编辑距离的定义 编辑距离(Edit Distance)最常用的定义就是Levenstein距离,是由俄国科学家Vladimir Levenshtein于1965年提出的,所以编辑距离一般又称Levenshtein距离。它主要作用是测量两个字符串的差异化程度,表示字符串a至少要经过多少个操作才能转换为字符串b,这里的操作包括三种:增加、删除、替换。 举个例子: (1)增加:对于字符串a:abc 和 ... 阅读详情

题目:

Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.

You have the following 3 operations permitted on a word:

  1. Insert a character
  2. Delete a character
  3. Replace a character

Example 1:

Input: word1 = "horse", word2 = "ros"
Output: 3
Explanation: 
horse -> rorse (replace 'h' with 'r')
rorse -> rose (remove 'r')
rose -> ros (remove 'e')

Example 2:

Input: word1 = "intention", word2 = "execution"
Output: 5
Explanation: 
intention -> inention (remove 't')
inention -> enention (replace 'i' with 'e')
enention -> exention (replace 'n' with 'x')
exention -> exection (replace 'n' with 'c')
exection -> execution (insert 'u')

 

此题我只知道用dp实现,其它的方法没有想到:

有两个单词 word1   word2

一、每一个都增加一个字母的话,如果增加的字母是一样的,那操作数P应该和没增加之前是一样的。

if(word[i] == word[j]){

    P[i+1][j+1] == P[i][j];

}

二、如果增加的字母是不一样的,就有三个增加方式, 找出这三个最小值;

1. (word1增加单词,word2不增加单词) +1 

比如word1:zg,word2:zght

word1增加一个t,这时最小操作数为1了,word2不管增加什么单词都要+1

这里的P[i+1][j]的意思是word1增加单词的最小操作数。

 P[i+1][j+1] = P[i+1][j] + 1; 

2.(word1不增加单词,word2增加单词 P[i+1][j]) + 1

比如word1:nihao,word2:niha

word2增加一个o,这时最小操作数为0了,word1不管增加什么单词都要+1

这里的P[i][j+1]的意思是word2增加单词的最小操作数。

 P[i+1][j+1] = P[i][j+1] + 1; 

3.word1不增加单词,word2不增加单词 P[i][j] + 1

这个就比较容易理解了,比如有这样的单词word1:td   word2:sv

word1增加m  word2增加n

这时P[i+1][j] = 3, P[i][j+1] = 3,而P[i][j] = 2;

 所以:

if(word[i] != word[j]){

    P[i+1][j+1] == min{P[i][j], P[i+1][j] ,P[i][j+1]} + 1;

}

三、动态规划一般都会有初始参数

比如word1="xxxxxxxxx", word2="";操作数就是word1的长度,反过来也是一样。(仔细观察,word1变成word2的操作数一定是和word2变成word1的操作数是一样的,因为加的反是减,替换的反还是替换)

故:P[0][j] = j;  P[i][0] = i;

实现就简单了,我这个人喜欢逆着来,所以这就是我的算法:

	public static int minDistance(String word1, String word2) {
		int m = word1.length();
		int n = word2.length();

		int[][] point = new int[n + 1][m + 1];

		for (int j = m; j >= 0; j--) {
			point[n][j] = m - j;
		}

		for (int i = n; i >= 0; i--) {
			point[i][m] = n - i;
		}

		for (int i = n - 1; i >= 0; i--) {
			for (int j = m - 1; j >= 0; j--) {
				if (word2.charAt(i) == word1.charAt(j)) {
					point[i][j] = point[i + 1][j + 1];
				} else {
					point[i][j] = min(point[i + 1][j + 1], point[i][j + 1], point[i + 1][j]) + 1;
				}
			}
		}

		return point[0][0];
	}

	private static int min(int i, int j, int k) {
		return i < j ? (i < k ? i : k) : (j < k ? j : k);
	}

 

java实现编辑距离(Edit Distance) 原理参照详解编辑距离 文章对编辑距离原理公式解释都挺清楚的,并且用python以递归和dp的方式实现,我改用java进行实现。 package SimilarityMeasurement; public class EditDistance { public static void main(String[] args) { System.out.println(getEDR1("abc"... 阅读详情

相关推荐

edit distance算法

用python 实现的编辑距离算法,支持权重的定义,和词语之间的关联

编辑距离算法详解:Levenshtein Distance算法

算法基本原理:假设我们可以使用d[ i , j ]个步骤(可以使用一个二维数组保存这个值),表示将串s[ 1…i ] 转换为 串t [ 1…j ]所需要的最少步骤个数,那么,在最基本的情况下,即在i等于0时,也就是说串s为空,那么对应的d[0,j] 就是 增加j个字符,使得s转化为t,在j等于0时,也就是说串t为空,那么对应的d[i,0] 就是 减少 i个字符,使得s转化为t。 然后我们...

weixin_30909575的博客 1999

晶振(晶体振荡器)测试方法详解

晶振测试方法分为无源和有源两种类型。无源晶振(两脚)需用示波器测试波形,重点关注正弦波形状、200mV-1.5Vpp幅值和频率精度;有源晶振(四脚)通电后直接输出方波。测试要点包括:示波器使用10X探头、AC耦合,带宽需5倍于晶振频率;万用表可初筛短路/开路;替换法是工程最有效方法。常见故障排查顺序:供电→复位→焊接→型号→负载电容→波形观察→更换晶振→MCU配置。负载电容需按公式计算匹配,示波器观察是核心测试手段。

jiujiujinyuxi的博客 923

算法系列之四:字符串的相似度

算法系列之四:字符串的相似度 我们把两个字符串的相似度定义为:将一个字符串转换成另外一个字符串的代价(转换的方法可能不唯一),转换的代价越高则说明两个字符串的相似度越低。比如两个字符串:“SNOWY”和“SUNNY”,下面给出两种将“SNOWY”转换成“SUNNY”的方法: 变换1: S - N O W Y S U N N - Y Cost = 3 (插入U、替换O...

ruilinruirui 785

ATAC-seq数据分析流程

Outline0. ATAC-seq原理0.1 染色体结构0.2 原理0.3 结果0.4 意义1. ATAC-seq数据分析流程1.1 上游分析(1)序列质控和比对(2)序列筛选1.2 下游分析1.3 进阶分析 0. ATAC-seq原理 0.1 染色体结构 0.2 原理 0.3 结果 0.4 意义 1. ATAC-seq数据分析流程 1.1 上游分析 (1)序列质控和比对 fastqc trim_golare bowtie2 mapping时要加上参数 --very-sensitive -X 2000

weixin_57830892的博客 1万+

基于分段线性近似的Softmax硬件加速器设计

本文深入探讨了基于分段线性近似的Softmax硬件加速器设计。针对深度学习模型中Softmax函数在硬件实现时指数运算成本高昂的问题,提出用分段线性拟合替代传统泰勒展开,通过一次乘加操作高效完成计算,并详细分析了输入范围压缩、精度与硬件资源权衡、以及包含地址生成、参数查找、乘加计算和归一化的完整硬件架构。该方法在保证精度的同时,显著提升了AI边缘芯片的推理速度和能效。

weixin_28278377的博客 312

Minimum Edit Distance 算法原理及实现

Minimum Edit Distance(最小编辑距离)算法可以用于计算单词相似度、拼写错误检查,以及翻译中的双语对齐。 最小编辑距离指的是源字符串X变换为目标字符串Y需要的基本字符操作(增加,删除,替换)的代价之和。 如下图[1]中,源串intension到目标串execution最少需要删除1个字符,增加1个字符,替换3个字符 Levenshtein 距离定义了两种代价计算方式: 1)增加...

Young 1092

【考研高数-高等数学-基础】第一章 函数、极限、连续

第一章 函数、极限、连续 第二章 导数与微分 第三章 微分中值定理及导数应用 第四章 不定积分 第五章 定积分与反常积分 第六章 定积分的应用 第七章 微分方程 第八章 多元函数微分学 第九章 二重积分 第十章 无穷级数 第十一章 向量代数与空间解析几何及多元微分学在几何上的应用 第十二章 多元积分学及其应用 难题: 极限的递推 微分中值定理的证明题 定积分的不等式和等式的证明 重积分的不等式和等式的证明 线面积分的不等式和等...

刘鑫磊 2034

编辑距离 (Edit distance)

http://www.dreamxu.com/books/dsa/dp/edit-distance.html问题描述给定 2 个字符串 a, b. 编辑距离是将 a 转换为 b 的最少操作次数,操作只允许如下 3 种: 插入一个字符,例如:fj -> fxj 删除一个字符,例如:fxj -> fj 替换一个字符,例如:jxj -> fyj 思路用分治的思想解决比较简单,将复杂的问题分解成相似的子问题

CarryPotMan的博客 2186

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程。源码内置详细搭建教程,感兴趣可自行下载。

百创科技 1713

揭秘大厂智能生产调度AI系统架构:架构师拆解中台化设计3大优势

智能生产调度AI系统是基于AI算法(如遗传算法、强化学习、深度学习),结合生产数据(如订单、设备、库存、人员),自动生成最优生产计划与调度方案的系统。最大化设备利用率(减少停机时间);最小化生产周期(快速交付订单);优化库存水平(降低积压与短缺);提升准时交货率(满足客户需求)。维度传统调度系统智能调度AI系统决策逻辑规则引擎+人工经验AI算法(预测+优化)数据处理手工汇总+静态数据实时数据整合+动态更新适应能力固定场景(如单一产品、单一工厂)

AI Python 编程之道的博客 759

[LeetCode]161. One Edit Distance

原题链接:https://leetcode.com/problems/one-edit-distance/ 这道题目及变种多次在各大公司的面经中出现过。我在面snapchat的时候也遇到过这道题目。题目是说我们要求给定2个输入字符串S和T,要求判断S和T是不是只有一个字符只差。这里One Edit Distance意思就是你改动其中一个字符串的1个字符,就会变成另一个字符串。这里的改动包括增加1

foolman 655

反爬虫:对抗最新反爬技术 Cloudflare详解

本文针对Cloudflare最新反爬机制提供完整解决方案,覆盖TLS指纹、行为轨迹、设备指纹等检测场景。文章首先分析Cloudflare的三重检测体系(TLS指纹、行为指纹、设备指纹)及其拦截表现,随后提出四种绕过方案:1)使用curl_cffi模拟浏览器TLS指纹;2)通过undetected-chromedriver移除自动化特征;3)Playwright结合stealth插件模拟人类行为;4)动态请求调度策略。重点推荐轻量级Python方案curl_cffi和浏览器自动化方案Playwright-st

数据知道的博客 4624

Oracle中的相似度计算函数:UTL_MATCH.EDIT_DISTANCE_SIMILARITY与UTL_MATCH.JARO_WINKLER_SIMILARITY比较分析

在数据处理与分析中,尤其是在文本相似度计算方面,Oracle数据库提供了几个强大的工具函数。UTL_MATCH包中的两个函数——EDIT_DISTANCE_SIMILARITY和JARO_WINKLER_SIMILARITY,便是常用的文本相似度测量工具。

发现问题,面对问题,分析问题,解决问题,总结问题 1800

把 ABAP writable CDS view entity 讲透:从只读建模到可写模型的 ABAP CDS 新能力

摘要:SAP引入的writable CDS view entity突破了传统CDS视图只读的限制,允许通过ABAP SQL直接进行数据修改。该特性通过WRITABLE关键字定义,使CDS视图成为与数据库表同等级别的可写对象。其核心价值在于为数据集成、中间层同步等场景提供结构化写入入口,但需注意不应绕过业务规则。最佳实践建议保持底层表结构简单映射,避免复杂变形。这一特性标志着CDS从单纯消费模型向双向数据交互能力的演进,为ABAP开发提供了新的数据边界设计思路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1313

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

编辑距离(Edit Distance)

以下将详细讲解编辑距离的原理、步骤、时间复杂度分析、C#实现、测试用例、在半导体场景中的应用,并结合之前讨论的广度优先最短路径(BFS SPs)、贝尔曼-福特最短路径(Bellman-Ford SPs)、迪杰斯特拉最短路径(Dijkstra SPs)、迪杰斯特拉所有对最短路径(Dijkstra APSP)、卡特兰数、快速排序、希尔排序、奇偶排序和鸽巢排序进行分析。4. 与排序算法的结合与对比编辑距离可与快速排序、希尔排序、奇偶排序和鸽巢排序结合,优化半导体场景中的序列排序和选择。1.3 时间与空间复杂度。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 867

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Edit Distance(Levenshtein Distance) in Java

Edit Distance也称Levenshtein Distance,翻译为编辑距离算法,是一种计算

andrewgyq的专栏 622

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Edit-Distance的算法分析与实现

我们把两个字符串的相似度定义为:将一个字符串转换成另外一个字符串的代价(转换的方法可能不唯一),转换的代价越高则说明两个字符串的相似度越低。比如两个字符串:“SNOWY”和“SUNNY”,下面给出两种将“SNOWY”转换成“SUNNY”的方法:   变换1:     S -

mingchan的专栏 1787

Levenshtein Edit distance

似乎在LeetCode里面也有,不过这里是为了解决另外的问题而做的。假设

Magi Su的技术回收站 1099

fuzzy_match工作原理解析:Dice‘s Coefficient与Levenshtein Distance双算法深度探究

fuzzy_match是一款强大的字符串匹配工具,它能够在大量文本数据中快速找到与目标字符串相似的结果。该工具核心采用Dice's Coefficient(又称Pair Distance)和Levenshtein Edit Distance双算法组合,通过智能默认配置实现高效匹配,无需复杂设置即可应对多种场景。 ## 核心算法架构:双引擎驱动的匹配机制 fuzzy_match的设计理念是**智

gitblog_00223的博客 475

[LeetCode] Edit Distance

[Problem] Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) You have the following 3 operations permitted on

1.02^365的成长裂变 3627

Edit Distance

Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.You have the following 3 operations permitted on a word:Insert a characterDelete a characterRe...

ncst 692

Leetcode: Edit Distance

Problem 7: Edit Distance Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) You have the following

popfish的算法路 2255

LeetCode -- Edit Distance

LeetCode -- Edit Distance

我的英文站点:https://iorilan.medium.com/ 1158

算法之动态规划(LCS最长公共子序列, edit distance,交叉子串)

转自:http://blog.youkuaiyun.com/cedricliang/article/details/9093029

mwill的专栏 1230

LeetCode 72 — Edit Distance(C++ Python)

题目: https://oj.leetcode.com/problems/edit-distance/

龙之梦 1870
上一篇: eclipse 导入项目中文乱码
下一篇: spring源码分析环境的搭建和demo
李文区
博客等级 码龄13年 29粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李文区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值