Bei einer Menge von Punkten und einem Radius . Welches ist die Komplexität des Findens des Punktes mit einer höheren Anzahl von Punkten in einem Abstand kleiner als . ZB diejenige, die maximiert ? R r Σ n i = 1 1 ‖ x - x i ‖ ≤ r
Ein Brute-Force-Algorithmus würde darin bestehen, jeden Punkt zu durchlaufen und die Anzahl der Punkte zu zählen, deren Abstand kleiner als . Das würde eine Komplexität von .
Gibt es einen besseren Ansatz?
ball
Titels muss aus der Menge stammen?) Eine Idee könnte darin bestehen, zu schätzen, ob der Radius im Vergleich zur durchschnittlichen Entfernung zum nächsten Nachbarn oder in der Größenordnung des Durchmessers klein ist (und Ansätze für diese Extreme zu berücksichtigen) (Flugzeug-Sweep für kleinesAntworten:
Es sieht so aus, als ob ein sublinearer Algorithmus für das Ball Range Counting Problem derzeit nicht bekannt ist.
Wenn Sie jedoch eine nicht genaue Antwort akzeptieren könnten, könnten Sie eine Scheibe durch eine Reihe von Quadraten mit unterschiedlicher Ausrichtung approximieren. Für jede Orientierung finden Sie eine bauen müssen Reichweite Baum , mit der Sie alle Punkte in einem Quadrat in zählen können bis Zeit (k - eine Anzahl von resultierenden Punkte).O(log2(n)+k)
Jeder Bereichsbaum benötigt Speicher. Je besser die gewünschte Annäherung ist, desto mehr Ausrichtungen sollten Sie verwenden. Beispielsweise erhalten Sie durch zwei Ausrichtungen ein Achteck , das sich einer Platte mit einem Flächenfehler von weniger als 6% annähert.O(n⋅log(n))
quelle
Die Antwort ist nicht so einfach, es gibt eine fortgeschrittene Untersuchung dieser Frage in der Komplexitätstheorie; Es scheint zB als das folgende Problem untersucht zu werden, das sich auf schnelle "sphärische Bereichszähl" -Anfragen konzentriert. Ja, verbesserte theoretische Grenzen sind möglich, aber dies scheinen abstrakte Algorithmen zu sein, die von niemandem implementiert wurden. Wenn Sie tatsächliche Implementierungen wünschen, ist dies eine andere Frage.
quelle