- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
输入输出 输入 每行一次操作,有如下三种: 1 x:表示插入X这个数 2 :表示询问当前最小值 3: 表示删除最小值 输出 对于每个询问最小值操作,输出一行,每行仅一个数,表示当前的最小值。 Spaly操作 情况3 Zig-Zag或Zag-Zig操作: 节点x的父节点y不是根节点,x与y中一个是其父节点的左孩子而另一个是其父节点的右孩子。 Splay操作举例 Splay(1,S) Spaly树基本操作 查找:与二叉排序树查找类似,只是查找结束后要将找到的元素通过Splay操作旋转到根。 插入:用查找过程找到要插入的位置,进行插入。然后将新元素旋转到根。 删除:首先在树中找到要删除的元素,将他转到根节点并删去,这样原来的树就分裂成了两棵树,然后将左子树中拥有最大关键字的那一个元素转到根,由于它是左子树中的最大元素,所以他不存在有儿子,这样只要把原来的右子树作为他的右子树,就重新合并成了一棵树。 可见在Splay树的基本操作中,处处要用到Splay旋转操作! 应用:Pet 宠物收养场提供两种服务:收养被离弃的宠物与让新的主人领养宠物。每个宠物有不相同的特点值。领养人所希望的特点值也不相同。如果领养人/遗弃宠物过多,则当前来的宠物/领养人选择离其特点值最近的(如果有两个特点值与其同样接近,则选择较小的)领养人/宠物,被领养/领养。并且纪录两个特点值的差值。 输入N条请求(X,Y),X=0表示宠物;X=1表示领养人,Y为特征值。 任务是计算所有差值的和。 (N=80000,等待的宠物/领养者数M=10000) 字典树(trie) 当关键字是串的时候,往往用trie。我们的动机是:利用串的公共前缀来节约内存,加快检索速度。 例如,需要保存“computer”和“command”,由于它们的前三个字母是相同的,所以希望它们共享前三个字母,而只有剩下部分才进行分开储存。 例如,需要保存以下8个单词: because before beg beggar belong below day dead Trie的特点 根节点不包含字母,除根节点外每一个节点都仅包含一个英文字母 从根节点到某一节点,路径上经过的字母依次连起来所构成的字母序列,称为该节点对应的单词。 每个节点的所有儿子包含的字母都不相同。 插入和删除的时间均为O(L) L为字符串的长度 应用:最长前缀 给定n个字符串,即基元 给定一个字符串T,即生物体的结构 要找出字符串T由基元构成的前缀,使得该前缀的长度最大 N=100,Len(T)=500000,基元长度L =20 样例 基元:A,AB,BBC,CA,BA T: ABABACABAABCB 最长前缀构成有三种方法 A+BA+BA+CA+BA+AB? AB+AB+A+CA+BA+AB? AB+A+BA+CA+BA+AB? 长度为11 分析 为了尽快的查找到基元,我们把基元构成一个单词树,也叫trie树。如下图为样例的单词树。 该树最多为26叉树,任何单词要么是某个单词的前缀,要么为从根到叶子结点组成的单词。 这样我们只需要O(L)的时间即可查找到某个单词,L为单词的长度。 动态规划 我们设前j个字符已经匹配,考虑前i个字符是否能匹配,主要看从i+1…j组成的字符串是否是单词 因此设f(i)表示前i个字符是否已匹配,若能匹配则为真(用1表示),否则为假(用0表示)。则有: 时间复杂度分析 每次求f(i)需要向前找f(j),i-jL,每移动一次j需要判定word(j+1,i)是否是单词 1=i=len(T),1=i-jL 查找单词时间复杂度为O(L) 因此总时间复杂度为O(len(T)*L2)。 因为T=500000,L=20,因此,5*105*202=2*108 并查集引例 写一个数据结构,支持一下两种操作: 现有若干个队伍, 1、询问两个人是否属于同一个队伍 2、合并两个人所在的队伍 输入样例 第一行 n m 表示有n个人(用1到n表示),在开始时没有两个人是属于同一个队伍。接下来m行,表示m次操作。 每行操作有2种可能: 1 x y 表示询问x和y是不是在同一个队伍 2 x y 合并x和y所在的队伍(如果x和y已经在同一队伍,不做任何操作) 样例 4 5 1 1 3 2 1 3 1 1 3 2 3 4 1 4 1 n=100000 m=100000 NO YES YES 分析 每个队伍实际上是一个集合,两个操作相当于: 1、询问两个元素是否在同一个集合 2、合并两个集合 尝试用树结构表示一个集合 A与B是父子关系表示A与B 在同一个队伍 问题一 如何知道两个节点是否在同一颗树中? 问题二 怎样合并两颗树? 用双亲表示法存储树结构 若两种操作都解决了,如何储存这颗
文档评论(0)