double array trie

Trie 用于前缀匹配,在搜索引擎的切词中有广泛的引用,但trie占有空间太多,因此有doube array trie,

参考文章:http://linux.thai.net/~thep/datrie/datrie.html

 

构建trie的方法主要有两种,一种是动态构建,如参考文章里的,另一种就是批量构建,算法如下:

将所有的输入词进行排序,例如输入词是ab,ac,cd,ef

则排好序后为:ab,ac,cd,ef

 

算法首先将每个单词的首字符拿出来,即a,c,e,注意这里有两个a,这个信息是需要被保存的,拿到a,c,e后,选出base来,由于这个base的所有下一个状态都已经找到,因此这个base是不会被改变的。下一次,首先从a出发,由于我们知道有两个单词从a开始,因此找出了b,c,重复上面的过程。需要注意的是单词的结尾,我们对每个单词后面加上一个不存在的字符0,来作为其结尾

 

关键数据结构,用于保存上面的每一个字符,需要记录有多少单词以这个字符开始,这个字符在这个单词里的位置,本次一共找到多少个字符,因此可以定义如下:

struct node

{

  int left;

  int right;

  int found;

  int depth;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值