- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IOI2004 国家集训队论文 贝小辉
浅析树的划分问题
东北育才学校 贝小辉
【摘要】
树的最大-最小划分问题可以表述为如下形式:给定一棵 n 个节点的树以及每个节点
的一个非负权值,要求将这棵树划分为k 棵子树,使得子树中所有节点权值和的最小值最大。
将原问题转化为对于给定下界,划分最多子树的问题,并通过对新问题的解决结合二分法来
解决原问题是可行的,但是算法的总复杂度要依赖于节点权值的范 。本文接下来介绍了一
个时间复杂度不依赖于节点权值范 的算法,随后通过对算法的描述、正确性的证明来进一
步探讨算法的特点,并介绍了算法的一些扩展,最后总结了两个算法各自的特点。
【关键字】
问题转化,割,移动,上方
【正文】
树的划分问题是图论中的一类范 非常广泛的问题,这类题目的大意就是将给定的一
棵树划分为若干棵子树,使其能够满足一定的条件或是使得某个特定的函数达到最值。如今,
这类问题已被扩展出了各式各样的问题,并在很多领域都有着很广泛的应用。本文所要着重
探讨的,是其中一种被称为最大-最小划分的问题。
一、 问题的提出
草莓(NOI2003 Day 2-2 berry test6~test9 )
题目大意:
给出一片草莓中每个草莓的重量以及它们的连接情况。定义:sum(i)表示第i 块草莓田
中所有草莓重量的和 (1= i = k ),x = min { sum(i) | 1= i =k } 。你的任务就是要把一块草
莓田分割成k 块, 分割方案需要满足如下的条件:
·每一块中的草莓必然是直接或者间接的和其他草莓相连接的;
·这种分割方案所对应的x 尽可能的大。
最后输出你的分割方案和结果。
这是一道提交答案式的题目,其中第6 个数据至第 9 个数据所给的图是一棵树,若不
考虑具体的数据情况,我们可以将原问题抽象成如下问题:给定一棵树以及树中每个顶点的
一个非负权值,将树划分为k 棵子树,定义:sum(i)表示第i 棵子树中所有节点权值的和,x
= min { sum(i) | 1= i =k } ,请求出x 的最大值并输出此时的划分方案。
简单的说,就是将一棵树划分成 k 棵子树,使得其中权值和最小的那棵子树最大,我
们把它称作最大-最小划分问题。
二、 算法1:转化问题
第 1 页 共 7 页
IOI2004 国家集训队论文 贝小辉
1.转化为新问题
初次面对这个问题,或许我们会觉得无从下手,动态规划,贪心等经典算法在这里似
乎都不适用,重要的是,我们不知道这个最小值是多少,令我们的思维过程遇到了很大困难。
这时,我们不妨先考虑这样一个问题:
对于一个确定的下界,最多可将树划分为多少棵子树使得每棵子树的权值和都不小于
此下界?
2 .解决新问题
如果可以解决这个问题,我们便可以再通过二分法找到原问题的解。而事实上,新问
题的解决只需要一个以贪心思想为基础的扫描算法。
扫描算法:
按照深度由大至小的顺序扫描整棵树,对于扫描到的每
个节点,计算以此节点为根的完全子树的权值和,若权值和
大于等于给定下界,则将以这个节点为根的子树划分出来,
并将其从原树中删去。直至整棵树所剩部分的权值和小于下
界,将剩余部分归入最后划分出去的子树中。最终所得到的
即是一种划分数目最多的最优划分。
算法正确性的证明比较简单,这里略去了。容易看出,算法的时间复杂度是线性的,
已经到达了理论的下界。接下来的任务就很简单了:我们可以通过二分法来找到最大的下界
x 使得划分的最大子树数目不小于k,x 既为原问题的解。
3 .小结
我们终于找到了一种解决问题的途径,但问题是否已经被完美的解决了呢?当我们分
这个算法总的时间复杂度是时候,我们发现它是依赖于节点权值的范 的。更加确切的说,
如果每个节点权值的上界是c,那么算法的时间复杂度就是O( n log(nc) ) 。虽然在大多数情
况下,程序的实际运行效率是
文档评论(0)