字典树学习与使用
来源:互联网 发布:东风41知乎 编辑:程序博客网 时间:2024/06/06 03:26
动物统计加强版
时间限制:3000 ms | 内存限制:150000 KB
难度:4
- 描述
- 在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单。科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的ACMer来帮忙。
- 输入
- 第一行输入动物名字的数量N(1<= N <= 4000000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。
- 输出
- 输出这些动物中最多的动物的名字与数量,并用空格隔开(数据保证最多的动物不会出现两种以上)。
- 样例输入
10boarpigsheepgazellesheepsheepalpacaalpacamarmotmole
- 样例输出
sheep 3
- 来源
- [陈玉 张云聪]原创
- 上传者
- 陈玉
字典树:
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字
符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。
它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
参考图(如下):count与max的比较,count记录的是每一个子串出现的次数,然后进行比较,方便理解就用字母
代替key,程序中是 k=s[i] - 'a',将k的值通过asccii码,将字母转化为数字0到25
#include<stdio.h>#include<string.h>#include<algorithm>struct node{ node *next[26]; //指向下一个节点,为什么是26个因为每一层字典数最多从'a' 到 'z' int count; //记录个数 node(){ memset(next,0,sizeof(next)); count=0; }};int max=0;char ret[20];//新建一个对象node *root = new node();int k;void insert(char *s){ //插入新的字符串 node *p = root; //每次都要从头开始寻找 int len = strlen(s); for (int i=0;i<len;i++){ k=s[i]-'a'; if(p->next[k]==NULL){ p->next[k]=new node(); } //如果存在则将指针后移,如果不存在新建然后将指针后移 p=p->next[k]; } p->count++; if(p->count>max){ max = p->count; strcpy(ret,s); }}int main(){ int n; scanf("%d",&n); char s[20]; for (int i=0;i<n;i++){ scanf("%s",s); //传入输入的字符串 insert(s); } //输出max和ret printf("%s %d\n",ret,max);}
阅读全文
0 0
- 字典树学习与使用
- 【C#学习】-- 哈希表与字典
- 稀疏表示与字典学习
- 稀疏表示与字典学习
- 字典学习与稀疏表示
- OC学习--字典的使用
- 字典树学习
- 字典树学习材料
- 字典树学习
- 学习 字典树
- 字典树学习
- 字典树学习
- 字典树学习小结
- 字典树学习总结
- 字典树 学习笔记
- 哈夫曼树与字典树
- Trie Tree (字典树)的简单使用 与 模板。
- GZS与古英文字典(字典树)
- django添加新的adnim时报错:django Cannot add or update a child row: a foreign key constraint fails (`mxonlin
- springboot 执行定时任务
- IDEA破解 2017 IDEA license server 激活(可用)
- C#读写文件时出现占用的解决办法
- adb操作指令
- 字典树学习与使用
- Spring Boot 集成MyBatis
- makeObjectsPerformSelector 方法的用法
- 用PHP的PDO方法操作MySQL数据库方法(查询 更新 删除)
- 修改数据库密码
- Fiori学习笔记
- c++经验和规范
- Mongodb复杂查询语句
- python 中字典对象按照 value 排序