- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Link-CutTrees
Link-Cut Trees 是由Sleator 和Tarjan 发明的解决这类动态树问题的一种数据结构[1]. 这个数据结
构可以在均摊O(logn) 的时间内实现上述动态树问题的每个操作.
下面我们先介绍Link-Cut Trees 的概念, 然后介绍它的支持各种操作, 最后对它的复杂度进行分析.
一:Link-CutTrees 的定义
access:访问
[英][ˈækses][美][ˈæksɛs]
preferred:优先
[英][prɪfəd][美][prɪfɜ:d]
path:路径
[英][pɑ:θ][美][pæθ,pɑθ]
auxiliary:辅助
[英][ɔ:gˈzɪliəri][美][ɔɡˈzɪljəri,-ˈzɪləri]
什么是link-cuttrees?
link-cut trees是把树分解成多个树链,并且把每条树链都分别储存到一颗splay中。当
我们需要对一颗树上的路径进行操作的时候,利用splay进行分离与合并,把这条树上的路
径储存到同一棵splay中,然后再操作这颗splay就行了。
我英文不太好…下面我们把上述的英文概念换成中文的…
Preferred Child:偏好子节点。
Preferred Edge:偏好边。
Preferred Pat :偏好路径。
Auxiliary Tree:辅助树。
Pat Parent:路径父节点。
我们来举个例子说明一下这些概念,上图是一颗以1为根节点的树。1的Preferred Child
为2,2的Preferred Child为4,3、4、5、6没有Preferred Child。
与树链剖分相同的是,link-cut trees也是把一颗树变成了多个线型的链,但是link-cut
trees采用了splay tree来储存这些链,方便后面的合并与拆分。
在这颗splay 中,离根节点近的边被储存到splay的左边,离根节点较远的被储存到右边,splay
tree是以deep作为关键字排序的。
那么如何储存多条树链呢?
我们称splay 的根节点的父亲为路径父节点,这个节点是这条树链中deep最小的点在原树
的父节点。
右边的这颗树就是link-cuttrees。
如果把右边的link-cuttrees抽象一下变成这样
把一条树链当成一个点,把轻边当成树上的边,我们可以的得到一颗虚树,很明显,这颗虚
树无论宽度还是高度都没有最开始的树大,既使是一颗很大的树也可以压缩成一颗很小的虚
树。当然 如果虚树的结构不再发生改变,在每一个节点都用线型的数据结构进行加速的话
…
就能达到 级的效率(而且相当快),这个是树链剖分的原理,你可以把树链剖分理解成
log
静态 ,不过说起 的原理 我觉得这点不是最主要的 (事实上
link-cuttree link-cuttree … link-cut
总是能在 级的时间内把需要查询的区间构造成主链,这点是最重要的)。
tree log
二:基本操作
一、access (访问)
ACCESS 操作是Link-CutTrees 的所有操作的基础. 假设调用了过程ACCESS(v), 那么
从点v 到根结点的路径就成为一条新的Preferred Path.
如果执行了一个点的access操作,那么从根节点到这个点路径上的所有的点就会变为
偏好孩子,所有的边就会变为偏好边,这条路径也就变为一条偏好路径,同时,从根节点到
该节点的这条路径就被储存到了 link-cut trees根节点的splay中。
那我们要怎么做呢?涉及到splay的分离与合并岂不是很麻烦。
假设访问到X节点,我们先把X伸展到它所在的splay的根,然后断开它的右孩子,因为被
访问到的点是没有偏好孩子的。这样X所在的splay就是一条从根的方向延伸过来的一条树
链(当然,它并不完整)然后我们访问X所在的树链的路径父节点,并把它旋转到它所在
splay的根,然后断开它的右孩子,并连接到X所在的树链,然后不断重复这一过程,最终,
我们就会得到一条从根节点延伸到X 的一条树链。
我们模拟一下过程。
比如现在树的模样是这个样子的。
它所对应的link-cuttree是这样的
以access(2)为
先把2旋转到树链2的根,把2的右孩子设为0。
然后处理它的Pat
您可能关注的文档
最近下载
- 一年级数学思维年龄问题.docx VIP
- 2026版《治安管理处罚法》解读.pptx
- 【MOOC答案】《电磁场与电磁波理论》(南京邮电大学)章节作业慕课答案.docx
- 一种用于LNG船常规试航及气体试航的一体化试航的方法.pdf VIP
- 切开缝合结扎止血.pptx VIP
- 传感器技术基础与应用实训(第3版)答案项目单元4.pdf VIP
- 四年级上册语文知识梳理(豪华精细版)-第三单元小结|人教(部编版).doc VIP
- 最新苏教版五年级上册数学期末考试试卷(10套).docx VIP
- 传感器技术基础与应用实训(第3版)答案项目单元11.pdf VIP
- 2024年高中语文统编版选择性必修下册单元导语、学习提示、单元任务、写作指导汇总.docx VIP
原创力文档


文档评论(0)