如何将不平衡树转换为(平衡)生成树?假设我有一棵树(在不同的节点有不同的(不一定是不同的)数量的孩子)。我想操纵这棵树,使它成为一棵k-ary的生成树。将不平衡树转换为生成树
树上各种迭代是允许的。限制是我们不能只收集一个地方的所有节点,然后在其中创建一个生成树(这将是一个微不足道的方法)。相反,必须从给定的树创建生成树。也就是说,孩子可以与父母(和祖父母,如果需要的话)交换信息(例如,孩子节点的数量和孩子节点的ID),并且父母决定移动孩子之间的节点(按顺序以平衡树)。
你可能已经明白,我试图做到这一点在并行计算环境。其中,一个节点知道的是它的父节点,它的子节点以及每个子树中以子节点为根节点的节点数。
(家长和孩子会改变,因为我们努力平衡树)。有关如何解决这个问题的任何提示?
回复的意见,即为什么这个问题很重要/值得考虑 - 毕竟琐碎apporach是可伸缩的:
从理论上来说是具有挑战性的开发使用为O较小(算法N)空间(用于平凡的方法)来构建生成树。
有趣的是,考虑替代解决方案接近大规模。
至于数字而言:N = 100,000(这是在今天的超级计算机常见,N将在即将到来的BG/Q 1000,000)。在所采用的简单方法步骤中,a)全部减少b)O(N)以构建生成树,并且c)最后进行一对多广播。
另一种分布式的方法可能不会给太大起色,但出curosity它可能是值得一试。
为什么我们不平衡像AVL树一样的树? – Pih 2011-05-15 22:29:23
AVL树是平衡的二叉搜索树。在这个问题中,我们只有一个随机树,其中有一个节点有任意数量的子节点(AVL树中不是这种情况)。生成的树除了是一个平衡的k-ary生成树之外,不必遵循任何其他属性。 – Akhil 2011-05-16 01:47:11
为什么你认为有一个k-ary生成树可能?想象一下,这只是一个线性链。生成树是线性链的同构拷贝(具有任意选择的根节点)。你不能用它制作K-tree。您至少要软化您的要求,以生成最小深度的树。 – 2011-05-16 01:57:34