- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法合集之﹝分治算法在树的路径问题中的应用﹞算法合集之﹝分治算法在树的路径问题中的应用﹞算法合集之﹝分治算法在树的路径问题中的应用﹞
分治算法
在树的路径问题中的应用
长沙市雅礼中学 漆子超
树的路径问题
论文内容
一、树的分治算法
树的分治的两种常见形式:
基于点的分治
基于边的分治
二、树的路径剖分算法
三、树的分治算法的进一步探讨
如何改进基于边的分治的时间复杂度
归纳为基于链的分治
一、树的分治算法
树的分治算法是分治思想在树型结构上的体现。
两种常见的形式
基于点的分治
两种常见的形式
基于点的分治
1.选取一个点将无根树转为有根树
2.递归处理每一颗以根结点的儿子为根的子树
两种常见的形式
基于边的分治
两种常见的形式
基于边的分治
1.在树中选取一条边
2. 将原有的树分成两棵不相交的树,递归处理。
效率分析
可以证明在基于点的分治中,如果每次都选取树的重心,那么至多递归 O(LogN)次。
基于边的分治最坏情况下递归次数为O(N)。
【例一】树中点对统计
给定一棵N个结点的带权树。
定义dist(u,v)=u,v两点间的路径长度,路径的长度定义为路径上所有边的权和。
给定一个K,如果对于不同的两个结点a,b,如果满足dist(a,b)≤K,则称(a,b)为合法点对。
求合法点对个数。
N≤10000,K≤109
一条路径:
1.过根节点
2.在一颗子树内
树中点对统计
记D(i) 表示节点i到根节点路径的长度
Answer = 满足 D(i)+D(j)≤K 的(i,j)个数 i,j属
于不同的子树
O(NlogN)
树中点对统计
时间复杂度分析
每层的时间复杂度不超过O(NlogN)
最多递归O(logN)次
O(Nlog2N)
二、路径剖分算法
轻重边路径剖分
将树中的边分为两类:轻边和重边。
记Size(U)表示以U为根的子树的结点个数。
令V为U的儿子中Size(V)最大的一个,那么我们称边(U,V)为重边,其余边为轻边。
轻重边路径剖分
我们称某条路径为重路径,当且仅当它全部由重边组成。那么对于每个点到根的路径上都不超过O(logN)条轻边和O(logN)条重路径。
我们称某条路径为重路径,当且仅当它全部由重边组成。那么对于每个点到根的路径上都不超过O(logN)条轻边和O(logN)条重路径。
路径剖分算法常用来高效的维护点到根的路径
Spoj的Qtree,Astar2008的黑白树…
【例二】 Query On a Tree Ⅳ
给定一棵包含N个结点的树,每个节点要么是黑色,要么是白色。要求模拟两种操作:
1)改变某个结点的颜色。
2)询问最远的两个黑色结点之间的距离。
数据范围:
N≤100000,边权绝对值不超过1000
此题出自2007年浙江省选,但此题中树的边权可能为负,无法使用括号序列。
另寻他法
路径剖分算法
这道题的算法似乎与路径剖分毫无关系,那么我们是否能用路径剖分算法解决此题呢?
路径剖分与树的分治的联系
一棵树及其剖分
路径剖分与树的分治的联系
路径剖分每次删除了一条链,所以路径剖分算法可以看做是基于链的分治
按照点到根结点路径上的轻边个数分层摆放。
递归树!
Query On a Tree Ⅳ
将路径剖分理解成基于链的分治后,我们可以用类似基于点的分治的方法将路径分类。
1.与链有重合部分
2.与链没有重合部分
Query On a Tree Ⅳ
…
我们的目标就是要求出满足与此链的重合部分在[1,N]的路径的最大长度。
我们可以用线段树解决这个问题。
Query On a Tree Ⅳ
记D(i)表示第i个结点至子树内某个黑色结点的路径中长度的最大值。Dist(i,j)表示链上的第i个点到第j个点的距离。
Query On a Tree Ⅳ
对于线段树中的一个区间[L,R],我们需要记录下面三个量:
L
R
L
R
Query On a Tree Ⅳ
L
R
L
R
L
R
设区间[L,R]的结点编号为P,Lc,Rc分别表示P的左右两个儿子,区间[L,Mid]和[Mid+1,R]。我们可以得到如下转移:
Query On a Tree Ⅳ
L
R
L
R
L
R
设区间[L,R]的结点编号为P,Lc,Rc分别表示P的左右两个儿子,区间[L,Mid]和[Mid+1,R]。我们可以得到如下转移:
Query On a Tree Ⅳ
Opt
Opt
L
R
Opt
L
R
设区间[L,R]的
文档评论(0)