【暑假】[实用数据结构]前缀树 Trie
2016-03-30 17:19
288 查看
前缀树Trie
Trie可理解为一个能够快速插入与查询的集合,无论是插入还是查询所需时间都为O(m)
模板如下:
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 };
相关文章推荐
- 【暑假】[实用数据结构]KMP
- netmap分析(3)-原理分析之数据结构关系
- Java数据结构——双端链表
- 《数据结构》 栈代码操作集合
- 数据结构(java语言描述)串与数组——文件加解密
- 常见的数据结构和算法
- 【数据结构】链表与实现分析
- 数据结构--Dijkstra算法最清楚的讲解
- 数据结构(树链剖分):BZOJ 4034: [HAOI2015]T2
- Java数据结构——链表-单链表
- 数据结构
- Intellij IDEA快捷键整理
- Java数据结构——解析算术表达式
- 统计文章中单词的字数并按照出现的频率排序(treeSet)
- 数据结构之队列的实现
- 数据结构(五)--最小生成树(普利姆算法、克鲁斯卡尔算法)
- 数据结构(四)--B树、B-树、B+树、B*树
- 数据结构线性表的两种存储形式顺序表和单链表的比较
- 数据结构之栈的实现
- 链表的所有操作(总结)