FST结构 (解决Trie前缀树 后边不能复用的问题)

能力有限看图理解把。以下的图值得反复琢磨

常用的字典的数据结构

hashmap    skip list      Trie前缀树    FST

Trie前缀树

Trie:相邻有序的term更又可能具有相同的前缀值,那么通过前缀存储就可以节省存储空间

但是你会发现后缀也重复,但是前缀树无法满足后缀也复用

FST 有限状态转换器  (编译原理学过的)

FSM(Finite State Machines)有限状态机: 表示有限个状态集合以及这些状态之间转移和动作的数学模型。其中一个状态被标记为开始状态,0个或更多的状态被标记为final状态

FSA:有限状态接收机

这样输入最后一个就变成了这样


确定性:在任何给定状态下,对于任何输入,最多只能遍历一个transtion
非循环:不可能重复遍历同一个状态
Final唯一性:当且仅当有限状态机在输入序列的末尾处于最终状态时,才接受特定的输入序列
以上例子,如果输入‘wl’会怎样?其实就是可以搜索到的了。因为l指向的节点3已经是final节点了。为解决这样的问题,引出FST

FST简述及它的查询过程

FST:有限状态转化机


FST最重要的功能是可以实现key到value的映射,相当于HashMap<K,V>。FST的查询速度比hashMap慢一点,但是内存消耗比hashMap小很多。FST在lucene大量使用:倒排索引的存储,同义词词典的存储,搜索关键字建议等等。
对于es来说,它是基于lucence开发,底层的数据结构使用的就是fst,它的主要优点:

    查询快
    极致压缩空间占用
    特性:
    确定性:在任何给定状态下,对于任何输入,最多只能遍历一个transtion
    非循环:不可能重复遍历同一个状态
    transducer: 转化器有相关的值(payload),final节点会输出一个值
    比起前面的前缀树以及FSA,在存储的时候多了一个value值。
    考虑以下输入字符:
 

后边那个其实就是他的出度。

 看上边那个过程 ,当你的出度满足你所需的出度的时候才算匹配成功。就比如wi去匹配的时候就匹配不到了。 我们加了一个value 和Finaloutput

能力有限看图理解把。以上的图值得反复琢磨

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值