多维细分树

时间:2013-04-05 06:04:08

标签: java algorithm data-structures computational-geometry multidimensional-array

我必须解决的问题是stabbing queries的1D问题的4D版本:查找数字属于哪个区间。我正在寻找multi-dimensional segment trees的实施。理想情况下,它将使用Java,它将使用fractional cascading

kd-trees(k-NN搜索)和范围树(给定边界框,查找其中的所有点)存在多维实现,但对于分段树,我只发现了1D实现。

我很乐意考虑具有类似空间/时间复杂度的其他数据结构来解决同样的问题。

1 个答案:

答案 0 :(得分:0)

为了扩展我的评论,我想到的二元空间分区算法就是这个。

  1. 选择坐标x和阈值t(随机坐标,中位坐标等)。
  2. 分配一个新节点,并将与半平面x = t相交的所有间隔分配给它。
  3. 递归地构造子节点,用于(a)完全包含在下半空间x t内的间隔。
  4. stabbing查询从根开始,检查分配给当前节点的所有间隔,下降到适当的子节点,然后重复。切换到小子树的暴力可能是值得的。

    如果太多的间隔被半平面x = t刺伤,你可以尝试递归(a)与下半空间相交的间隔和(b)与上半空间相交的间隔。这会重复间隔,因此空间要求不再是线性的,您可能必须切换到间隔集合上的暴力,细分证明是无效的。