如何在建造kd树时正确选择切割尺寸?

时间:2013-11-27 03:39:12

标签: algorithm split kdtree

最近我正在挖掘kd-tree,并且在选择切割尺寸方面找到了一些有趣的东西。通过一些技术博客,有两种方法:

  1. 如果点维度表示为 k ,则在 0 深度我们选择维度 1 ,和 1 深度我们选择尺寸 2 ,直到( k - 1 ) - 深度我们选择尺寸 k 。然后再次在 k 深度我们选择尺寸 1 等等。在二维空间中,表示为( x,y ),切割尺寸将选择为 x,y,x,y,...
  2. 另一种方法是计算每个维度中所有值的方差,并选择最大值作为切割维度。
  3. 所以,我想知道哪种方法更适合构建kd-tree。或者如果他们都有自己的情况,我们应该在什么情况下使用?

    提前致谢!

2 个答案:

答案 0 :(得分:0)

我建议2.比1更好的替代方案。如果你需要kd树中的良好平衡,因为越多的方差是点被分配到切割维度的任一侧的机会。 kd树越平衡,找到查询点就越需要比较。树的较高级别比较低级别更需要平衡,因为更高级别的查询时间在更高级别实现,因此首先考虑最高方差。

答案 1 :(得分:0)

如果您只是通过尺寸循环,则可以保存存储空间以跟踪您使用的尺寸。由于存储器效率高,无节点k-d树可以很好地执行,因为它有0个内存开销。