字符串编辑距离之Damerau–Levenshtein Distance

概述

Damerau–Levenshtein Distance用来测量两个字符序列之间的编辑距离的字符串度量标准。两个词的Damerau–Levenshtein Distance是从一个词转换为另一个词的最少操作数,与Levenshtein Distance不同的是,除了单个字符的插入、删除和变更之外,还包括两个相邻字符的转换。

定义

对于两个字符串ab,函数d_{a,b}(i,j)表示a的前i个字符与b的前j个字符的编辑距离:

d_{a,b}(i,j)=\begin{cases} \max(i,j) & \text {if } \min(i,j)=0 \\ \min\begin{cases} d_{a,b}(i-1,j)+1\\ d_{a,b}(i,j-1)+1\\ d_{a,b}(i-1,j-1)+1_{(a_{i}\neq b_{j})}\\ d_{a,b}(i-2,j-2)+1 \end{cases}& \text {if }i,j> 1 \text{ and }a_{i}=b_{j-1}\text{ and }a_{i-1}=b_{j}\\ \min\begin{cases} d_{a,b}(i-1,j)+1\\ d_{a,b}(i,j-1)+1\\ d_{a,b}(i-1,j-1)+1_{(a_{i}\neq b_{j})} \end{cases}& \text{otherwise} \end{cases}

i,j> 1 \text{ and }a_{i}=b_{j-1}\text{ and }a_{i-1}=b_{j} 时,除了要计算Levenshtein Distance中所定义的插入、删除和变更操作的操作数以外,还要计算相邻字符转换的操作数,然后将四个操作数做对比取最小的值。

示例

以字符串a:aborad和b:aboard为例,求值过程如下图:

图片制作中。。。

如图字符串ab的Damerau–Levenshtein Distance \operatorname{d}_{a,b}(6,6)为1,相似度Sim_{a,b}为:

Sim_{a,b}=1-(\operatorname{d}_{a,b}(6,6)/max(6,6))=0.8333\cdots

编辑距离算法是一种用来衡量字符串之间相似度的算法,它可以计算出将一个字符串转换为另一个字符串所需的最小操作数。 编辑距离的计算使用了Levenshtein distance算法,该算法由俄罗斯数学家Vladimir Levenshtein在1965年提出。它通过插入、删除和替换字符来计算两个字符串之间的距离。 算法的基本思想是逐个比较字符串中的字符,当字符不相同时,可以选择进行插入、删除或替换操作,使得两个字符相等,从而减小距离。通过一系列的操作,最后可以得到两个字符串相等的情况。 在计算过程中,算法使用了一个二维矩阵来表示两个字符串之间的距离。矩阵的行表示源字符串的字符,列表示目标字符串的字符。矩阵中的每个值表示在当前位置上,通过一系列操作所需的最小距离。通过动态规划的方式,算法逐步填充矩阵,直到计算得到整个矩阵。 计算编辑距离的过程是从左上角到右下角的遍历,每一步都考虑当前位置的字符是否相等,如果相等,则跳过该字符;如果不相等,则可以选择插入、删除或替换操作,并选择最小操作数。最后,右下角的值即为两个字符串之间的编辑距离编辑距离算法可以应用于许多领域,如拼写纠正、基因序列比对等。通过计算字符串之间的相似度,可以帮助我们理解文本、数据的相似性程度,从而提供更好的数据处理与分析效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值