以下练习已分发给我指导的学生:
给定平面中的个点,请设计一种算法,该算法可找到一对对所有点之间的距离最小的点。该算法应在时间。
有一个(相对)简单的分而治之算法,可以解决时间的任务。
问题1:是否有一种算法可以在最坏的情况下准确地解决给定的问题?
我怀疑这是有可能的是我记得在一些谈话中看到的结果(赞赏参考)。它指出沿着不超过恒定数目的线的东西点可被布置在周围的一些点处的平面半径的圆内用所涉及的点的任何两个之间的最小距离。我认为,这些点形成一个等边六边形,中心为(在极端情况下)。
在这种情况下,以下算法应在步之内解决它们的问题。
fun mindist [] | p::[] = INFINITY
| mindist p1::p1::[] = dist(P[0], P[1])
| mindist p::r = let m = mindist(r) in
min(m, nextNeighbour(p, r, m))
end
注意,这是(声称是)在线性时间内,因为在点只有一个恒定数量r
可以是不大于较远远离m
从p
(假设上面的语句); 只需调查这些点即可找到新的最小值。当然有一个陷阱。如何实现nextNeighbour
(也许在线性时间内进行预处理)?
问题2:让一组点的和点p ∉ [R 。让米∈ [R与
和
。
假设是有限的。是否有可能找到(在摊销后的时间与距离最小?(您可以假设是通过将调查点一一相加来构造的。)