lundi 29 juin 2015

Correct way to predict the required number of nodes in a kD-Tree


I'm implementing a dynamic kD-Tree storing the nodes in an std::vector in the breadth-first manner. It would support incremental insertion of points and collection of points. However I'm facing problem determining the required number of possible nodes to incrementally preallocate space.

I've found a formula on the web, which seems to be wrong:

N = min(m − 1, 2n − ½m − 1),

where m is the smallest power of 2 greater than or equal to n, the number of points.

My implementation of the formula is the following:

size_t required(size_t n)
{
    size_t m = nextPowerOf2(n);
    return min(m - 1, (n<<1) - (m>>1) - 1);
}

function nextPowerOf2 returns a power of 2 largest or equal to n

Any help would be appreciated.


Aucun commentaire:

Enregistrer un commentaire