- C23huangminzhe's blog
字典树(trie)
- 2024-11-12 20:18:33 @
作用
需要按字典序(或特定规律)存或运算一堆元素时,可以用这个来优化。这个树就像查字典一样。
示例
这个是找前缀的字典树
#52. 「一本通 2.3 例 2」The XOR Largest Pair
这个是在插入时对比的字典树
实现
存整棵树,第一个是单词个数乘单词最长长度 [1][2],第二个是单词里字符的范围 [3](比如 个字母或 个数字)。
存树中第 个组合是否为一个单词()或这个单词有几个()。
存现在树已经建到第几个节点了。
以下代码是一个存小写字母的字典树以及其的插入函数。
int trie[N][26],word[N],tot;
void insert(string s){
int u = 0;
for (int i = 0;i < s.size();i++){
int c = s[i] - 'a';
if (!trie[u][c]) trie[u][c] = ++tot;
u = trie[u][c];
}
word[u]++;
}
消耗
空间
时间
插入():[2:3]。
查找(某个单词是否在树中)():[2:4]。