trie树结构
来源:互联网 发布:知礼仪行后感的读后感 编辑:程序博客网 时间:2024/05/17 03:04
Trie树就是字符树,其核心思想就是空间换时间。
举个简单的例子。
给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。
这题当然可以用hash来,但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词,我要询问它的前缀是否出现过。这样hash就不好搞了,而用trie还是很简单。
现在回到例子中,如果我们用最傻的方法,对于每一个单词,我们都要去查找它前面的单词中是否有它。那么这个算法的复杂度就是O(n^2)。显然对于100000的范围难以接受。现在我们换个思路想。假设我要查询的单词是abcd,那么在他前面的单词中,以b,c,d,f之类开头的我显然不必考虑。而只要找以a开头的中是否存在abcd就可以了。同样的,在以a开头中的单词中,我们只要考虑以b作为第二个字母的……这样一个树的模型就渐渐清晰了……
招聘网站评价
假设有b,abc,abd,bcd,abcd,efg,hii这6个单词,我们构建的树就是这样的。
i
对于每一个节点,从根遍历到他的过程就是一个单词,如果这个节点被标记为红色,就表示这个单词存在,否则不存在。
那么,对于一个单词,我只要顺着他从跟走到对应的节点,再看这个节点是否被标记为红色就可以知道它是否出现过了。把这个节点标记为红色,就相当于插入了这个单词。
这样一来我们询问和插入可以一起完成,所用时间仅仅为单词长度,在这一个样例,便是10。
我们可以看到,trie树每一层的节点数是26^i级别的。所以为了节省空间。我们用动态链表,或者用数组来模拟动态。空间的花费,不会超过单词数×单词长度。
You are to find all the hat’s words in a dictionary.
Only one case.
aahathathatwordhzieeword
ahathatword
- 树结构--Trie树
- trie树结构
- Trie树结构与实现
- Trie结构
- Trie 数结构
- HDU1251 trie(结构体)
- hihoCoder1014 Trie树 [Trie]
- 树和树结构(3) : Trie树(代码原创)
- ┎结构之美┒之Trie树
- 高级树形结构之字典树(Trie)
- TRIE树
- TRIE树
- TRIE树
- trie 树
- Trie树
- Trie树
- Trie树
- Trie树
- XFile网格的应用(1) (转载)
- const用法
- 开源游戏引擎及游戏 (转载)
- MATLAB基本的使用方法
- 这样的夜
- trie树结构
- Color Flow UML 分析
- 关于IIS的问题!
- 我是SB
- Java路径问题最终解决方案
- C#多线程 Invoke方法的使用收藏
- Floyd algorithm
- Notes on Programming in C--C语言编程笔记(二)
- Ibatis + Spring 操作 Blob 详解