在2D几何中有 n 随机点,对于每个点p
,我需要找到4 (如果不存在则更少)最近点 ( qa
, qb
, qc
, qd
< em>),其中 qa 是最接近的 左上角 点, qb 是最接近的 右上方 点, qc 是最近的 左下角 点和< em> qd 是最接近 右下角 指向 p 的点。具有相同的 x 坐标被视为左侧,具有相同的 y 坐标被视为底部。
存储点坐标及其最近邻居参考的最佳 数据结构 是什么?什么 算法 会是最快还是最多的?
注意:这个问题远远超过最近邻算法,因为每个点需要4个邻居点。
答案 0 :(得分:1)
您可以尝试空间填充曲线和四叉树数据结构。空间填充曲线将2维减小到1维,并且在2格的功率下效果最佳。四叉树将平面划分为4个四边形。空间填充曲线是取2个变量的数学函数,结果给出1个数。它也可以有3,4,5个变量,但最简单的是2个。因为它给出1个数字并且需要2个变量,它可以帮助2个维度或更多的问题。
答案 1 :(得分:1)
使用k-dim树索引(在本例中为k = 2),因此使用四叉树。这应该允许您有效地搜索空间,向左,向右,向上和向下搜索点。您可以在dmbs中为此制定查询,但从概念上讲,我会搜索点自己的“四边形”,然后根据四边形中点的位置,我们可以知道我们是否在一个方向上找到了最近的点。然后我们知道哪些四边形搜索其余的点。
由于您为每个点执行此操作,因此您知道存在对称性,即点P1具有P2作为最近的左邻居,因此P2具有P1作为最接近的右邻居。因此,相应地更新点对象。