我需要一种算法来对约 2,500 个 [经度、纬度] 数组的列表进行排序,以找到与给定 [经度、纬度] 最接近的 N 个点。特定用例是寻找最近的出租车进行叫车
我搜索过在线资源,其中大多数都只指向最小值。我编写了一些代码,通过 forEach 循环遍历列表并计算到感兴趣点的欧几里得距离,将距离放入数组中,对其进行排序,然后提取 3 个最小距离,但随后我必须找到索引最小的距离,这导致了较长的运行时间。我也考虑过 KNN,但觉得它使问题过于复杂
有没有更有效的方法来循环并提取 3 个最近的点?例如,一些内置方法?
编辑:这是一个例子:
兴趣点:[103, 1.3]
数据:
[
[103.6632, 1.32287], [103.66506, 1.30803], [103.67088, 1.32891],
[103.67636, 1.3354], [103.67669, 1.32779], [103.67927, 1.31477],
[103.67927, 1.32757], [103.67958, 1.31458], [103.68508, 1.32469],
[103.6927, 1.3386], [103.69367, 1.34], [103.69377, 1.37058],
[103.69431, 1.37161], [103.69519, 1.35543], [103.69538, 1.34725],
[103.6961, 1.33667], [103.696918716667, 1.35110788333333],
[103.69731, 1.35], [103.698615333333, 1.33590666666667],
[103.69975, 1.35], [103.70129, 1.34], [103.70247, 1.34],
[103.70366, 1.34], [103.70394, 1.33948], [103.70403, 1.34081],
[103.704697166667, 1.33546383333333], [103.70504, 1.34],
[103.706281333333, 1.344646], …Run Code Online (Sandbox Code Playgroud)