在3D中搜索点之间的K个最小距离

时间:2018-10-12 09:49:52

标签: algorithm math optimization set distance

我在3D中有两个不相交的点集。我需要找到具有最小距离的 k 对点。每个点都有(x,y,z)坐标。

限制:解决方案必须是串行的最佳解决方案。请不要多线程。可以使用诸如分而治之/动态编程之类的方法。

我目前的做法是:

listOfPairs = []
for all points a in setA
    for all points b in setB
        distance = calcDistance(a, b)
        listOfPairs.append((a, b, distance))

sortByDistance(distance) // using the built in sort method
PrintPointsAndDistances(listOfPairs, k) // print the first k elements

谢谢。

1 个答案:

答案 0 :(得分:0)

这可以通过优先级队列来完成。完成后

priorityQueue = PriorityQueue(k) // of size k
for all points a in setA
    for all points b in setB
        distance = calcDistance(a, b)
        priorityQueue.push_with_priority((a, b), distance)

剩下的是k个最短距离对,该算法将以Θ(N * log(k))运行