edit distance 理解

article/2025/10/11 3:47:25

一直没有理解到inert i delete j 的意思。看看图就可以明白了。


对于那道面试题:http://www.careercup.com/question?id=6287528252407808  k-palindrome. 最精妙的地方在于只考虑 k 长度以内的改变,这样就可以判断出来了。速度是O(k*n)


1. Definition of  Minimum Edit Distance 

Edit Distance用于衡量两个strings之间的相似性。
两个strings之间的 Minimum edit distance是指把其中一个string通过编辑(包括插入,删除,替换操作)转换为另一个string的最小操作数。
如上图所示,d(deletion)代表删除操作,s(substitution)代表替换操作,i(insertion)代表插入操作。
(为了简单起见,后面的Edit Distance 简写为ED)
如果每种操作的cost(成本)为1,那么ED = 5.
如果s操作的cost为2(即所谓的Levenshtein Distance),ED = 8.

2. Computing Minimum Edit Distance

那么如何找到两个strings的minimun edit distance呢?要知道把一个string转换为另一个string可以有很多种方法(或者说“路径“)。我们所知道起始状态(第一个string)、终止状态(另一个string)、基本操作(插入、删除、替换),要求的是最短路径。
对于如下两个strings:
X的长度为n
Y的长度为m
我们定义D(i,j)为 X 的前i个字符 X[1...i] 与 Y 的前j个字符 Y[1...j] 之间的距离,其中0<i<n, 0<j<m,因此X与Y的距离可以用D(n,m)来表示。
假如我们想要计算最终的D(n,m),那么可以从头开始,先计算D(i, j) (i和j从1开始)的值,然后基于前面的结果计算更大的D(i, j),直到最终求得D(n,m)。
算法过程如下图所示:

上图中使用的是”Levenshtein Distance“即替换的成本为2.
请读者深入理解一下上图中的循环体部分: D(i,j)可能的取值为:
1. D(i-1, j) +1 ;
2. D(i, j-1) +1 ;
3. D(i-1, j-1) + 2 (当X新增加的字符和Y新增加的字符不同时,需要替换)或者 + 0(即两个字符串新增加的字符相同)
下图即对字符串 INTENTION 和 EXECUTION 一步步求ED形成的表。左上角画红圈的8就是两个字符串间的最小ED。


3. Backtrace for Computing Alignments


上一节课我们求得了Edit distance,但是仅有Edit distance也是是不够的,有时我们也需要把两个strings中的每个字符都一一对应起来(有的字母会与“空白”对应),这可以通过Backtrace(追踪)ED的计算过程得到。
通过上一节我们知道,D(i, j)的取值来源有三种,D(i-1, j)、D(i, j-1)或者D(i-1, j-1),下表通过添加箭头的方式显而易见地给出来整个表格的计算过程(下面的阴影表示的只是一种路径,你会发现得到最后结果的路径不是惟一的,因为每个单元格数字可能由左边、下边或者左下边的得到)。

从表格右上角开始,沿着追踪的剪头,就可以拎出一条路径出来(不惟一),这条路径的剪头可以轻易的展现是通过哪种方法(插入、删除、替换)完成的。
表格右上角阴影部分四个格子,路径只有一条,我们也可以很轻易地看出最后四个字母是相同的,但这种情况并不绝对,比如中间的阴影6格也只有一种路径,可是却分别对应于字母e和c。
算法实现“寻找路径”的思想很简单——就是给每个单元格定义一个指针,指针的值为LEFT/DOWN/DIAG(不明白为什么他为什么说是指针),如下图所示。


想一下普通的情况,如下图,从(0,0)到(M,N)的任何一条非下降路径都对应于两个strings间的一个排列,而最佳的排列由最佳的子排列组成。

简单思考一下算法的性能
Time:    O(nm)
Space:  O(nm)
Backtrace: O(n+m)



http://chatgpt.dhexx.cn/article/G0veNKYQ.shtml

相关文章

Tiny-DSOD: Lightweight Object Detection for Resource-Restricted Usages

Y uxi Li1 lyxok1sjtu.edu.cn Jiuwei Li2 jiuwei.liintel.com Weiyao Lin1 wylinsjtu.edu.cn Jianguo Li2 jianguo.liintel.com 1Shanghai Jiao Tong University , China 2Intel Lab China Abstract 近年来&#xff0c;随着深度学习的发展&#xff0c;目标检测技术取得了长足…

android density

为什么要引入dip —The reason for dip to exist is simple enough. Take for instance the T-Mobile G1. It has a pixel resolution of 320x480 pixels. Now image another device, with the same physical screen size, but more pixels, for instance 640x480. This devic…

手游游戏资源提取 (破解、AssetStudio、VGMToolbox、disunity、Il2CppDumper、 .NET Reflector)...

参考&#xff1a; 公主连结 游戏资源提取(解包)简明教程 Unity3D研究院之mac上从.ipa中提取unity3D游戏资源 吾爱破解&#xff1a;记一次unity3d data修改 GitHub&#xff1a;Il2CppDumper 想拿点知名IP的手游素材做点demo&#xff0c;然后搜了下如何能拿到app的素材资源 一 下…

DISN:Deep Implicit Surface Network for High-quality Single-view 3D Reconstruction

时间&#xff1a;2019年 作者&#xff1a;Weiyue Wang ,University of Southern California etc. Abstract&#xff1a; 1.DISN 通过预测基本符号距离场来从二维图像中生成高质量的细节丰富的三维网格&#xff1b; 2.DISN 在二维图像上预测每一个三维点的投影位置&#xff…

Dist

这道题只要找到我们距离的规律就行了&#xff0c;我们可以发现&#xff0c;当行数小于列数时,列数(列数-1)/k,否则&#xff0c;行数(行数-1)/k&#xff0c;没记算一次我们的距离就会增加1&#xff0c;应为行数一减你就往下了一个&#xff0c;所以这个要加1. #include<bits/…

