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
  • 相关阅读:
    Java 网络编程基本步骤
    database link远程链接数据库
    oracle函数应用
    Oracle中的正则表达式
    java利用jxl操作Excel
    用AXIS2发布WebService的方法
    Oracle CASE WHEN 用法介绍
    Oracle 取随机数
    oracle学习-存储过程返回一个值,和返回一个结果集
    十道海量数据处理面试题与十个方法大总结
  • 原文地址:https://www.cnblogs.com/datakv/p/5664233.html
Copyright © 2011-2022 走看看