算法优化:循环查找3D空间中的一对项

时间:2016-10-18 14:58:04

标签: algorithm loops optimization 3d distance

这里我对代码没有问题,但我正在寻找想法和好的关键词来解释和解决我的问题。这都是关于算法优化的。

我有两组物品,它们是3D空间中的点,它们都有x,y,z坐标。如果他们彼此的距离小于dmax变量,我想把A中的物品与B中的物品配对。

for i in A do
  for j in B do
    d = sqrt((xAi-xBj)^2+(yAi-yBj)^2+(zAi-zAj)^2)
    if d <= dmax then
      ok
    fi
  done
done

例如,我在集合A中有100个项目,在集合B中有50个项目。 如果Ai和Bj距离小于dmax,我想将A中的物品与B中的物品配对。

我已经做过但现在可能不是很有效。这是计算A中所有项目与B中所有项目之间的距离,但速度很慢,我想知道是否有办法快速获得相同的结果(因为我在两个集合中都有数百万个项目) )。

我的第一个想法是分割A和B组在不同部分的3D空间并分配体素中的所有点,从而计算此体素中A和B之间的距离,这限制了距离的数量我得计算一下。限制是如果我不想错过任何一对,则必须叠加体素。这可以生成重复,但我可以处理它。

我已经开始调整sqrt功能以加快计算速度,我现在将d²与dmax2进行比较,以检查它是否符合条件。

您是否有其他想法或关键字(因为我确信有更好的方法来解释我的问题),这可以帮助我找到解决此问题的方法?

谢谢

1 个答案:

答案 0 :(得分:0)

您的问题称为“固定半径近邻搜索”。它通常用kD树或八叉树来解决。

也可以使用体素网格,但如果太多体素无效,则效率低下。在寻找给定点的邻居时,您必须访问与该点居中的球体具有非空交点的所有体素。