您的位置:首页 > 理论基础 > 数据结构算法

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

2016-03-30 17:19 288 查看
前缀树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 };
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: