代码之家  ›  专栏  ›  技术社区  ›  Martin

计算最小可能树

  •  3
  • Martin  · 技术社区  · 14 年前

    给定一组节点,如何构造一棵树,以最小化的方式将所有节点链接在一起 ?

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

    但是,这并不是最小值,因为max(degree)==4和max(depth)==1,更好的树应该是:

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

    最大(度)==2,最大(深度)==2

    2 回复  |  直到 14 年前
        1
  •  4
  •   Dialecticus    14 年前

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

    当你知道你的D的时候,就按照你喜欢的方式,按照它的界限,把树填满。

        2
  •  2
  •   iolo    14 年前

    深度==度的树中节点的最大数目是n=和度^k(对于k=0到度-1)。和是一个几何级数。因此,它的值等于(度^度-1)/(度-1),计算起来可能要快得多。(尽管速度无关紧要;-)) 但是你不能用代数方法解方程n=(度^度-1)/(度-1),所以你必须存储和的预先计算值,然后选择度的值,这个值产生的最小值仍然大于或等于n。