码迷,mamicode.com
首页 > 其他好文 > 详细

字典树

时间:2018-11-09 22:54:39      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:原理   写法   递归   错误   code   arch   mat   struct   https   

字典树入门

原理

将一个长度为\(n\)的单词,维护在一个\(n\)层的树中,每层存对应的字母;判断时,一层一层地判断,最后一层注意要还要判断这个节点是非曾作为为一个单词的终点(如存有abcd,判断abc)

实现

数据结构

struct nod{
    int nxt[26];
    bool hav;
}t[MAXN];
int tot;

结构体nod为字典树节点,nod.nxt表示该节点的儿子们所在的节点,nod.hav表示该节点是非层作为为一个单词的终点,MAXN表示这个字典树最大层数,tot用于分配新节点编号

加入

void add(string s){
    int len=s.size(),rot=0;
    for(int i=0;i<len;i++){
        if(t[rot].nxt[s[i]-‘a‘]!=0) //有无该节点
            rot=t[rot].nxt[s[i]-‘a‘];   //有该节点,则跳至该节点,重定向
        else{
            t[rot].nxt[s[i]-‘a‘]=++tot; //无节点,分配新节点
            rot=tot;
        }
    }
    t[rot].hav=1;
}

非递归写法,有点抽象,可以结合上文数据结构理解

查询

bool search(string s){
    int len=s.size(),rot=0;
    for(int i=0;i<len;i++){
        if(t[rot].nxt[s[i]-‘a‘]!=0)
            rot=t[rot].nxt[s[i]-‘a‘];
        else
            return false;
    }
    return t[rot].hav;
}

一层一层地找,最后注意判断是非为终点

字典树

标签:原理   写法   递归   错误   code   arch   mat   struct   https   

原文地址:https://www.cnblogs.com/santiego/p/9937439.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!