10. 什么是Trie字典树

10.1 什么是Trie字典树

Tip:本博客内容是通过学习慕课网bobo老师视频做的笔记总结,不用于任何商业用途,只用于帮助更多技术爱好者。

(1) 背景

发生在微软的一个真实案例:

在一个古老的手持设备中实现一个通讯录功能,但是当时的手持设备的芯片运算能力是非常低的,所以他们发现当通讯录中记录的条目非常多的时候,搜索通讯录中的内容是非常慢的。但是这个问题是被微软的一个实习生解决了。其实他解决的方式非常简单,他就是使用了这种Trie数据结构来解决的。

 

10. 什么是Trie字典树

 

(2) 什么是Trie树

[1] Trie是一个多叉树

[2] 字典和Trie树对比:

10. 什么是Trie字典树

[3] Trie多叉树结构示意图:

10. 什么是Trie字典树

[4] Trie树数据结构的初级版本

英文中只有26个字母,所以每个节点有26个指向下一个节点的指针。

10. 什么是Trie字典树

但是深入思考会发现,每个节点的指针数固定死了26个指针,那么它的指针数就不是动态的,那么使用场景就会被限制的很死,所以这个初级版本的数据结构可以进化。

[5] Trie树数据结构的中级版本

第一:每个节点有若干个指向下一个节点的指针;

第二:考虑不同场景,不同的使用场景,里面使用了一个映射的数据结构代替Node结构作为指针定义,所以Map可以包含任意char字符。

10. 什么是Trie字典树

[6] Trie树数据结构的中级进化版本

去掉char c定义,因为每个节点去到下一个指针节点的时候,就已经知道了节点的值了

10. 什么是Trie字典树

[7] Trie树数据结构的最终版本

第一:变成蓝色的节点表示是单词的结尾;

第二:Node数据结构增加了一个isWord字段来标识此节点是否是单词的结尾。

For example: cat表示一个单词 | dog表示一个单词 | deer表示一个单词 | pan表示一个单词 | panda表示一个单词

10. 什么是Trie字典树

 

如果感兴趣的童鞋,可以观看我下一篇博客:10.2 Trie字典树基础(Trie代码Demo)