我有 2 组节点 - 组 A 和组 B。每组的大小为 25,000。
我得到一个百分比(比如说 20%)。我需要找到最小距离,以使 Set A 中 20% 的节点在 Set B 中任何节点的距离内。
解决方案:
找到集合 A 中最接近集合 B 中任何节点的 20%。答案是那 20% 中离集合 B 中任何节点最远的节点。
蛮力解决方案:
foreach (Node a in setA)
{
a.ShortestDistance = infinity;
foreach (Node b in setB)
{
if (a.DistanceTo(b) < a.ShortestDistance)
{
a.ShortestDistance = a.DistanceTo(b);
}
}
}
setA.SortByShortestDistance();
return setA[setA.Size * 0.2];
这行得通,但它所花费的时间是疯狂的。(O(n^2 + 排序)我认为?)
我怎样才能加快速度?如果可能的话,我想打 O(n)。