算法合集之《序的应用》.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
序的应用 长沙市雅礼中学 龙凡 基本的序 序的应用 使得一个问题得到直接解决(大多是交互式问题) 应用序,挖掘题目的深层性质,使得问题得到转化。 树的构造 树的构造 树的构造 树的构造 树的构造 不能漏填,也不能冲突。 每个格子的左边,都恰好有t(i)个格子填入了自己的子孙。 不能超出1…n的边界范围。 树的构造 树的构造 已知一个一维线形结构 最开始所有位置为空。根据DFS序列,每次插入一个元素j,到第t(j)+1个空位置 求出最终状态 借助线段树或树状数组等数据结构可以将问题在O(N log N)时间复杂度内解决,空间复杂度为O(N) 小结 通过对题目特点的分析,借助DFS序列的性质,对原问题进行转化。 合理的使用数据结构,最终完整解决问题。 士兵排队 士兵排队 士兵排队 直接模拟的最坏时间复杂度为O(N2),效率十分低下。 使用平衡二叉树,可以得到一个O(N log (N+M))的算法。但平衡二叉树时间复杂度常数系数比较大,而且较难实现。 不妨抛开纯粹模拟的思路,另辟蹊径。 士兵排队 士兵排队 注意到上面的例子中1因为2的插入而向右移动了一格。 我们要避免连锁移动,就是希望通过一个规则,使得士兵1能够直接插入到3号位置。我们可以先插入士兵2而不是士兵1,然后再将士兵1插入到第2个空位置中。 具体地说,定义:newgoto(L,S)命令,将S士兵插入到第L个空位置中。 士兵排队 士兵排队 士兵排队 如果我们可以将Goto序列的(L,S)数对,高效合理的改变顺序,转化为NewGoto序列,则模拟NewGoto命令就是上题最后转化成的一维线性填数问题。 士兵排队 士兵排队 考虑利用两条基本性质,直接构造拓扑序。 用并查集存储每个不相干的部分及单独构造(假设每个块互相不影响)的NewGoto序列。 当两个块因为插入而要合并时,顺便将两个块的NewGoto序列合并。 最后将所有未合并的部分的序列,根据位置在后的块序列上靠前的原则,合并完整的NewGoto序列。 士兵排队 当士兵A直接插入到一个已经属于某一个块B的位置中时,就将与A相关的NewGoto命令插入B块的NewGoto命令序列首。 当士兵A的插入引起了一个或者多个块相连时,则根据位置在后的块序列上靠前的原则来对他们进行合并。 用一个链表来存储单个部分的NewGoto序列,因为他只涉及插入到序列首,和首尾相接合并两个操作 士兵排队 士兵排队 根据Goto序列构造NewGoto序列。转化成前一题最终转化成的一维线性填数问题。 使用线段树等工具在O(N log (N+M))时间内解决转化后问题。 总时间复杂度O(N log (N+M)),空间复杂度O(N+M)。 总结 通过适当的分析,应用不同的序,将两个截然不同的问题转化成了同一个问题。 提示我们在平时做题时要充分挖掘题目的本质。 同时大胆的尝试,去实现自己的想法。 * * 4 12 31 24 43 25 34 4 12 24 25 31 34 43 大小序 1 2 3 4 5 6 7 1 2 4 6 7 5 3 DFS序 1 2 4 7 5 3 6 拓扑序 序是数据之间隐藏的一种基本关系: 问题描述:一棵含有n个节点的树,所有的节点依次编号为1, 2, 3, …, n,每个节点i有一个权值s(i),也分别是1,2,3,…,n,并且各不相同。对于编号为v的节点,定义t(v)为v的后代中所有权值小于s(v)的节点个数。 现在给出这棵树及t(1),t(2),…,t(n),请你求出这棵树每个节点的权值。 已知T 构造S 4 2 6 5 7 8 1 9 3 S 4 9 7 8 2 1 3 5 6 4 2 6 5 7 8 1 9 3 T 3 1 3 1 0 0 0 0 0 为了理解题目我们来看一个实例: 我们来考虑这个树的DFS序列: 4 2 6 5 7 8 1 9 3 3 3 1 0 1 0 0 0 0 1(3)2(1)4(0)5(0)7(0)3(3)6(1)8(0)9(0) DFS序列的重要性质: 由于权值分别是1,2,3…,n。我们不妨认为从左到右有N个格子,如果从左数第I个格子填入了节点J,则S(j)=i。 4 2 5 1 7 8 6 3 9 4 2 6 5 7 8 1 9 3 3 1 3 1 0 0 0 0 0 4 2 6 5 7 8 1 9 3 4 9 7 8 2 1 3 5 6 一组可行解 左数第4个位置 左数第7个位置 如果我们按照DFS的顺序,依次填写节点。对于每个节点j的左边,则必须预留下至少t(j)个空格给权值比他小的子孙。 看看“填”的时候的具体要求 依次按DFS序填写每个节

文档评论(0)

智慧书苑 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档