0

令 L1,...,Ln 为平面 (IR^2) 中的 n 个不同线段。它们应成对不相交。此外,让 r 表示距离(实数值)。考虑找到所有对 (i,j) 的问题,其中 Li 和 Lj 的(欧几里德)距离小于 r。

我为运行时间 O(n^(3/2)) 的问题编写了一个简单直接的扫描线算法,如果可以假设对于所有相关的 x0 坐标,大约 n^(1/2) 线段位于在由 x = x0 和 x = x0 + r 界定的垂直条纹中。

当然我很好奇,如果有一个众所周知的(或不太知名的)更好的算法(希望是 O(n log(n)) 算法等),但无法通过谷歌或更具体地说找不到任何合适的算法堆栈溢出。

有人知道更多吗?

4

1 回答 1

1

如果您将线段替换为对应于膨胀r/2的矩形,则当线段比 更接近时,矩形轮廓将相交r。(其实会有一小部分误报,因为边角应该是圆角的。但是误报可以事后剔除。)

因此,您可以使用标准的 Bentley-Ottman 来执行您的任务,而不会降低渐近复杂度。(请注意,两个矩形轮廓最多可以相交八次,但仅限于极端情况。)

https://en.wikipedia.org/wiki/Bentley–Ottmann_algorithm

在此处输入图像描述

于 2020-04-14T18:47:27.423 回答