zoukankan      html  css  js  c++  java
  • 最小编辑距离算法

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

  • 相关阅读:
    开源资源大汇总(C#)
    javascript必知必会之this关键字及scope(转)
    MSMQ 消息队列 安装MSMQ 创建发送接收队例消息
    精确获取页面元素的位置(转)
    javascript无缝滚动(转)
    C#多线程
    javascript十个最常用的自定义函数(转)
    ASP.NET——ASP.NET 数据库缓存依赖
    jQuery三维展示插件(转)
    Action和Func的区别
  • 原文地址:https://www.cnblogs.com/yancey/p/3370080.html
Copyright © 2011-2022 走看看