• 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
  • 相关阅读:
    洛谷 P1200.[USACO1.1]你的飞碟在这儿Your Ride Is Here
    洛谷 P1055.ISBN号码
    洛谷 P1567.统计天数
    洛谷 P2141.珠心算测验
    洛谷 P1428.小鱼比可爱
    洛谷 P1427.小鱼的数字游戏
    洛谷 P1047.校门外的树
    洛谷 P1046.陶陶摘苹果
    洛谷 P1980.计数问题
    洛谷 P1424.小鱼的航程(改进版)
  • 原文地址:https://www.cnblogs.com/datakv/p/5664233.html
Copyright © 2020-2023  润新知