【发布时间】:2013-10-07 22:27:13
【问题描述】:
所以对于一个项目,我已经实现了一个平衡的 KD-Tree 和 k-最近邻搜索算法,它是作为标准树的“传统”方式 - 即我有如下节点结构
struct KDNode{
int level; //used for x,y,z axis splitting
Point pos;
KDNode *left, *right; //Child nodes
}
...然后将树作为实际的树数据结构存储在内存中。但是,我最近听说可以将 KD-Tree 作为一个大数组存储在内存中,而无需创建任何节点对象,而且这种构造方法在内存和时间性能方面会更有效。
但是,我完全不确定这样的构造将如何工作,也无法在网上找到任何详细说明我将如何以这种方式实现 KD-Tree 的内容。
所以我的问题是,如何在不使用节点的情况下将 KD-Tree 实现为一维数组?
【问题讨论】:
-
由于 KDTrees 是二进制的,请看一下:en.wikipedia.org/wiki/Binary_tree#Arrays
-
可以创建一个 std::vector
节点;然后,您可以使用 nth_element 查找中值等。左右可以直接指向向量中的子节点(如果您的数据集是静态的,您不希望向量调整大小)。无需自己分配任何内存。
标签: arrays algorithm data-structures graphics tree