算法合集之《树的枚举》汇.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法合集之《树的枚举》汇

江苏省常州高级中学 李源;树,在计算机算法中是非常重要的非线形结构。即使撇开树的其他广泛应用不说,单单对树本身的形态进行思考与研究,也是一个十分有趣,且具有挑战性的过程;常规的搜索加判重的做法:;树的大小定义;现在回到枚举有向树的问题上来:对于深度为d,结点数为n 的所有形态的有向树,根据上面的比较规则,可以把它们从大到小排成一个序列。举d=3,n=6为例,这个序列是:;进一步地,对于任意的n和d ,在相应序列中的第一棵树和最后一棵树的形态是容易确定的,如下:;现在问题就转化为,根据上述的大小定义,能否找到一种变换的规则,使根据这种规则,可以从最小的一棵树开始,连续地、不遗漏不重复地生成接下来的所有不同形态的树?;首先,从树的序列中的一个形态变换到另一个形态,是一个变小的过程。 在这个变换过程中,至少有一棵子树被变小了,变小的过程是通过夺走它的一个子结点实现的(我们用一个虚线框来表示被变小的子树)。;它们会适当地变大,然而由于它们在有向树大小比较的过程中的地位比先前被变小的那棵子树要低,于是,总的说来,整个有向树就被变小了。;过程I 寻找被删去结点;过程I 寻找被删去结点;过程I 算法;在对树的大小定义中,深度比结点数更优先。所以,在选择待删除结点时,应该尽量选择删除后不影响子树深度的结点优先处理。 因此,在找到A结点后,必须沿其父亲结点进行回溯,直到当前结点以下的子树的深度不因删除A而改变为止(在上图中直到D结点),在回溯的过程中,如果经过某一结点,它还有另一个子结点(比如上图中的C,它还有另一个子结点E),那么就舍弃原来找到的结点A,把E定为待删除的结点。;过程II 将被删的结点重组到后面的子树中;过程II 算法 删除结点后子树深度不变;过程II 算法 删除结点后子树深度变小;完整的有根树枚举算法大致可以如下构成: 1 读入d,n 2 找第一棵树(最大的) 3 while 未全部生成 do {这步判断可以用计数算法得到的总数来判断,也可以先求得最小的一棵树用来判断} 4 找到待删除的结点target; 5 删除target; 6 对树进行变换; {包括上??的两种情况: 子树深度改变, 以及深度未改变} 7 end of while ;小结;类似地, 再看一个有向树变换的例子:;以上介绍的算法可以实现给定深度d,结点数n,按照从大到小的顺序变换生成所有形态的有向树。算法中涉及的树的复制,以及遍历等,复杂度均为O(n),并且在树的生成过程中完全没有重复生成,所以整个算法的耗时主要与不同形态树的总数有关。;该算法最直接的应用是“无根树”问题。下表可以作为算法时间复杂度的直观参考。

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档