unity3D 如何提取游戏资源 (反编译)+代码反编译【P.M.出品】

转自&#xff1a;https://blog.csdn.net/LANGZI7758521/article/details/52291564 首先感谢 雨松MOMO 的一篇帖子 教我们怎么提取 .ipa 中的游戏资源。教我们初步的破解unity3d资源的基本方法 附上原帖的链接&#xff1a;http://www.xuanyusong.com/archives/2584 下面我会从头…

Unity游戏资源逆向工具

Unity游戏资源逆向工具 https://www.cnblogs.com/kekec/p/12175547.html disunity是一款Java编写&#xff08;需安装jdk1.8&#xff0c;即Java8&#xff09;的解析Unity asset和asset bundle文件&#xff08;流式加载&#xff0c;支持热更新&#xff09;的命令行工具&#xf…

Distillation

蒸馏&#xff0c;把有杂质的东西变成纯度高的 知识从教师网络集成到学生网络&#xff0c;这个过程叫迁移&#xff0c;这么做的原因是终端的算力有限&#xff0c;需要高效率 有关嵌入式开发也有教程&#xff01;&#xff01; 问题的引入&#xff1a;标签有问题&#xff0c;马更…

Unity 提取资源 Disunity、Unity Studio

提取Unity3d资源&#xff0c;用过2个工具 Disunity https://github.com/ata4/disunityUnity Studio https://github.com/RaduMC/UnityStudio 解压XXX.apk.&#xff0c;如果能在XXXX\assets\bin\Data\Managed路径下找到UnityEngine.dll&#xff0c;则表明该游戏由Unity3d打包。…

【逆向工程】 disunity的使用

1. 下载并安装好jdk: 下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装教程&#xff1a;http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 2.下载disunity: https:/…

oracle怎么ping监听,请教TNSPING无监听的问题

请教各位高人&#xff0c;我在自己的虚拟机上装的是solaris10&#xff0c;数据库是oracle10.1.0.3.0&#xff0c;主机名如下&#xff1a; $ hostname fanww $ 在TELNET到虚拟机上之后可以正常启动监听&#xff0c;数据库也能启动&#xff0c;如下&#xff1a; $ lsnrctl start …

oracle数据库怎么ping,Oracle中tnsping命令解析

Oracle Net 工具(命令)tnsping&#xff0c;是一个OSI会话层的工具&#xff0c;它用来&#xff1a; 1)验证名字解析(name resolution&#xff0c;是oracle自己的网络服务名) 2)远程的listener是否启动 1.远程tnsping 2.关闭监听 3.启动监听&#xff0c;重新验证 总结&#xff1a…

Linux下Oracle的tnsping不显示sqlnet.ora文件路径

Tnsping在Linux与Windows下显示不一样 我的环境是&#xff1a;Centos7.6Oracle11.2.0.4 区别是&#xff1a;Linux下没有显示sqlnet.ora的路径名。 Linux下&#xff1a;Used parameter files:是空的 Windows下&#xff1a;Used parameter files显示路径名。 误导 因为我经常…

Oracle中tnsping无响应

1、tnsping 127.0.0.1&#xff08;数据库服务器地址&#xff09;无返回结果&#xff1b; 2、重启数据库服务或者重启数据库服务器问题依然不能解决&#xff1b; 3、最后发现&#xff0c;是 listener.log文件到4G了&#xff0c;删了这个文件 就正常了&#xff1b; 文件路径&…

tnsping命令解析

tnsping命令格式: tnsping <service_name> n n的意义是可以让tnsping ping多次 例: c:\Documents and Settings\Tony>tnsping orcl Oracle Net 工具&#xff08;命令&#xff09;tnsping&#xff0c;是一个OSI会话层的工具&#xff0c;它用来&#xff1a; 1&…

DOM4J及SAXReader解析xml文件数据

1、DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台&#xff0c;采用了 Java 集合框架并完全支持 DOM&#xff0c;SAX 和 JAXP。DOM4J 使用起来非常简单。只要了解基本的 XML-DOM 模型&#xff0c;就能使用。Dom&#xff1a;把整个文档作为一个…

告别996-SAXReader读取xml配置文件

在公司某一模块开发中,可以获取全部字段,但是需要取出某些不需要的字段,于是采取动态方法结合xml,将不需要的字段写在xml里面.或者根据下拉框中的值动态的获取某一个筛选条件集合sql筛选出需要的条件 前提准备 文件名:xxxxxxx.xml <?xml version"1.0" encoding…

Java 应用SAXReader 解析网络地址 XML

xml格式&#xff1a; 依赖于dom4j 框架自带该依赖包springboot框架中 工具类如下&#xff1a; import com.alibaba.fastjson.JSONObject; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader;import java.net.URL;/*** SAXReader 解析 xml 工…

XML学习总结(三)——SAXReader解析xml文件数据

第一种方式&#xff1a; 1. 加入jar包 注意 1.1 xml文件解析时编码要一致&#xff08;默认UTF-8&#xff09;&#xff0c;出现报错可以在记事本中另存为来更改编码格式。 2.2 jar包两个都需要。 2.gao.xml数据如下&#xff1a; <?xml version"1.0" encoding&qu…

SAXReader解析xml

SAXReader解析xml文件 要使用SAXReader解析xml文件&#xff0c;就需要导入两个架包&#xff1a;版本自己选择。 &#xff08;1&#xff09;dom4j-1.6.1.jar dom4j下载地址 &#xff08;2&#xff09;jaxen-1.1-beta-6.jar jaxen下载地址 项目的搭建如下&#xff1a; 项目的配置…