- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高级数据结构汪一宁 清华大学基本数据结构易于实现功能简单,效率一般优先考虑使用简单数据结构来完成一道试题。星际争霸 (经典试题)给出一个无向图,有N个点M条边,N, M = 100,000支持两种操作删除图中的一条边询问两个顶点是否可达操作总数=100,000知识准备:并查集维护分离集合的合并与查询时间复杂度合并和查询两个集合:O(alpha(n))注意事项按秩合并路径压缩解题思路并查集并不支持分离集合的操作解决方案:逆向思维!1009 of Tianjin Online Contest, 2012一个序列有一个左指针和一个右指针,要求维护以下操作将某个指针向左或者向右移动在某个指针的左侧或者右侧插入一个元素在某个指针的左侧或者右侧删除一个元素将两个指针之间的元素反转解题思路使用最简单的方法解决问题思考:所有的操作都和两个指针的位置相关。合理使用STL库STL库中的重要容器Vector, Queue, Deque, Stack, Priority QueueMap, Set, Multimap, Multiset线段树线段树结构为区间[1, n]中的每个元素分配一个叶节点针对相邻的两个节点,产生一个上层节点如此做直到某一层只有一个包含整个区间的节点为止。线段树:建树过程BuildTree(p, b, e):Create a new node NIf b e:N.left = BuildTree(p1, b, (b+e)1);N.right = BuildTree((p1)+1, ((b+e)1)+1, e)线段树:节点数据记录某一个节点代表一个区间(b, e)上的数据记录。如果b=e,则这个点是叶子结点;否则,这个点有且仅有两个孩子。节点数据向上更新型,例如区间上所有元素的和,最小值,等等向下更新型,例如该区间是否被反转,线段树:访问机制Visit(p, b, e):Update DownwardIf b == p.b and e == p.e: do the visitElse:If b = p.left.e: Visit(p1, b, MIN(p.left.e, e))If e = p.right.b: Visit((p1)+1, MAX(b, p.left.b), e)Update Upward线段树:适用范围一个区间上的统计信息可以通过其两个子区间上的信息合并得到。对一个区间上所有元素的操作可以分解成对其两个子区间上元素分别的操作。回顾前述试题修改不允许插入或者删除元素,但是可以修改任何一个位置的元素可以将任何一段区间中的元素反转要求查询任何一段区间中元素的和思考哪些数据需要“向上”维护?哪些数据需要“向下”维护?USACO hotel有N间房间空着,M头奶牛前来入住每一头奶牛希望订到连续d间房间如果没有这样的连续d间房间,这头奶牛放弃入住否则,分配编号最小的满足条件的连续d间房间给这头奶牛N, M = 50,000解题思路哪些向上更新的数据需要被维护?区间中空闲房间总数?哪些向下更新的数据需要被维护?该区间是否全部被预订怎样才能够找出连续的d间空闲房间?区间左端空闲房间数区间右端空闲房间数彩球统计 (原创)有N个彩球排成一列,每个球的颜色是1~M中的一种。有Q次询问,每次询问一个区间[a,b]中有多少种不同颜色的球N, M, Q = 100,000解题思路线段树能够维护“区间中的颜色数目”这一数据么?解题思路 (cont’d)离线询问试题将询问区间按照左端点排序只维护每种颜色的第一个球先用链表把每一种颜色的球串起来。随着询问区间向右移动,在链表上移动指针。使用线段树来回答询问区间中有多少个每种颜色的第一个球平衡树二叉搜索树一颗中序遍历是升序的二叉树平衡二叉树采用某种机制控制二叉树的高度严格平衡:AVL, 红黑树,SBT均摊平衡:Splay期望平衡:Treap关键操作——旋转Treap介绍每个节点存储一个随机的“优先值”结构:键值构成二叉搜索树,优先值构成堆优势:旋转方式只有两种,插入删除简单劣势:需要多维护一个数据常数较其他平衡树大Splay介绍核心思想:任何操作之后(或之前),将一个节点旋转至根节点。优势:思想简单,容易掌握可以实现一些特殊的统计功能劣势:4种旋转,略麻烦仅保证均摊时间复杂度,一次操作可能耗时很长,树结构也可能很不好。数列维护(NOI2005)维护一个数列,支持以下操作:插入,删除,翻转查询区间内的元素之和查询区间内的最大元素解题思路Splay怎样在旋转的过程中维护子树的信息?怎样取出一个区间?
文档评论(0)