我有一个数组,其中包含200K带有x,y,w,h的矩形对象。我想找到一个结果数组,其中包含彼此不相交的项。我的方法是循环每个项目并与数组中的N-1个对象进行比较,但是它非常慢,并且花费时间的复杂度为O(n ^ n)。有没有更快的解决方案?谢谢。
答案 0 :(得分:0)
这与line segment intersection
问题极为相似。看看this。
Bentley–Ottmann算法还具有很高的时间复杂度。
通过使用范围查询搜索,可以将性能提高到O(nlogn)。因此,我们的想法是根据“ Y坐标”对所有矩形进行排序,然后将其输入到细分树中。
现在,对于每个矩形,如果您想知道给定的边是否与任何其他矩形重叠,则可以在段树上使用范围查询进行快速查找。
我留下了一些含糊的答案,以宣传OP的思想,而不是放弃一切。