【问题标题】:Minimum Euclidean distance between two points in an array of points点数组中两点之间的最小欧几里得距离
【发布时间】:2021-01-30 08:59:20
【问题描述】:

明显的O(N^2)就是计算每对点之间的欧几里得距离。我已经用 Python 实现了(calc_euclidean_dist() 实现被省略):

def closestPointPair(pairs):

    min_dist = sys.maxsize

    for i in range(len(pairs)):
        for j in range(i+1, len(pairs)):
            dist = calc_euclidean_dist(pairs[i], pairs[j])
            if dist < min_dist:
                min_dist = dist

    return min_dist

有没有更好的解决方案?也许订购积分?

【问题讨论】:

  • 由于点ab之间的距离与ba之间的距离相同- 不要两次计算相同的值。它会将您带到O(n Log n)
  • Closest pair of points problem 的一些指针。
  • @PM77-1 实际上 dist(a,b)=dist(b,a) 并且内部循环只需要在列表索引 i+1 和 N-1 之间进行迭代。我已经用这个改进更新了我的问题中的代码。尽管如此,该算法仍然是 O(N^2),因为比较次数将为 N-1 + N-2 + ... + 1 = sum(1,N-1) = (n^2-n)/ 2,即 O(N^2)。
  • 是的,你是对的。

标签: algorithm geometry


【解决方案1】:

最近点对问题有一个众所周知的解决方案(@dxiv 指出)。 https://en.wikipedia.org/wiki/Closest_pair_of_points_problem

最坏情况下它的时间复杂度是O(N log N),实现起来并不难。

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2023-03-25
    • 2021-05-14
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多