网站大量收购独家精品文档,联系QQ:2885784924

字典树堆优先队列.pptx

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

ACM春季培训主讲人:郭昊课件制作:彭文文哈尔滨理工大学ACM集训队字典树kmp

一、字典树

例1字典树我们需要将一个单词列表建出一棵单词查找树,满足:1.根结点不包含字母,除根结点外的每个都仅含一个大写英文字母;2.从根结点到某一结点,路径上经过的字母依次连起来所构成的字母序列,称为该结点对应的单词。单词列表中的每个词,都是该单词查找树某个结点所对应的单词;3.在满足上述条件下,该单词查找树的结点数最少。统计出该单词查找树的结点数目。

例1字典树输入格式

若干行单词,描述单词列表。输出格式

一个数字,表示结点数目。样例输入

A

AN

ASP

AS

ASC

ASCII

BAS

BASIC样例输出

13

建树过程RootABASICNSPCII步骤1:新建根节点,且根结点不包含字母。步骤2:向字典树,插入单词“A”,Root无A孩子节点,新建节点A步骤3:且A字母是单词“A”的尾字母,故特殊标记A步骤3:插入“AN”单词,查找Root包含A孩子节点,故向A查找是否包含N孩子节点A步骤4:A节点不包含N孩子节点,故新建N节点,由于N是单词尾节点,故特殊标记N步骤5:插入单词“ASP”,Root包含A节点,故检查A节点是否包含S节点,不包含则新建步骤6:新建S节点之后,查找S节点是否包含P节点,不包含,则新建,由于P节点是尾节点,故特殊标记P步骤7:插入单词“AS”,查找Root包含A节点,继续向下查找,A节点包含S节点,由于S节点是尾节点,故特殊标记S步骤8:插入单词“ASC”,查找Root包含A节点,继续向下查找,A节点包含S节点,继续查找C节点,没有则新建C节点C步骤9:由于C节点是单词的尾节点,故特殊标记步骤10:插入单词“ASCII”,检查到字典树第三层发现C节点无I孩子节点,故新建步骤10:第四层I节点无I孩子节点,故新建I节点,由于是尾位点,故特殊标记I步骤11:插入单词”BAS”,Root节点无B孩子节点,故新建步骤12:依次,新建A节点,新建S节点,由于S节点尾节点,故特殊标记S步骤13:插入单词“BASIC”,依次查找插入,尾节点特殊标记C总结:每次插入一个单词,从根节点开始插入,单词的第i个字母就位于第i层,且单词的第i-1个字母一定是第i个字母的孩子节点总结:并非所有的尾节点都需要特殊标记,看实际需求,需要什么,就特殊处理什么

例1字典树分析题目对这种数据结构的限制内容较多,又要满足“该单词查找树的结点数最少”,故贪心即可。即,对于树中的每个结点,它的包含相同字母的所有儿子都应当合并在一起。按照以上所有条件模拟出这棵树,统计一下其结点个数即可。

字典树字典树(又叫单词查找树、Trie树,TrieTree),构造简单,并能很好地处理和“串”相关的检索(Retrieval)问题。字典树很好地利用了串的公共前缀,节约了存储空间。字典树的插入(Insert)、删除(Delete)和查找(Find)都非常简单,用一个一重循环即可,即第i次循环找到前i个字母所对应的子树,然后进行相应的操作。

节约空间例如在现实生活中,我们需要存储很多URL(UniformResoureLocator:统一资源定位器)是WWW页的地址。大多数以“”开头,若以字典树存储,则50亿个“”只需要10个存储单位即可,而非50亿*10节省了很多空间

快速检索字典树能很好地利用串的公共前缀,节约了存储空间。同时用它来检索同样有着比较高的效率。字典树实现“串”排序(课下学习)字典树在减少无效转移方面的应用(课下学习)

例2查找生词给出N个单词组成的熟词表,以及一篇全用小写英文书写的文章,请你按最早出现的顺序写出所有不在熟词表中的生词。输入格式

第一行,一个数字N;接着N行,每行一个熟词表中的单词;接着一行,一篇文章。输出格式

若干行,每行一个生词。

例2查找生词样例输入

5

one

dollar

hundred

thousand

it

itcostsonethousandonehundredandoneyuan.样例输出

costs

and

yuan

例2查找生词分析:①枚举:先将所有熟词用一个数组记录下来。接着枚举文章中的每个单词,对于对应的单词,枚举熟词表,检查它是否已经存在,不存在则输出并且将它存到熟词表的末尾。反复操作即可。

-----最简单,时间复杂度较大。②hash:对于所有的熟词先建立映射关系。再枚举文章中的每个单词,看看是否已经被哈希了,没有则输出并为其进行哈希。

----时间复杂度低,但需要较好的hash函数。

例2查找生词分析:③对于所有熟词先建出字母树,对于所有对应单词为熟词的结点进行标记。接

您可能关注的文档

文档评论(0)

183****7931 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档