- 1、本文档共50页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
论文内容 一、树的分治算法 两种常见的形式 两种常见的形式 两种常见的形式 两种常见的形式 效率分析 【例一】树中点对统计 树中点对统计 树中点对统计 时间复杂度分析 二、路径剖分算法 轻重边路径剖分 【例二】 Query On a Tree Ⅳ 路径剖分算法 路径剖分与树的分治的联系 路径剖分与树的分治的联系 Query On a Tree Ⅳ Query On a Tree Ⅳ Query On a Tree Ⅳ Query On a Tree Ⅳ Query On a Tree Ⅳ Query On a Tree Ⅳ Query On a Tree Ⅳ Query On a Tree Ⅳ Query On a Tree Ⅳ Query On a Tree Ⅳ Query On a Tree Ⅳ 时间复杂度分析 三、树的分治算法的进一步探讨 如何改进基于边的分治的时间复杂度 如何改进基于边的分治的时间复杂度 如何改进基于边的分治的时间复杂度 如何改进基于边的分治的时间复杂度 使用基于边的分治解决上题 使用基于边的分治解决上题 时间复杂度分析 总结 算法的常数 算法的常数 算法的常数 树的重心 … 该点的儿子到某个黑点路径的最大长度 链的头结点到某个黑点路径的最大长度 这正是我们前面已经维护了的量MaxL 一个点向下至某个黑色结点的路径 链的头结点 我们可以使用堆来维护一个点向下至某个黑色结点的路径长度集合 O(1) 询问操作: 我们使用堆来存贮每条链的最优结果 修改操作: 修改一个点最多影响O(logN)条链,对于每条链我们需要修改堆和线段树,O(logN) O(1) O(log2N) 路径剖分 进一步的分析 基于链的分治 AC 基于点的分治 删除一个点后树的个数太多,加大了设计高效算法的难度 基于边的分治 删除一条边后仅有两棵树 最坏的时间复杂度限制了该算法的应用 改进! … 改变选择边的方法? X 改变树的结构! 无论选择哪条边,结果都是一样的 回想上题,题目所关注的对象是两个黑点之间的距离,这就提醒我们可以在不影响树中黑色结点之间的距离的前提下加入白色结点 通过对每个结点到其儿子的路径中加入了白色结点,使之成为了类似线段树的结构。 叶节点为N的线段树共有2N个结点,所以含有N个结点的树转化后所得的新树最多包含2N个结点。 每个点的度至多为3 定理: 如果一棵包含N个结点的树中每个点的度均不大于D,那么存在一条边,使得分出的两棵子树的结点个数在[N/(D+1),N*D/(D+1)]。 改进后的算法最坏情况下递归深度为 O(LogN) 一条路径: 1.过中心边 2.在一颗子树内 1.过中心边 递归处理 记录两个根结点到其子树内某个黑色结点的路径的最大长度 最优路径 修改O(logN) 询问O(1) 询问操作: 对每颗树都记录其两个子树的最优值 修改操作: 一个点最多属于O(logN)棵树,对于每棵树我们需要修改堆,O(logN) O(1) O(log2N) 我们达到了与使用路径剖分同阶的时间复杂度。 算法更加简单 1.算法的常数: 基于链的分治 基于点的分治 基于边的分治 2.基于链的分治可以用来维护路径上的点(边)。如果维护的对象是路径的长度,基于点(边)的分治算法的能力更强。 这几个算法各有所长,需要我们根据具体情况,灵活运用,以最佳的方式解决题目。 3.与基于点的分治比较,基于边的分治在设计高效算法的思考难度上明显小于前者。 1.在路径剖分算法中,链的长度和链的个数是相互制约的,因此路径剖分算法在实际运行中是很快的。 2.为了改进基于边的分治的最坏复杂度,我们将一个结点个数为N的树改造成了一个结点个数为2N的新树,自然增加了常数。 测试环境: Intel? Core?2 Duo T7250 2.00GHz,1GB 编译器:Visual C++ 2008 , Release 模式 2.13s 2.28s 1.78s 1.17s N=100000 M=100000 5.73s 5.79s 3.80s 2.35s N=100000 M=500000 未改进的 基于边的分治 基于边的分治 基于点的分治 基于链的分治 测试环境: Intel? Core?2 Duo T7250 2.00GHz,1GB 编译器:Visual C+
文档评论(0)