【发布时间】:2013-08-17 08:17:28
【问题描述】:
我在二维空间中有一组点和一条线。我需要找到距离线 D 范围内的所有点。有没有办法让我做到这一点,而不必实际计算所有点与直线的距离 di?有没有比线性搜索更好的解决方案?
编辑:我需要多次搜索不同线的同一点集。这些点始终是恒定的,但在每次搜索期间线会有所不同。通常,点集的数量级为数万(~50k)。
【问题讨论】:
-
积分是静态的吗?您只需要这样做一次还是经常这样做?如果只需要这样做一次,恐怕没有更好的解决方案了。
-
您可以通过查找与线的距离平方小于 D^2 的点来节省一些时间。
-
听起来这可能是一个查询,其中您保留同一行但搜索多个点集,或者您保留相同的点集并使用不同的行。 O(N) 是您可以为前者做的最好的事情,而对于后者,您似乎可以做 O(k) 或 O(k log(N)),其中 k 是返回的点数。
-
如果直线附近有大量点,那么您可以使用包含椭圆的矩形,该椭圆代表距离直线 d 的空间。它需要一些时间来计算,但是任何检查一个点是否在那个矩形内只需要 8 次比较,这可能比计算距离便宜。尽管您可能需要至少数百万甚至数十亿的积分才能物有所值。
标签: algorithm line distance point nearest-neighbor