我试图解决这个问题,我想出了一个如下解决方案,这与" Wikipedia"算法。我无法理解我的解决方案有什么问题,这也是O(nlogn)。
输入:沿x-y轴的坐标集。 {(2,4),(5,3),(3,7),(4,2),(6,3)}
我的解决方案:
这是错的吗?我错过了什么?
答案 0 :(得分:4)
是的,这是错误的。考虑集合{(0,0),(0,10),(10,0),(0.2,0.2)}作为计数器示例。你的方法永远不会有(0,0)和(0.2,0.2)作为任何一个排序中的连续元素,因此永远不会被认为是彼此最接近的两个点。
答案 1 :(得分:3)
你的算法会产生一个错误的最佳对,例如以下示例:
var points : [(Int,Int)] = [(0,0),(1,10),(10,1),(3,3)]
/* xmin solution: (1,10), (3,3) (dist = sqrt(4+49) = sqrt(53))
from sorted list: (0,0),(1,10),(3,3),(10,1) */
/* ymin solution: (10,1), (3,3) (dist = sqrt(53))
from sorted list: (0,0),(10,1),(3,3),(1,10) */
/* real solution: (0,0), (3,3) (dist = sqrt(18) < sqrt(53)) */
答案 2 :(得分:0)
是的,这是错误的。当x ^ 2或y ^ 2中的任何一个最小时,sqrt(x^2 + y^2
)的最小都没有必要。
最知名的解决方案的时间复杂度为O(nlogn)。 第1039页的{3}}第33.4节中可以找到解决方法。
无需阅读整章,只需33.4节即可。