字典树
来源:互联网 发布:兄贵pat it 编辑:程序博客网 时间:2024/05/01 08:53
字典树 (解析加模版)
分类: ACM2012-07-06 12:24 204人阅读 评论(0) 收藏 举报
字典树:又叫trie树,单词查找树。是一种树形结构,典型的用于统计。经常用于统计一片文章当中出现确定的单词的次数,它的优点就在于:省略了相同前缀的比较。以下图为例:用单词carbohy,carhure,english,englnee来构造的trie树。
当你用trie树来查找一个单词的时候,就像查字典是一样的,先查第一个单词,然后查第二个,在树中我们用深度遍历就可以实现。当然你不一定存储字母也可以存储数字什么的,根据具体情况来选择。
trie树结构定义:
- typedef struct node
- {
- int cnt; //用来经过此结点以上前缀的单词数
- node* next[26]; //这里只包含小写字母,故是26个
- } Trie;
接着就是构造trie树了,根据提供的单词构造trie树
过程如下:(跟树的构造类似)
- void Creat_Trie(char*str){
- int len,i,j;
- len=strlen(str);
- Trie *p=&root,*q;
- for( i=0; i<len; i++){
- int id=str[i]-'a'; //在next数组中找到对应位
- if( p->next[id]==NULL){
- q=new Trie; //如果该字符不存在,动态分配节点
- q->cnt=1;
- for( j=0; j<26; j++)
- q->next[j]=NULL;
- p->next[id]=q;
- p=p->next[id];
- }
- else{
- p->next[id]->cnt++;
- p=p->next[id];
- }
- }
- }
构造trie树之后查找,这也是trie树重要的功能。
- int Find_Trie(char*str){
- int len,i,j,id;
- len=strlen(str);
- Trie*p=&root;
- for( i=0; i<len; i++){
- id=str[i]-'a';
- p=p->next[id];
- if( p==NULL)
- return 0;
- }
- return p->cnt;
题目:入门--统计难题hdu
0 0
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树。。
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- hdu oj 2544 最短路(最短路径)
- nyoj 107
- 键盘快捷键
- 使用BlockingQueue进行多线程间的异步通信
- Java 同步与锁
- 字典树
- 进程&线程&死锁
- JSP页面跳转的常见方式
- STL源码分析--向量(vector)的实现
- 手动扩栈#pragma comment(linker, "/STACK:1024000000,1024000000")
- 对设计模式六大原则的理解
- 图形图像库集合
- 高性能web服务器的秘密核武器
- 【TOJ 2871】Magic Bean【DP+矩阵快速幂】