【问题标题】: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
}