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

Trie

时间:2019-07-23 13:17:47      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:strong   说明   turn   初始化   操作   结束   style   insert   sea   

传说中的字典树,来学习一下

实现字符串快速检索的多叉树结构

基本操作过程

1.初始化

一个空Trie仅包含一个根节点,该点的字符指针为空

2.插入

当需要插入一个字符串S时,令一个指针P起初指向根节点,然后依次扫描S中的每个字符c

1)若P的c字符指针指向一个已经存在的节点Q,则令P=Q;

2)若P的c字符指针为空,则新建一个节点Q,令P的c字符指针指向Q,然后令P=Q;

当S中的字符扫描完毕,在当前节点P上标记它是一个字符串的末尾//?

3.检索

当需要检索一个字符串S在Trie中是否存在,我们令一个指针P起初指向根节点,然后依次扫描S中的每个字符c:

1)若P的c字符指针指向一个已经存在的节点Q,则令P=Q;

2)若P的c字符指针为空,说明S没有被插入过,结束检索;

当S的字符扫描完毕,若当前节点P被标记为一个字符串末尾,则说明S在Trie中存在。否则,不存在。

下给出插入检索代码:

int trie[SIZE][26],tot=1;//初始化,假设每个字符都是小写字母
void insert(char *str){//插入
          int len =strlen(str),p=1;
          for(int k=0;k<len;k++){
                int ch=str[k]-a;
                if(trie[p][ch]==0)trie[p][ch]=++tot;
                p=trie[p][ch];
         }
         end[p]=true;
}
bool search(char *str)//检索
{
        int len=strlen(str),p=1;
        for(int k=0;k<len;k++){
            p=trie[p][str[k]-a];
            if(p==0)return false;
        }
        return true;
}

 

 

 

Trie

标签:strong   说明   turn   初始化   操作   结束   style   insert   sea   

原文地址:https://www.cnblogs.com/liulex/p/11230942.html

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