答案 0 :(得分:3)
分而治之:
定义表示一对折线的数据结构及其axis-aligned minimum bounding boxes (AAMBB)之间的最小距离:pair = (poly_a, poly_b, d_ab)
)
使用距离pair
作为密钥,为d_ab
数据结构创建一个空队列。
使用初始折线创建pair
数据结构并将其推入队列。
我们将保留一个变量,其中包含到目前为止找到的折线之间的最小距离(min_d
)。将其设置为无限。
重复:
从队列中弹出距离最小的元素d_ab
。
如果d_ab
大于min_d
,我们就完成了。
如果任何折线poly_a
或poly_b
包含唯一的细分:
min_d
。否则:
将折线poly_a
和poly_b
分成两半,例如:
(1-7) --> { (1-4), (4-7) }
(8-12) --> { (8-10), (10-12) }
制作两个集合的交叉积,创建4个新的pair
数据结构,然后将其推入队列Q.
在一般情况下,复杂度为O(N * log N),最坏情况可能为O(N²)。
更新:Perl中实现的algorithm。
答案 1 :(得分:1)
"标准"这种问题的方法是构造几何实体的Voronoi图。这可以在时间O(N Log N)中完成。
但是线段的这种图表的构建很困难,你应该采用现成的解决方案,例如CGAL。