python 编辑距离_编辑距离(Levenshtein距离)详解(附python实现)

编辑距离,又称Levenshtein距离,衡量的是两个字符串之间转换所需的最少编辑操作次数。本文详细介绍了编辑距离的概念、算法思想,并提供了Python的简单实现。通过动态规划求解,涉及插入、删除、替换三种操作。此外,还提到了Python官方扩展包python-Levenshtein的安装与使用。
摘要由CSDN通过智能技术生成

编辑距离定义:

编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。

许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符。

例如将eeba转变成abac:

eba(删除第一个e)

aba(将剩下的e替换成a)

abac(在末尾插入c)

所以eeba和abac的编辑距离就是3

俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。

算法:

算法就是简单的线性动态规划(最长上升子序列就属于线性动态规划)。

设我们要将s1变成s2

定义状态矩阵edit[len1][len2],len1和len2分别是要比较的字符串s1和字符串s2的长度+1(+1是考虑到动归中,一个串为空的情况)

然后,定义edit[i][j]是s1中前i个字符组成的串,和s2中前j个字符组成的串的编辑距离

具体思想是,对于每个i,j从0开始依次递增,对于每一次j++,由于前j-1个字符跟i的编辑距离已经求出,所以只用考虑新加进来的第j个字符即可

插入操作:在s1的前i个字符后插入一个字符ch,使得ch等于新加入的s2[j]。于是插入字符ch的编辑距离就是edit[i][j-1]+1

删除操作:删除s1[i],以期望s1[i-1]能与s2[j]匹配(如果s1[i-1]前边的几个字符能与s2[j]前边的几个字符有较好的匹配,那么这么做就能得到更好的结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值