zoukankan      html  css  js  c++  java
  • BK树

        采用编辑距离来度量两个字符串之间的相似程度。对于单个字符定义三种操作,插入、删除、修改,最一个字符串经过最少的操作变为另一个字符串,这个操作的次数即为这两个字符串的编辑距离(Levenshtein距离)。具体计算方法见:http://www.cnblogs.com/datakv/p/5630640.html

        通过编辑距离构造构造一个度量空间(Metric Space),该空间内任何关系满足以下三条基本条件:

        d(x,y) = 0 <-> x = y (假如x与y的距离为0,则x=y)

        d(x,y) = d(y,x) (x到y的距离等同于y到x的距离)

        d(x,y) + d(y,z) >= d(x,z)

        先在字符串集合中任选一个字符串Z作为根节点,然后每次从集合中取出一个字符串X,将其插入树中。插入规则是这样的,首先计算X与根节点Z的编辑距离L(X,Z),然后将这个节点插入到Z的编号为L(X,Z)的孩子那边;递归直到到达X可以成为叶子节点。

        查找字符串A编辑距离为d以内的相似字符串,那么从根节点开始寻找,先计算L(Z,A),这个时候我们就知道了与A编辑距离为d的字符串只可能存在于Z的编号为L(Z,A)-d到编号为L(Z,A)+d之间的那些子树里面,执行递归查找就行。

        实践表明,一次查询所遍历的节点不会超过所有节点的5%到8%,两次查询则一般不会17-25%,效率远远超过暴力枚举。适当进行缓存,减小Levenshtein距离常数n可以使算法效率更高。

    出自datakv
  • 相关阅读:
    线性基学习笔记
    内网靶机-抓取票据
    域渗透
    flex元素的使用
    webpack 基本使用
    ES模块的导入
    作用域插槽
    具名插槽的使用
    slot插槽的基本使用
    vue中父子组件的访问方式
  • 原文地址:https://www.cnblogs.com/datakv/p/5664233.html
Copyright © 2011-2022 走看看