セット A とセット B の 2 セットのノードがあります。各セットのサイズは 25,000 です。
パーセンテージ (20% としましょう) が与えられます。セット A のノードの 20% がセット B の任意のノードの距離内に収まるような最小距離を見つける必要があります。
解決:
セット B のノードに最も近いセット A の 20% を見つけます。答えは、セット B のノードから最も遠い 20% のノードです。
ブルート フォース ソリューション:
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 + Sort) かな?)
どうすればこれをスピードアップできますか? できればO(n)を打ちたいです。