计算最小的树

时间:2010-10-22 12:32:48

标签: algorithm language-agnostic tree

给定一组节点,我如何构建一个树,它以最小化 max(max(degree),max(depth))的方式将所有节点链接在一起?

例如,给定一组五个节点,我可以这样连接它们:

max(degree) = 4, max(depth) = 1

然而,这不是最小的,因为max(度)== 4和max(深度)== 1,更好的树将是:

max(degree) = 2, max(depth) = 2

其中max(度)== 2且max(深度)== 2

编辑::算法不必很快,但计算绝对最优的树很重要。

2 个答案:

答案 0 :(得分:4)

从相反的方向走。给定度和深度,节点的最大数量是和= 1 +度+度^ 2 + ... +度^深度。这是整数序列A031973。您可以每次计算它,或者只存储第一个值。无论哪种情况,您都会搜索大于您的节点数的最小值,并找出相应的D = degree = depth

当你知道你的D然后只是按照你喜欢的方式填充树,关于它的界限。

答案 1 :(得分:2)

对于k = 0到度-1,具有深度==度的树中的最大节点数是n = Sum degree ^ k。事实上,和是一个几何系列。因此,其值等于(度^度-1)/(度-1),其可能更快地计算。 (即使速度无关紧要;-)) 但是你无法用代数方法求解方程n =(degree ^ degree-1)/(degree-1),所以你必须存储和的预先计算的值,然后选择得到最小可能值的程度值仍大于/等于到n。