首页 > 解决方案 > 此解决方案是否适用于最近对问题?

问题描述

我一直在寻找 Python 中最接近配对问题的解决方案,但所有解决方案都与我的完全不同。

这是在 2D 维度上查找最近的点对的代码。

def closest_pair_two_axes(xarr, yarr):
    pairs = []
    # doesn't really depend if xarr or yarr because the lengths are the same
    for i in range(len(xarr)):
        pairs.append([xarr[i], yarr[i]])

    # Finds the difference between each point
    dist_arr = []
    for i in range(1, len(pairs)-1):
        for j in range(i, len(pairs)):
            diff_x = pairs[j][0] - pairs[j - i][0]
            diff_y = pairs[j][1] - pairs[j - i][1]

            diff = (diff_x ** 2 + diff_y ** 2) ** 0.5
            dist_arr.append(round(diff, 2))

    index = dist_arr.index(min(dist_arr))
    closest_distance = dist_arr[index]

    return closest_distance

xarr并且yarr只是 x 和 y 坐标的数组名称。在函数中,我将两个数组组合成一个包含坐标集的字典。之后,我遍历所有可能的坐标组合并找到它们之间的距离。最后,我找到了最小距离,追溯到它所属的pair,然后返回给用户。

此代码有效,但我不确定它是否正常工作以及结果是否真的是最接近的一对。代码是否正确?

编辑:我将 [j-1] 更改为 [ji] 以便它可以遍历每一对。另外,我使用另一个人的算法(正确的算法)解决了这个问题,并得到了与我的算法相同的答案。它可能不是最快和最干净的代码,但它确实有效!

标签: pythonalgorithm

解决方案


推荐阅读