下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Tre树(字典树)数据结构详解(图解)及模板了解这个数据结构之前我们需要了解它能被用来做什么字典树又称单词查找树,Tire树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。说到底,字典树就是用来查询公共前缀的一个工具,延伸的话可以用来进行串匹配,词频统计等,也是学AC自动机的前置技能.所谓的字典树,其实就是一个n叉树我们对于每个字母,如果有公共前缀的,我们找到它的前缀,在后面不同的部分建立不同的子节点,
2、比如说apple,appear,appxy三个不同的单词,公共前缀为app,所以建树如下:那么问题来了,单词的第一个字母不止A啊,应该怎么办?其实不难,学过二分图的应该能想出来:设置一个超级源点,我们在第一个字母上面再设一个超级源点,这样计算的时候不考虑他就行了,这样第一层就可以和下面的子节点一样建立了如图所示(ps:此图有误,apply应该为appxy)又是喜(sang)闻(xin)乐(bing)见(kuang)的代码环节了个人由于ACM的原因,就只放数组实现的板子了,(反正懂原理了指针版的也挺简单的)由于数组不能动态开内存,所以我们就得采用模拟的形式了,这里其实用了一点并查集的思想,各位客
3、官看下图由于不能动态分配内存,同时字典树又是比较耗费空间的,所以我们的内存分配尽可能大,开一个二维数组iremaxn26然后tireij=k代表编号为i的节点的第j个孩子是编号为k的节点,这里的j通常指当前位的字母A-Z然后关于编号,我们这里的存树方式是:如果要生成新节点,则编号+,否则编号不动,所以如上图,APPLY的对应编号应该为1,2,3,4,10,11;同时有:tire1A-A=2;tire2P-A=3;tire3P-A=10;tire10X-A=11;tire11Y-A=0;这样,查找的时候利用并查集的思想不断向下查找即可代码如下/*头文件可以忽略,只是一些常用的宏*/#includ
4、e#include#include#include#include#include#include#include#include#include#include#define_mem(a,b)memset(a,0,(b+3)2)#definefori(a)for(inti=0;ia;i+)#defineforj(a)for(intj=0;ja;j+)#defineifor(a)for(inti=1;i=a;i+)#defineifor(a)for(inti=1;i=a;i+)#definejfor(a)for(intj=1;j=a;j+)#definemem(a,b)memset(a,b,s
5、izeof(a)#defineINfreopen(in.txt,r,stdin)#defineOUTfreopen(out.txt,w,stdout)#defineIOdoios:sync_with_stdio(false);cin.tie(0);cout.tie(0);while(0)#definemp(a,b)make_pair(a,b);usingnamespacestd;typedeflonglongll;constintmaxn=1e5;constintINF=0 x3f3f3f3f;constintinf=0 x3f;constdoubleEPS=1e-7;constdoubleP
6、i=acos(-1);constintMOD=1e9+7;intTiremaxn26;charstr2000005;boolvmaxn;strings;intcnt=1;建树,每输入一个单词到s里面就调用_insert()就好void_insert()introot=0;fori(s.size()intnext=si-A;if(!Tirerootnext)Tirerootnext=+cnt;root=Tirerootnext;vroot=true;/这里用了一个标记数组表示该点存在一个完整的单词比如说app和apple在最后一个p的位置就会被标记true查找最长公共前缀int_find(charbufs,intleng)introot=0;intcns=0;intnext;intres=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省汕头市高中政治 1.1 人民民主专政 人民当家作主教案 新人教版必修2
- 八年级道德与法治下册 第四单元 崇尚法治精神 第七课 尊重自由平等 第2框《自由平等的追求》教案 新人教版
- 2024-2025学年高中物理 第2章 电路 第5节 电功率教案 粤教版选修3-1
- 江苏省丹徒区世业实验学校八年级地理上册 2.3 黄河教案 新人教版
- 2024-2025学年八年级地理上册 3.3水资源教案 (新版)新人教版
- 2024-2025学年高中生物 专题1 1.1 DNA重组技术的基本工具教案 新人教版选修3
- 高考地理一轮复习第十八章资源安全与国家安全第三节海洋空间资源开发与国家安全课件
- 钻井泥浆材料承包合同(2篇)
- 作文方与圆课件
- 五年级数学第二学期沪教版-期末试卷(沪版)
- 农业灌溉装置市场环境与对策分析
- 新疆乌鲁木齐市第十一中学2024-2025学年八年级上学期期中道德与法治试卷
- 2024年江西省高考地理真题(原卷版)
- 部编版小学五年级上册道法课程纲要(知识清单)
- 经济法学-计分作业一(第1-4章权重25%)-国开-参考资料
- 山东省临沂市(2024年-2025年小学四年级语文)人教版期中考试(上学期)试卷及答案
- 护士2024思想汇报5篇
- Unit+10+Lesson+1+How+Closely+Connected+Are+We 高中英语北师大版(2019)选择性必修第四册
- ω-3脂肪酸处方药物在老年疾病中的应用专家共识(2024版)解读
- 《一起来分类》(教学设计)-2024-2025学年一年级上册数学北师大版
- 肺胀(慢性阻塞性肺病)中医优势病种诊疗方案
评论
0/150
提交评论