算法合集之《数据结构的联合》.ppt

算法合集之《数据结构的联合》.ppt

ID:51660771

大小:422.00 KB

页数:28页

时间:2020-03-28

算法合集之《数据结构的联合》.ppt_第1页
算法合集之《数据结构的联合》.ppt_第2页
算法合集之《数据结构的联合》.ppt_第3页
算法合集之《数据结构的联合》.ppt_第4页
算法合集之《数据结构的联合》.ppt_第5页
资源描述:

《算法合集之《数据结构的联合》.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、数据结构的联合长沙市雅礼中学黄刚问题1顽皮的猴子问题描述:有N(1<=N<=30000)只顽皮的猴子挂在树上。每只猴子都有两只手,编号为1的猴子的尾巴挂在树枝上,其他的猴子的尾巴都被别的猴子的某只手抓着。每一时刻,都有且只有一只猴子的某只手松开,从而可能会有一些猴子掉落至地面。输入一开始猴子们的情况和每一时刻松开手的情况,输出每只猴子落地的时间。问题1顽皮的猴子分析:我们把猴子抽象成点,猴子的手抽象成边,题目就转化成一个连通图不断去边,求每个点离开编号为1的点所在的连通分量的时间。235411233问题1顽皮的猴子分析:把删边的顺序倒过来,问题转化为从一个无边的图不断添边,求每个点进入编

2、号为1的点所在的连通分量的时间。我们自然的想到用并查集维护。235411233问题1顽皮的猴子一个问题:上面的算法中,当并查集中某个集合加入编号为1的点所在的集合时,需要把这个集合中的所有元素的时间记录一下。但是并查集并不支持“枚举集合元素”的功能,怎么办?35Time[3]:=2Time[5]:=21?135问题1顽皮的猴子一个问题:给每个并查集分配一个链表,记录这个集合中所有的元素。这样,能够方便的枚举集合中的元素。而在并查集合并的时候,链表也能够很快的合并。问题解决。351Nil135Nil135数据结构的并联问题1中,在并查集不支持枚举元素操作的时候,引入一个新的数据结构链表来辅

3、助,是数据结构的一种联合方式:并联,这种联合成功的解决了问题。定义:我们将用多个数据结构共同对同一数据集合统计的方法叫做数据结构的并联。数据结构的并联为了方便起见,先把一个数据结构支持的操作分为两类:询问操作:顾名思义,就是获取该数据结构记录的某些信息的操作,而并没有改动数据结构里的元素及其相互关系。维护操作:跟询问操作相反,改动数据结构中元素或元素的相互关系的操作,称为维护操作。数据结构的并联并联的优点:并联而成的新数据结构,支持组成它的数据结构的所有操作。并联的缺点:维护操作的时间复杂度存在瓶颈,是所有组成它的数据结构的维护操作复杂度的和。问题2DynamicRankings问题描述

4、:给定一个长度为N(1<=N<=50000)的正整数序列A(1<=A[i]<=MaxLongint),模拟以下操作:1、改值操作C(i,j):将A[i]的值改为j2、询问操作Q(i,j,k):程序输出A[i],A[i+1],…,A[j]这j-i+1个数中第k大的数。问题2DynamicRankings例如:N=6A=[3,1,6,5,2,4]C(5,4)[3,1,6,5,2,4][3,1,6,5,2,4][3,1,6,5,4,4]Q(2,5,3)[3,1,6,5,4,4][3,1,6,5,4,4]输出:4C(6,2)Q(3,6,1)[3,1,6,5,4,4][3,1,6,5,4,4][3

5、,1,6,5,4,2][3,1,6,5,4,2]输出:6[3,1,6,5,4,2]问题2DynamicRankings分析:单纯的算法必定会超时,我们需要设计一个对整数序列进行统计的高效数据结构,并且支持改值和查找指定区间中第k大的数。问题过于复杂,先考虑简单一点的情况。问题2DynamicRankings简化情况1:每次询问Q(i,j),要求程序输出A[i],A[i]+1,…,A[j]这j-i+1个数中最大的数。解决方式:只需用一颗线段树维护A序列,改值,询问操作都是O(LogN)的时间复杂度,完全满足题意。问题2DynamicRankings简化情况2:每次询问Q(k),要求程序输出

6、A[1],A[2],…,A[N]这N个数中,第k大的数。解决方式:用一颗平衡二叉树维护A序列即可,同样的,改值,询问操作也只需要O(LogN)的时间。问题2DynamicRankings问题的嵌套:现在,两个很简单的问题“嵌套”在了一起,成了一个棘手的问题,使得原先的方法都失效了。既然问题能够“嵌套”,那我们原先解决问题的数据结构是不是也能够“嵌套”呢?问题2DynamicRankings数据结构的嵌套:考虑一颗这样的线段树:它维护整个A序列,而它的每个节点V,设表示的区间为[i,j],拥有一颗平衡二叉树,维护A[i],A[i+1],…,A[j]。为下文方便起见,暂时称之为“嵌套树”。问

7、题2DynamicRankingsN=4的一颗嵌套树:容易证明空间复杂度是O(NLogN)。[1,4]A3A4A2A1[3,4]A3A4[1,2]A2A1[1,1]A1[2,2]A2[3,3]A3[4,4]A4问题2DynamicRankings改值操作C(i,j):在线段树中将包含A[i]的节点找出来,再在相应的平衡树中更新。例如N=4,A=[1,4,2,3]改值C(3,1)时间复杂度O(Log2N)。[1,4]3421[3,4]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。