我在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
谢谢。
答案 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))运行