算法合集之《树的枚举》.ppt
《算法合集之《树的枚举》.ppt》由会员分享,可在线阅读,更多相关《算法合集之《树的枚举》.ppt(21页珍藏版)》请在三一办公上搜索。
1、江苏省常州高级中学 李源,树的枚举,树,在计算机算法中是非常重要的非线形结构。即使撇开树的其他广泛应用不说,单单对树本身的形态进行思考与研究,也是一个十分有趣,且具有挑战性的过程,引子,常规的搜索加判重的做法:,枚举算法,下面我们就来看一种不重复地生成所有确定结点数和深度的有向树的构造性算法。,不重复性:树的大小定义,不遗漏性:树的变换算法,树的大小定义,我们对树的“大小”作一个规定,使不同树结构之间的关系有序化。假设当前要比较树A与树B的大小(树A与树B的子树也都要按照下述的大小关系递归地从大到小排序)。比较过程为:,若A的深度大于B,则AB;若A的深度小于B,则AB;若A的结点数小于B,则
2、AB;若A与B的结点数相等,依次讨论A与B的子树:拥有较大子树的树较大。若当前讨论的子树相等,则讨论A与B的下一棵子树。,现在回到枚举有向树的问题上来:对于深度为d,结点数为n 的所有形态的有向树,根据上面的比较规则,可以把它们从大到小排成一个序列。举d=3,n=6为例,这个序列是:,进一步地,对于任意的n和d,在相应序列中的第一棵树和最后一棵树的形态是容易确定的,如下:,现在问题就转化为,根据上述的大小定义,能否找到一种变换的规则,使根据这种规则,可以从最小的一棵树开始,连续地、不遗漏不重复地生成接下来的所有不同形态的树?,首先,从树的序列中的一个形态变换到另一个形态,是一个变小的过程。在这
3、个变换过程中,至少有一棵子树被变小了,变小的过程是通过夺走它的一个子结点实现的(我们用一个虚线框来表示被变小的子树)。,变换过程,它们会适当地变大,然而由于它们在有向树大小比较的过程中的地位比先前被变小的那棵子树要低,于是,总的说来,整个有向树就被变小了。,结点被夺去;,排在它后面的某些子树将会得到这个被夺走的结点,或被重新组合。,过程I 寻找被删去结点,过程II 将被删的结点重组到后面的子树中,过程I 寻找被删去结点,在选择被删去的结点时,其所在子树的变小对于整棵树的影响必须尽量小。使它经过变换后恰好可以成为序列中紧邻它的一棵树而不是跳跃性的变换。所以:,首先,这个被夺取的结点必然为叶结点。
4、,第二,对于并列的若干子树,应当从后向前查找。,过程I 算法,从根出发,在子结点中从后向前找到第一个非叶结点的结点,继续搜索直到到达一个子结点均为叶子的结点为止。,是否可认为该结点的最后一个子结点为待删除结点呢?事实上仍需进一步处理:假如,找到的待删除结点A为其父亲B唯一的子结点,也就意味着如果将A从它的父结点B删除,那么以B为根的那棵子树的深度将会减少1,在对树的大小定义中,深度比结点数更优先。所以,在选择待删除结点时,应该尽量选择删除后不影响子树深度的结点优先处理。因此,在找到A结点后,必须沿其父亲结点进行回溯,直到当前结点以下的子树的深度不因删除A而改变为止(在上图中直到D结点),在回溯
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 树的枚举 算法 枚举
链接地址:https://www.31ppt.com/p-6596883.html