如何将不平衡树转换为(平衡)生成树?假设我有一棵树(在不同的节点上有不同的(不一定是不同的)子节点数)。我想以这样一种方式操纵树,使它成为一个k-ary生成树。
允许在树上进行各种迭代。限制是我们不能只收集一个地方的所有节点,然后从中生成一个生成树(这将是一个简单的方法)。而是必须从给定树创建生成树。也就是说,孩子们可以与父母(以及祖父母,如果需要)交换信息(例如,它拥有的子节点的数量和子节点的ID),并且父母决定在其子节点之间移动节点(按顺序)平衡树。)
您可能已经理解我正在尝试在并行计算环境中执行此操作。其中,所有节点都知道其父节点的id,其子节点以及每个子树中以子节点为根的节点数。
(当我们尝试平衡树时,父母和孩子会改变)。有关如何处理此问题的任何提示?
回复评论,为什么这个问题很重要/值得考虑 - 毕竟琐碎的应用程序是可扩展的:
从理论上讲,开发一种使用小于O(N)空间(用于简单方法)构建生成树的算法具有挑战性。
有意识地考虑大规模的替代解决方案。
就数字而言:N = 100,000(这在今天的超级计算机中很常见,在即将到来的BG / Q中N将是1000,000)。在微不足道的方法中,所讨论的步骤是a)全部减少b)O(N)构建生成树和c)最后是一对多广播。
另一种分布式方法可能没有太大的改进,但出于好奇,可能值得尝试。
答案 0 :(得分:2)
恭敬地,我认为你严重低估了你的“琐碎案例”在典型的并行计算环境中扩展的程度。小心发布一些实际数字?
答案 1 :(得分:1)
对一些合适的算法进行随机思考:
这也可能以完全分布的方式运作,其中每个邻域根据AVL标准之类的东西进行平衡,并最终传播大的结构变化。