最小编辑距离算法
最小距离算法用来计算两个字符串之间的相似度,这次主要是因为对搜索结果的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