【暑假】[实用数据结构]前缀树 Trie

来源:互联网 发布:淘宝客域名注册 编辑:程序博客网 时间:2024/06/06 02:08
前缀树Trie

 

Trie可理解为一个能够快速插入与查询的集合,无论是插入还是查询所需时间都为O(m)

 

模板如下:

 

 1 const int maxnode = 1000+10; 2 const int sigma_size = 26;  3  4 struct Trie{ 5 int ch[maxnode][sigma_size]; 6 int val[maxnode]; 7 int sz; 8  9   void clear(){ sz=1; memset(ch[0],0,sizeof(ch[0])); }10   int ID(char c){ return c='a'; };11   12   void insert(char* s,int v){ //向Trie中插入 13       int u=0 , n=strlen(s);14       for(int i=0;i<n;i++) { 15           int c=ID(s[i]);16           if(!ch[u][c]){17               memset(ch[sz],0,sizeof(ch[sz])); //初始化子结点组 18               val[sz]=0;        //中间结点val=0 19               ch[u][c]= sz++;  //建立子结点 20         }21         u=ch[u][c];          //往下走 22       }23       val[u]=v;24   }25   26   int find(char *s){     //查找s是否存在 27       int n=strlen(s);28       int u=0;29       for(int i=0;i<n;i++){30           int c=ID(s[i]);31           if(!ch[u][c]) return false;32           u=ch[u][c];33       }34       return val[u];  //是否为尾 35   }36 };

 

0 0
原创粉丝点击