Trie前缀树原理、FST的构建过程

一、前缀树原理

依次输入:msb、msn、msbtech、wltech会产生如上图数据结构

1、如果出现可以公用的元素,则另开分支将不可以公用的部分进行存储,最后一个节点标记为绿色

2、在查找时按照从头到尾的顺序进行查找,只有每个节点都符合并且最后一个字母为绿色final节点时代表查询成功

3、若没有可以公用的部分,则单独开分支进行存储,如wltech

 但是此时有一问题,msbtech和wltech在前缀上没有可以公用的部分,但是tech可以公用,此时是否还可以进行优化呢?

二、FSA

接着上图前缀树与红色字体问题,提出当输入wltech时,tech可以复用,得出FSA将tech直接复用减少存储空间

 

 注意:当输入msn时,如果是前缀树,n节点会单独新增一个节点表示final节点。在使用FSA之后n节点直接指向最后的final节点

但是这里又会产生一个问题:wl是否存在呢?因为wl的下一个节点为final节点,中止节点,按理说是应该存在的,但是结果是不存在的

三、FST

 

FST会在final节点中新增Final Output数值,当查找某一字符串的时候,会根据当前字符串的路径相加每个节点中的value得到最终值与初始value对应判断是否一致

 

posted @ 2022-02-09 08:25  showMeTheCodes  阅读(715)  评论(0编辑  收藏  举报