字典树
来源:互联网 发布:手机电脑桌面软件2016 编辑:程序博客网 时间:2024/05/21 22:33
今天下午没事,看看了博客,然后呢又学会了一个字典树算法,做了一道入门题:
感觉挺好的,算法学习就是要循序渐进,每天进步一点点,日积月累才会有收获。
现在介绍下字典树:字典树是一种树形结构,它的特点是:
(1)根节点是空的,没有字符。
(2)每个节点都有26个子节点,a,b,c。。。。z.所以把它叫字典树,按字典序排列。
(3)它的详细用途可以咨询百度百科,在acm里面用字典树来查询 从根节点到某一节点
以这段字符为前缀的字符串出现的次数。(注意:一个字符的前缀就是本身)
下面附上代码:
http://acm.hdu.edu.cn/showproblem.php?pid=1251杭电1251
#include <iostream>
using namespace std;
struct Node
{
int n;
Node * str[26];
};
void NewNode(Node **Q)
{
(*Q)=(Node *)malloc(sizeof(Node));
(*Q)->n=1;
for(int i=0;i<26;i++)
{
(*Q)->str[i]=NULL;
}
}
void Insert(Node * T,char s[])
{
int len=strlen(s);
Node *k=T;
for(int i=0;i<len;i++)
{
if(k->str[s[i]-'a']!=NULL)
{
k=k->str[s[i]-'a'];
k->n=k->n+1;
}
else
{
NewNode(&(k->str[s[i]-'a']));
k=k->str[s[i]-'a'];
}
}
}
int find(Node *T,char s[])
{
int len=strlen(s);
Node *k=T;
for(int i=0;i<len;i++)
{
if(k->str[s[i]-'a']!=NULL)
{
k=k->str[s[i]-'a'];
}
else
{
return 0;
}
}
return k->n;
}
int main()
{
char s[20];
Node *q=NULL;
NewNode(&q);
while(gets(s))
{
if(s[0]==0)
break;
Insert(q,s);
}
while(cin>>str)
{
int num=find(q,str);
cout<<num<<endl;
}
return 0;
}
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树。。
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- OCP 1Z0 052 69
- GCC inline assmble与 assmble语言的关系
- linux下 mysql的安装查看等操作
- 《那些来自华尔街的赚钱之道》 ---每天读一点英文
- 你是一颗永远的流星
- 字典树
- WPF 进程通信、无标题栏的窗口移动、工作区尺寸
- Swift中使用typealias定义一个闭包closure
- google_javascript_engine-v8-资料收集
- 使用 GNU GCC 和 GDB 开发调试应用程序
- 使用OpenCV中cvFindContour函数检测轮廓的心得
- 舌尖上的世界杯
- Baidu百度搜索引擎登录网站 - Blog透视镜
- Simple-Spring-Memcached 使用简介