字典树

字典树

怎么存储一篇文章里面出现的所有的单词,需要将所有单词存下来吗?字典树给出的答案是no。

朴素的字典树

字典树,英文名 trie。顾名思义,就是一个像字典一样的树。
看看OIwiki的这张图:

对于一个单词比如caab,就表示从1->4->8->13这样一条路径。我们可以使用13来表示这个单词。也就是从根节点1到13这条路径。
看看代码:

struct Trie{
    int tree[N][65],cnt;

    int get_num(char x){
        if(x>='A'&&x<='Z') return x-'A';
        else if(x>='a'&&x<='z') return x-'a'+26;
        else  return x-'0'+52;
    }

    void _insert(const char *s,int len){
        int p = 0;
        for(int i = 0;i < len;i++){
            int c = get_num(s[i]);
            if(!tree[p][c]) tree[p][c] = ++cnt;
            p = tree[p][c];
        }
    }

    int _find(const char *s,int len){
        int p = 0;
        for(int i = 0;i < len;i++){
            int c = get_num(s[i]);
            if(!tree[p][c]) return 0;
            p = tree[p][c];
        }
        return p;
    }

    void init(){
        for(int i = 0;i <= cnt;i++){
            for(int j = 0;j < 65;j++){
                tree[i][j] = 0;
            }
        }
        cnt = 0;
    }
}trie;

字典树的基本处理非常简单,看十分钟就会了。

posted @ 2022-08-05 21:51  Paranoid5  阅读(19)  评论(0编辑  收藏  举报