浅谈Trie

所谓\(Trie\)就是字典树。

何为字典树?想象一下我们平时用拼音查字法在字典树查汉字的时候,一位一位确定这个汉字的拼音从而翻到我们想要看的那一面。

所以\(Trie\)树跟字典一样,是一种逐位检索查找信息的数据结构。

对于\(Trie\)树的每一条边,都代表一个字符,从根走到某一个点就是一个字符串。我们可以在点上保存信息。

这个简单的东西我似乎无法继续扯下去了……总之这是一种十分简单的数据结构但是题目可以出得很毒瘤

插入一个字符串:

void ins(char *s) {
    int len=strlen(s+1),pos=root;
    for(int i=1;i<=len;i++) {
        if(son[pos][s[i]-'a'])pos=son[pos][s[i]-'a'];
        else pos=son[pos][s[i]-'a']=++tot;
	}
    is_a_word[pos]=1;
}

询问一个字符串在字典序中是否存在:

bool find(char *s) {
    int len=strlen(s+1),pos=root;
    for(int i=1;i<=len;i++) {
        if(son[pos][s[i]-'a'])pos=son[pos][s[i]-'a'];
        else return 0;
	}
    return is_a_word[pos];
}
posted @ 2019-02-27 16:53  AKMer  阅读(226)  评论(0编辑  收藏  举报