我有一个不必与轴平行的矩形列表。我还有一个与轴平行的主矩形
我需要一种算法,可以判断哪个矩形是最接近的点(该点必须在主矩形中)。在算法期间,矩形和主矩形列表不会发生变化,并且将被调用多个点,因此应创建一些数据结构以使查找更快。
需要明确的是:从矩形到点的距离是矩形中最近点到点之间的距离
可以使用什么算法/数据结构?内存在此上具有更高的优先级,n log n是正常的,但n ^ 2不是。
答案 0 :(得分:2)
您应该能够使用带有O(n log n)预处理时间的Voronoi图和O(log n)时间查询来执行此操作。因为对象是矩形而不是点,所以单元可以是弯曲的。然而,Voronoi图应该可以正常工作。 (见http://en.wikipedia.org/wiki/Voronoi_diagram)
对于一个快速而肮脏的解决方案,您实际上可以在一天内工作,您可以做一些灵感来自局部敏感散列的东西。例如,如果矩形间隔很小,您可以将它们散列为具有几个不同偏移的方形桶,然后为每个查询检查落入包含查询点的少数桶之一的每个矩形。
答案 1 :(得分:2)
您应该能够在O(n)时间和O(n)内存中执行此操作。
答案 2 :(得分:1)
如果记忆比速度更有价值,请使用强力:对于给定的点S,计算从S到每个边缘的距离。选择距离最短的矩形。
此解决方案不需要额外的内存,而其执行时间为O(n)。
根据您的确切问题规范,如果允许矩形与主矩形重叠,则可能必须调整此解决方案。
答案 3 :(得分:0)
如上所述,一个点与矩形之间的距离是通过该点的所有线的最小长度,该点与矩形的所有四个边垂直,并且所有线将该点与矩形的四个顶点之一连接。
(我的英语不擅长描述数学解决方案,所以我认为你应该更深入地思考我的解释)
对于每个矩形,您应该保存四个顶点和四个边缘函数,以便使用特定点快速计算它们之间的距离。