树:Trie树

Trie树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。

典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

补充下,trie也可以用于做基于词典的敏感词检测。还有就是适合路由时ip地址的最长前缀匹配。


下面我们有and,as,at,cn,com这些关键词,那么如何构建trie树呢?


从上面的图中,我们或多或少的可以发现一些好玩的特性。


      第一:根节点不包含字符,除根节点外的每一个子节点都包含一个字符。


      第二:从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串。


      第三:每个单词的公共前缀作为一个字符节点保存。


 


二:使用范围


     既然学Trie树,我们肯定要知道这玩意是用来干嘛的。


     第一:词频统计。


            可能有人要说了,词频统计简单啊,一个hash或者一个堆就可以打完收工,但问题来了,如果内存有限呢?还能这么


             玩吗?所以这里我们就可以用trie树来压缩下空间,因为公共前缀都是用一个节点保存的。


     第二: 前缀匹配


            就拿上面的图来说吧,如果我想获取所有以"a"开头的字符串,从图中可以很明显的看到是:and,as,at,如果不用trie树,


            你该怎么做呢?很显然朴素的做法时间复杂度为O(N2) ,那么用Trie树就不一样了,它可以做到h,h为你检索单词的长度,


            可以说这是秒杀的效果。


参考:

http://www.cnblogs.com/huangxincheng/archive/2012/11/25/2788268.html

http://baike.baidu.com/link?url=FJNOLOOtjDh2sY3g5hypJgZhMhX3vKpctD3DJVuJ_zAoZwrvxShwgwjhx1iI3mKJxJOLMAxW5Ea9FfhM-ieQ9G2Guw3BpBUjJ5ycWNA3GuQ2j4I2snNY8tl0OVmDwcf-jERl_KVknEBjGxqe81g07q



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值