我正在实现一个动态的 数组表示的 kD-树(将节点存储在 std::vector 中),以广度优先的方式进行。每个非叶节点的左子节点为
我在网上找到了一个 公式,但似乎是错误的:
(i<<1)+1
,右子节点为 (i<<1)+2
。它将支持点的增量插入和点的收集。
然而,我面临着确定递增地预分配空间所需的可能节点数量的问题。我在网上找到了一个 公式,但似乎是错误的:
我的公式实现如下:N = min(m − 1, 2n − ½m − 1),
其中 m 是大于或等于点数 n 的最小的 2 的幂。
size_t required(size_t n)
{
size_t m = nextPowerOf2(n);
return min(m - 1, (n<<1) - (m>>1) - 1);
}
函数nextPowerOf2返回一个大于或等于n的2的幂次方
任何帮助将不胜感激。
X
个点...计算出的m
值为Y
,并且required
返回值为Z
...但最终我需要W
个节点。 - wendelbsilva