算法笔记:字符串编辑距离(Edit Distance on Real sequence,EDR)/ Levenshtein距离

1 算法介绍

  • 给定两个长度分别为n和m的轨迹tr1和tr2,最小距离的匹配阈值e
    • 两条轨迹之间的EDR距离就是需要对轨迹tr1进行插入、删除或替换使其变为tr2的操作次数
  • 动态规划的算法如下

 红色的是还没有考虑的两个轨迹部分;黑色是已经考虑过的两个轨迹部分

 2 举例

  •  在p1处“插入”一点、将p2'“替换”替换为p3和在p5处“插入”一点,共计3个操作使两条轨迹相等(即对应点距离均小于阈值),故其EDR值为3

3 python代码

3.1 自行实现

import numpy as np
def EDR(TR1,TR2):
    m,n = len(TR1)+1,len(TR2)+1

    matrix = np.zeros((m,n))
    #matrix[i][j]表示 TR1还剩i个元素,TR2还剩j个元素时,他们的编辑距离

    for i in range(1,m):
        matrix[i][0] = i 
    for j in range(1,n):
        matrix[0][j] = j
    #这两个for循环表示,一个轨迹没有元素了,另一个轨迹还有n个元素,那么此时编辑距离为n(插入/删除n个值

    for i in range(1,m):
        for j in range(1,n):
            if TR1[i-1]==TR2[j-1]:
                cost = 0
            else:
                cost = 1
            #判断两个轨迹对应位置的值是否一致
            
            matrix[i][j]=min(matrix[i-1][j]+1,matrix[i][j-1]+1,matrix[i-1][j-1]+cost)
            #删除,插入,替换,这三个操作哪个编辑距离小一点,就选哪个


    return matrix


disEDR=EDR("ivan1","ivan2")
disEDR[-1][-1],disEDR
'''
(1.0,
 array([[0., 1., 2., 3., 4., 5.],
        [1., 0., 1., 2., 3., 4.],
        [2., 1., 0., 1., 2., 3.],
        [3., 2., 1., 0., 1., 2.],
        [4., 3., 2., 1., 0., 1.],
        [5., 4., 3., 2., 1., 1.]]))
'''

3.2 editdistpy包

EDR的快速实现

import sys

from editdistpy import levenshtein

string_1 = "ivan1"
string_2 = "ivan2"


levenshtein.distance(string_1, string_2,sys.maxsize)
#1


levenshtein.distance(string_1, string_2,0.5)
#-1

如果编辑距离小于第三个变量,那么就返回编辑距离,否则返回-1

参考内容:

轨迹相似性度量方法_轨迹相似度_意念回复的博客-CSDN博客

字符串编辑距离(Levenshtein距离)算法 - BlackStorm - 博客园 (cnblogs.com)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

UQI-LIUWJ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值