带方向的最近邻算法(左/右/上/下)

时间:2012-07-18 22:23:03

标签: algorithm math optimization data-structures geometry

在2D几何中有 n 随机点,对于每个点p,我需要找到4 (如果不存在则更少)最近点 qa qb qc qd < em>),其中 qa 是最接近的 左上角 点, qb 是最接近的 右上方 点, qc 是最近的 左下角 点和< em> qd 是最接近 右下角 指向 p 的点。具有相同的 x 坐标被视为左侧,具有相同的 y 坐标被视为底部。

存储点坐标及其最近邻居参考的最佳 数据结构 是什么?什么 算法 会是最快还是最多的?

注意:这个问题远远超过最近邻算法,因为每个点需要4个邻居点。

2 个答案:

答案 0 :(得分:1)

您可以尝试空间填充曲线和四叉树数据结构。空间填充曲线将2维减小到1维,并且在2格的功率下效果最佳。四叉树将平面划分为4个四边形。空间填充曲线是取2个变量的数学函数,结果给出1个数。它也可以有3,4,5个变量,但最简单的是2个。因为它给出1个数字并且需要2个变量,它可以帮助2个维度或更多的问题。

  1. http://social.technet.microsoft.com/wiki/contents/articles/9694.tuning-spatial-point-data-queries-in-sql-server-2012.aspx
  2. https://www.google.com/search?q=nearest+neigbor+search+space+filling+curve
  3. enter image description here

答案 1 :(得分:1)

使用k-dim树索引(在本例中为k = 2),因此使用四叉树。这应该允许您有效地搜索空间,向左,向右,向上和向下搜索点。您可以在dmbs中为此制定查询,但从概念上讲,我会搜索点自己的“四边形”,然后根据四边形中点的位置,我们可以知道我们是否在一个方向上找到了最近的点。然后我们知道哪些四边形搜索其余的点。

由于您为每个点执行此操作,因此您知道存在对称性,即点P1具有P2作为最近的左邻居,因此P2具有P1作为最接近的右邻居。因此,相应地更新点对象。