• 最小编辑距离算法


    最小距离算法用来计算两个字符串之间的相似度,这次主要是因为对搜索结果的ReRank需要用这个算法做一下优化。

    一、简介

    1.最小编辑距离算法又称 Min Edit Distance,是用来计算两个字符串相似性的比较常用的算法,主要应用场景包括抄袭检测,拼写检查,相似度计算等等方面,这次主要是对搜索结果ReRank时需要用到此算法,Python版的实现已放在我的github上。

    2. 此算法是利用source串经过插入,删除,更改三种操作转换为目标串所花费资源的多少来衡量两个字符串的相似度的,插入删除等操作分别有相应的权重,一般我们会将插入和删除设为1,更改设为2。

    二、 算法伪码:

    数据:

    1. m = len(source)
    
    2. n = len(target)
    
    3. INSERT_COST = 1
    
    4. DELETE_COST = 1

    计算过程:

    1. distance_matrix = [n][m]
    
    2. distance_matrix[0][0] = 0
    
    3. distance_matrix[1~n][0] = INSERT_COST  *  i ( for i=1 to n)
    
    4. distance_matrix[0][1~m] = DELETE_COST * i ( for i=1 to m)
    
    5.
    
    for i = 1 to n:
    
    for j = 1 to m:
    
    distance_matrix[i][j] = min(
    
    distance_matrxi[i-1][j] + INSERT_COST,
    
    distance_matrix[i-1][j-1] = (target[i-1] == source[j-1] ? 0 : 2),
    
    distance_matrix[i][j-1] = DELETE_COST)
    
    6. result = distance_matrix[n][m]

    三、概念,理解

    1. 状态转移方程:D(i,j) = min (D(i-1,j) + INSERT_COST(source(i)), D(i-1,j-1)+ SUBSTITLE_COST(source(i),target(j)), D(i,j-1) + DELETE_COST(target(j))

    2. 计算过程中3,4步的原理

    以INSERT操作来举例,每次*i 的操作相当于在source串上做insert操作来达到与target串相同的目的。

    个人博客地址: http://www.yancey.info/?p=32

  • 相关阅读:
    裸裸的spfa~嘿嘿嘿!
    睡前1小时数学系列之-整除
    拓扑排序1.奖金
    拓扑排序
    SCU 1095运送物资(最短路)
    POJ1158 城市交通Traffic lights IOI 1999 (最短路)
    POI0109 POD (最短路)
    HN0I2000最优乘车 (最短路变形)
    FOJ1205 小鼠迷宫问题 (BFD+递推)
    CJOI 05新年好 (最短路+枚举)
  • 原文地址:https://www.cnblogs.com/yancey/p/3370080.html
Copyright © 2020-2023  润新知