如何查找和子数组中哪些项目不相交的数组最快包含200,000个项目

时间:2018-12-30 02:09:06

标签: javascript algorithm

我有一个数组,其中包含200K带有x,y,w,h的矩形对象。我想找到一个结果数组,其中包含彼此不相交的项。我的方法是循环每个项目并与数组中的N-1个对象进行比较,但是它非常慢,并且花费时间的复杂度为O(n ^ n)。有没有更快的解决方案?谢谢。

1 个答案:

答案 0 :(得分:0)

这与line segment intersection问题极为相似。看看this

Bentley–Ottmann算法还具有很高的时间复杂度。

通过使用范围查询搜索,可以将性能提高到O(nlogn)。因此,我们的想法是根据“ Y坐标”对所有矩形进行排序,然后将其输入到细分树中。

现在,对于每个矩形,如果您想知道给定的边是否与任何其他矩形重叠,则可以在段树上使用范围查询进行快速查找。

我留下了一些含糊的答案,以宣传OP的思想,而不是放弃一切。