避免在距离比较中嵌套for循环

时间:2013-03-18 14:30:07

标签: algorithm matlab scilab

我有两个对象列表;我想对给定的list 2对象执行操作,只要它在当前list 1对象的边界内。

这样的事情:

for k=1:size(object_list1)
    for l=1:size(object_list2)
        if euclideanDstSqt(object_list1(k).centroid,object_list2(l).centroid) < toleranceRadius then
            // do something ...
        end
    end        
end

这有什么问题,我每次都会检查距离,即使对于彼此相距很远的物体也是如此。是否有一种算法更智能的方法来做到这一点?某种树可能吗?

然后可以将此算法翻译成C ++,因此我不得不忘记所有面向矩阵的Matlab技巧。

2 个答案:

答案 0 :(得分:1)

可能将列表2中的对象放入k-d tree,然后放入列表1中的对象,继续寻找最近邻居,直到到下一个邻居的距离超出边界。

答案 1 :(得分:0)

我可能会说你总是需要计算距离。唯一的解决方案是对点进行空间排序,或进行某种预计算。例如,创建一个空间网格,并丢弃属于同一象限的所有点,而不是任何一个点。