trie树模板
来源:互联网 发布:最新网站地址发布源码 编辑:程序博客网 时间:2024/05/22 14:56
指针实现:
class trie { public: trie* next[26]; int num; //记录前缀的个数 bool value;//标记这里是不是一个单词 trie() { for(int i=0;i<26;i++) next[i]=0; value=0; num=0; } }root; void insert(char* s) { trie *p=&root; int k=0; while(s[k]!='\0') { if(!p->next[s[k]-'a']) p->next[s[k]-'a']=new trie; p=p->next[s[k]-'a']; p->num++; //每访问节点就++1次,多好啊! k++; } p->value=1; //在这里可根据具体题意来加东西 } int find(char *s) { trie* p=&root; int k=0; while(s[k]!='\0'&&p->next[s[k]-'a']) { p=p->next[s[k]-'a']; k++; } if(s[k]=='\0') return p->num; return 0; }
静态数组实现,直接开一个很大的数组:
struct trie{ int ch[maxnode][sigma_size]; int val[maxnode];//附加信息 int sz; trie(){sz=1;memset(ch[0],0,sizeof(ch[0]));} int idx(char c){return c-'a';} void insert(char *s,int v) { int len=strlen(s),u=0; for(int i=0;i<len;i++) { int c=idx(s[i]); if(!ch[u][c]) { memset(ch[sz],0,sizeof(ch[sz])); val[sz]=0; ch[u][c]=sz++; } u=ch[u][c]; } val[u]=v; } bool find(char *s) { int u=0,len=strlen(s),c; for(int i=0;i<len;i++) { c=idx(s[i]); if(!ch[u][c])return false; u=ch[u][c]; } if(!val[u])return false; return true; }};
0 0
- 【模板】Trie树模板
- trie树的模板
- trie树入门(模板)
- trie树模板
- 字典树(trie)模板
- Trie字典树【模板
- Trie树模板
- Trie树模板
- Trie树模板
- 字典树Trie 模板
- Trie树模板
- Trie树模板
- Trie - 字典树 模板
- [模板]Trie树
- Trie树模板
- Trie字典树模板
- 【NOIP模板】 trie树
- 【模板】Trie树
- 三、XML文件解析技术
- SIP框架
- IoC,AOP作用,缺点
- Redis系统学习篇
- 院士教我们如何做科研(转载)
- trie树模板
- 编程中无穷大常量的设定技巧
- 牛人如何搞科研
- 槽函数
- codeforce 370C
- 让Linux内核不再卡死在DHCP请求上
- WCF SOA服务编程
- android layout基本属性值详解
- EL表达式详解