茶艺师学算法打卡13:Trie树
学习笔记
Trie树
又名字典树,用来快速查找字符串的树。
虽然论查找东西,哈希表与红黑树更加在行,字典树是专精处理“有共同前缀的字符串组”,像是搜索引擎的刚输入几个字就会把可能的完整关键字显示出来的能力,背后的设计思路就是基于字典树。
字典树的耗时基本在给一群字符串建树, 。
当这树建好后,查找仅需 ,这是经典的用空间换时间思想的应用。
这里再细说一下建树的过程,其画面就是像是收拾散落在地面的一堆线:先找到这些线的线头,线头与线头叠在一起,剩下的线才能理顺。
找线头,可以类比为处理一组字符串里的“公共前缀”,如图所示:
树的节点只存一个字符,线指向下一个节点(字符)。这样的节点可以有两种实现方式:
- 如果是纯英文字母,那么每个节点可以直接是长度为26的数组
- 更优雅的做法是,每个节点是一个map
// 实现1
type node struct {
child [26]*node
// 这里可以加额外的字段,用于存额外信息
}
// 实现2
type node struct {
child map[uint8]*node
// 这里可以加额外的字段,用于存额外信息
}