Komplexität beim Finden eines Balls, der die Anzahl der darin liegenden Punkte maximiert

10

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 irx1,,xnR2rri=1n1xxir

Ein Brute-Force-Algorithmus würde darin bestehen, jeden Punkt zu durchlaufen und die Anzahl der Punkte zu zählen, deren Abstand kleiner als r . Das würde eine Komplexität von O(n2) .

Gibt es einen besseren Ansatz?

Manuel
quelle
Haben Sie sich Quadtrees und binäre Raumaufteilungsbäume angesehen? Ich würde davon ausgehen, dass sie einen Algorithmus liefern, der in der Praxis effizienter ist, obwohl ich nicht weiß, wie die asymptotische Laufzeit im schlimmsten Fall aussehen könnte.
DW
(Die Mitte des ballTitels 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 kleines r ) und der breite Raum dazwischen).
Graubart
Das Zentrum des Balls sollte ein xi aber wenn es einen besseren Algorithmus ohne diese Bedingung gibt, bin ich auch interessiert.
Manuel
Es sieht so aus, als ob ein schneller als Algorithmus für das Ball Range Counting Problem unbekannt 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 Ausrichtung müssen Sie einen Bereichsbaum ( en.wikipedia.org/wiki/Range_tree ) erstellen , mit dem Sie alle Punkte innerhalb eines Quadrats in Zeit (k) zählen können - eine Reihe von resultierenden Punkten). O ( l o g 2 ( n ) + k )O(n)O(log2(n)+k)
HEKTO
@HEKTO Schlagen Sie vor, eine Struktur von cost zu erstellen, um abzufragen, ob ein Punkt in einem Rechteck zu cost ? Gehen Sie dann alle Punkte durch, um zu zählen, wie viele andere Punkte in der angenäherten Kugel liegen. Dies könnte funktionieren, aber wie viel Speicher würde dann für eine solche Datenstruktur benötigt? wäre es niedriger als ? O ( l o g 2 ( n ) + k )O(nlog(n))O(log2(n)+k)O(n2))
Manuel

Antworten:

5

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(nlog(n))

HEKTO
quelle
3

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.

vzn
quelle