数据结构——trie树(字典树)

Posted flydoggie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——trie树(字典树)相关的知识,希望对你有一定的参考价值。

又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

模板题:

技术图片

 

 代码

#include<iostream>
using namespace std;

const int N = 200010;
//用来存放子节点,idx是已经使用的结点下标
int son[N][26],idx;
//用于标记是否有单词
int cnt[N];

void insert(char str[]){
    //p == 0即是根节点,也是空节点
    int p = 0;
    for(int i = 0;str[i];i++){
        int t = str[i] - a;
        //判断是否有当前字符的子节点
        if(!son[p][t]) son[p][t] = ++ idx;
        
        p = son[p][t];
    }
    //标记字符串末尾
    cnt[p]++;
}

int query(char str[]){
    int p = 0;
    for(int i = 0;str[i]; i ++){
        int t = str[i] - a;
        if(!son[p][t]) return 0;
        p = son[p][t];
    }
    if(cnt[p]) return cnt[p];
}

int main(){
    int n;
    cin>>n;
    char ch;
    char str[N];
    for(int i = 0 ; i < n ;i ++){
        cin>>ch>>str;
        if(ch == I){
            insert(str);
        }
        if(ch == Q){
            cout<<query(str)<<endl;
        }
    }
    
    
    
    return 0;
}

 

以上是关于数据结构——trie树(字典树)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——trie树(字典树)

Trie树(字典树)

数据结构~trie树(字典树)

01字典树

208. 实现 Trie (前缀树)-字典树

天天数据结构和算法PHP中trie数据结构的使用场景和代码实例