字典树

来源:互联网 发布:unity3d 角色动画 编辑:程序博客网 时间:2024/05/16 10:51

字典树又叫做单词查找树,是一种树形结构,是一种哈希树的变种,典型应用于统计,排序,和保存大量的字符串,所以常被搜索引擎用于文本词的统计。它的优点是利用字符串的公共前缀来减少查询时间,最大限度的减少无谓的字符串比较,查询效率比哈希树高。

性质

它有三个基本性质

根节点不包含字符除了根节点外的每一个节点都包含一个字符
从根节点到某一个节点,路径上的字符连接起来,为该节点对应的字符串
每个节点的所有子节点不相同

字典树的构建

题目:给1000000个长度不超过10的单词,对于每一个单词,我们要判断他出现过没有,如果出现了。求第几次出现在第几个位置。

假设我要查询的单词是abcd,那么在它前面的单词中,以b,c,d,f之类开头的不必要考虑,只要找a开头的是否包含bcd就可以了。同理,只要考虑以b作为第二个字母的,一次次缩小范围和提高针对性。假设有b,abc,abd,bcd,abcd,efg,hi这6六个单词,则构建的树

这里写图片描述

对于每一个节点,从根遍历到他的过程就是一个单词,如果这个节点标记为红色,就表示这个节点的单词存在,否则不存在。
那么,对于一个单词,我们只要顺着他的根走到对应的节点,就可以看出这个单词是否存在,所得时间是单词的长度级别。
已知到由n个小写字母构成的平均长度是10的单词,判断是否存在某个子串是另一个串的前缀子串。下面对比三个方法:

原创粉丝点击