【笔记】Trie树

Part 1 简介

Trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。

字典树用边来代表字母,而从根结点到树上某一结点的路径就代表了一个字符串。

Part 2 代码实现

/*
 * @Author: thyzzs
 * @Date: 2019-11-13 15:27:35
 * @LastEditTime: 2019-11-13 16:48:08
 */
struct Trie {
    int nex[1000010][26];
    int num[1000010];
    int pos = 1;

    void Insert(char str[]) {
        int p = 0;
        for (register int i = 0; str[i]; i++) {
            int n = str[i] - 'a';
            if (nex[p][n] == 0)
                nex[p][n] = pos++;
            p = nex[p][n];
            num[p]++;
        }
    }

    int Find(char str[]) {
        int p = 0;
        for (register int i = 0; str[i]; i++) {
            int n = str[i] - 'a';
            if (nex[p][n] == 0) 
                return 0;
            p = nex[p][n];
        }
        return num[p];
    }
}

参考:

Trie - 维基百科,自由的百科全书


  转载请注明: thyzzs' Blog 【笔记】Trie树

 上一篇
【笔记】对顶堆 【笔记】对顶堆
Part 1 简介对顶堆是一种可以 $O(\log n)$ 维护在线第K小值的数据结构 其实就是一个大根堆和一个小根堆啦 Part 2 例题Luogu P1168 中位数 Luogu P3871 [TJOI2010]中位数 Part 3
2019-11-13
下一篇 
【笔记】Knuth-Morris-Pratt 算法 【笔记】Knuth-Morris-Pratt 算法
Part 1 简介模式串匹配,就是给定一个需要处理的文本串(理论上应该很长)和一个需要在文本串中搜索的模式串(理论上长度应该远小于文本串),查询在该文本串中,给出的模式串的出现有无、次数、位置等。 Part 2 前缀函数给定一个长度为 $
2019-11-13
  目录