【问题标题】:Finding size of perfect quad tree寻找完美四叉树的大小
【发布时间】:2011-01-30 23:38:13
【问题描述】:

我需要找到完美四叉树的大小。 这意味着我有 1 个根节点拆分为 4 个节点,再拆分为 4 个节点等。

所以高度为 1 的四叉树的大小为 1 高度 2 = 尺寸 5 (1 + 4) 高度 3 = 尺寸 21 (1 + 4 + 16) 高度 4 = 尺寸 85 (1 + 4 + 16 + 64)

等等。

我知道完美二叉树的大小可以用以下公式求出:size = 2^(height+1)-1 所以我相信四叉树也存在类似的方程。

那是什么?

【问题讨论】:

    标签: c++ tree size binary-tree


    【解决方案1】:

    这是geometric series。所以相关公式为:

    S = a * (1 - r^n) / (1 - r)
    

    其中a 是第一个值,r 是常用比率,n 是项数,^ 表示“to-the-power-of”。

    【讨论】:

    • 谢谢!这是一个非常有用的方程式!
    【解决方案2】:

    对于四叉树,算法是

    ((4^depth)-1)/3
    

    例如,深度为 3,您会得到

    (64-1)/3 = 21
    

    如果你算三层,你会得到

    1 + 4 + 16 = 21
    

    在我的实现中,我什至把它分成了两个数组 其中所有未离开节点的节点的大小为

    ((4^(depth-1))-1)/3
    

    离开节点是

    4^(depth-1)
    

    我在编译时使用 pow 的元编程和深度的模板参数进行这些计算。所以我只是在两个数组中分配我的节点。

    【讨论】:

      【解决方案3】:

      以防万一有人需要代码示例(在 swift3 中)

      public func tileCount(forLevelRange levelRange: Range<UInt>) -> UInt64 {
      
         var tileCount: UInt64 = 0
         for level in levelRange.lowerBound ..< levelRange.upperBound {
             tileCount += UInt64(pow(Double(1 << level), 2) )
         }
      
         return tileCount
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-15
        • 2019-07-02
        • 1970-01-01
        • 1970-01-01
        • 2015-12-01
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多