- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACM字典树详解选编
ACM程序设计
杭州电子科技大学 刘春英
acm@hdu.edu.cn
集训队讲座(二)
字典树(Trie)
导引问题 (HDOJ-1251)
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
初步分析(Brute-force)
Question:
如果单词表容量很大-查找效率? -低
更有效率的方法:字典树
假设单词表容量为M,需要统计的前缀数量为N,单词的平均长度为L,则常规算法的时间复杂度是?
什么是字典树?
字典树:又称为Trie,是一种用于快速检索的多叉树结构。Trie把要查找的关键词看作一个字符序列,并根据构成关键词字符的先后顺序构造用于检索的树结构;一棵m度的Trie树或者为空,或者由m棵m度的Trie树构成。
特别地:和二叉查找树不同,在Trie树中,每个结点上并非存储一个元素。
Trie的图示
特点:
利用串的公共前缀-节约内存
根结点不包含任何字母
其余结点仅包含一个字母(非元素)
每个结点的子节点包含字母不同
Trie的查找(最主要的操作)
(1)在trie树上进行检索总是始于根结点。
(2)取得要查找关键词的第一个字母,并根据该字母选择对应的子树并转到该子树继续进行检索。
(3)在(5)在某个结点处,关相应的子树上,取得要查找关键词的第二个字母,并进一步选择对应的子树进行检索。
(4) ...
键词的所有字母已被取出,则读取附在该结点上的信息,即完成查找。
Trie的数据结构定义
struct dictree
{
dictree *child[26];
int n; //根据需要变化
};
dictree *root;
查找效率分析
在trie树中查找一个关键字的时间和树中包含的结点数无关,而取决于组成关键字的字符数。(对比:二叉查找树的查找时间和树中的结点数有关O(log2n)。)
如果要查找的关键字可以分解成字符序列且不是很长,利用trie树查找速度优于二叉查找树。
若关键字长度最大是5,则利用trie树,利用5次比较可以从265可能的关键字中检索出指定的关键字。而利用二叉查找树至少要进行log2265=23.5次比较。
示例—(HDOJ-1075)
What Are You Talking About
题目描述:Ignatius is so lucky that he met a Martian yesterday. But he didnt know the language the Martians use. The Martian gives him a history book of Mars and a dictionary when it leaves. Now Ignatius want to translate the history book into English. Can you help him?
样本数据(HDOJ-1075)
Sample Input
START
from fiwo
hello difh
mars riwosf
earth fnnvk
like fiiwj
END
START
difh, im fiwo riwosf.
i fiiwj fnnvk!
END
Sample Output
hello, im from mars.
i like earth!
Input Description:
All the words are in the lowercase, and each word will contain at most 10 characters, and each line will contain at most 3000 characters.
题目分析(HDOJ-1075)
特点?数据量大
主要任务?查找单词
解决方法?字典树
字典树结构(除指针)?单词信息(英文)
额外提醒?字符串操作的熟练应用
其他问题?NO~
相关练习
HDOJ-1075 What Are You Talking About
HDOJ-1251 统计难题
HDOJ-1298 T9
HDOJ-1800 Flying to the Mars
ZOJ-1109 Language of FatMouse
附:参考源码(HDOJ-1251)
#include stdio.h
#include string.h
#include stdlib.h
struct dictree
{
您可能关注的文档
- 选矿厂标准化2.1危险源辨识与评价要求汇编.doc
- ABB自控-08_EMS_CN_ABB2014ChannalPartnerConference选编.pptx
- AB门介绍3.20选编.ppt
- 选矿厂仪表施工方案汇编.doc
- 逍遥游新版汇编.pptx
- accesss第7章窗体选编.pptx
- 选课经验指导汇编.pptx
- 选煤流程计算汇编.doc
- 选煤技术培养方案20150306汇编.doc
- Access数据库七个对象选编.ppt
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)