Nächstes Punktpaar zwischen zwei Sätzen in 2D


11

Ich habe zwei Mengen von Punkten in der zweidimensionalen Ebene. Ich möchte das nächste Punktpaar so dass , und der euklidische Abstand zwischen so klein wie möglich ist. Wie effizient kann das gemacht werden? Kann es in Zeit gemacht werden, wobei?s , t s S t T s , t O ( n log n ) n = | S | + | T |S,Ts,tsStTs,tO(nlogn)n=|S|+|T|

Ich weiß, dass es möglich ist, das nächste Punktpaar in Zeit unter Verwendung eines Standard-Divide-and-Conquer-Algorithmus zu finden , wenn ich eine einzelne Menge bekomme . Dieser Algorithmus scheint sich jedoch nicht auf den Fall von zwei Sätzen zu verallgemeinern, da kein Zusammenhang zwischen dem Abstand zwischen den beiden nächstgelegenen Punkten innerhalb von oder und dem Abstand zwischen den beiden nächstgelegenen Punkten über diese Sätze besteht.s , s 'S O ( n log n )Ss,sSO(nlogn)T.ST

Ich dachte daran, die Menge in einem d-Baum zu speichern und dann für jedes eine Abfrage zum nächsten Nachbarn zu verwenden, um den nächstgelegenen Punkt in zu . Die Worst-Case-Laufzeit kann jedoch so schlecht sein wie die -Zeit. Es gibt Ergebnisse, die besagen, dass wenn die Punkte von zufällig verteilt sind, die erwartete Laufzeit für jede Abfrage , sodass wir einen Algorithmus mit der erwarteten Laufzeit wenn wir Es wurde garantiert, dass die Punkte zufällig verteilt sind - aber ich suche nach einem Algorithmus, der für jede Sammlung von Punkten funktioniert (nicht unbedingt zufällig verteilt).TksSTsO(n2)TO(logn)O(nlogn)

Motivation: Ein effizienter Algorithmus wäre für diese andere Frage hilfreich .

Antworten:


10

Ja, dies kann sein. Bauen Sie ein Voronoi - Diagramm für T . Finden Sie dann für jeden Punkt s S , in welcher Zelle des Voronoi-Diagramms es enthalten ist. Das Zentrum dieser Zelle ist der Punkt t T , der s am nächsten liegt .O(nlogn)TsStTs

Sie können ein Voronoi-Diagramm in -Zeit erstellen , und jede Abfrage (die Zelle mit s finden ) kann in O ( log n ) -Zeit ausgeführt werden, sodass die Gesamtlaufzeit O ( n log n ) -Zeit beträgt .O(nlogn)sO(logn)O(nlogn)


Schön, viel einfacher als ich es mir vorstellen könnte :).
Aelguindy

Netter Ansatz! Links würden jedoch helfen, insbesondere für die Abfrageseite. Ich konnte eine Wikipedia-Seite finden, die zeigt, dass das allgemeine Problem der Punktlokalisierung in -Zeit gelöst werden kann , aber gibt es einen schöneren Weg für den Sonderfall von Voronoi-Zellen? Meine Suche ergab nur diese Antwort , die es auf die O ( n ) Weise macht. O(logn)O(n)
j_random_hacker

Die Komplexität des Punktlokalisierungsproblems wird normalerweise anhand der Gesamtzahl der Eckpunkte angegeben (hier des Voronoi-Diagramms). Diese Anzahl ist wahrscheinlich größer als die Anzahl der Punkte in und sogar n = | S | + | T | . Ich bin nicht sicher, ob die Anzahl der Eckpunkte durch O ( n ) begrenzt ist, oder? Tn=|S|+|T|O(n)
Albjenow

1
@Albjenow, ich bin mir nicht sicher, ob dies Ihr Anliegen anspricht, aber ja, in zwei Dimensionen glaube ich, dass die Anzahl der Eckpunkte in einem Voronoi-Diagramm auf Punkten O ( n ) ist (ich erinnere mich, dass es 6 n ist oder sowas in der Art). nO(n)6n
DW

Das scheint ab dieser Frage auf math.stackexchange richtig zu sein.
Albjenow

5

Ich erweitere meinen Kommentar zu einer Antwort, da ich eine halb zufriedenstellende Antwort gefunden habe. Dies löst nur das Problem für die -Distanz. Diese Antwort ist grundsätzlich falsch.L1

Diese Arbeit löst das Problem, das nächstgelegene Punktpaar in Dimensionen für den Fall zu finden, in dem die Mengen durch eine Hyperebene in O ( n log d - 1 n ) getrennt sind .dO(nlogd1n)

Für zwei Dimensionen löst dies den Fall in der Antwort, auf die Sie sich als Hauptmotivation für Ihre Frage in beziehen . Es kann auch verwendet werden, um den allgemeinen Fall des 2D-Problems in O ( n log 2 n ) zu lösen .O(nlogn)O(nlog2n)

Bei zwei Mengen von Punkten in 2D werden sie in den 3D-Raum eingebettet, wobei die Menge S um einige - δ z und die Menge T um δ z in z- Richtung verschoben werden . Die Wahl von δ z kann so getroffen werden, dass die Wahl des nächstgelegenen Punktpaars nicht beeinflusst wird, indem δ z kleiner als die Genauigkeit Ihrer Eingabepunkte ist (und die Genauigkeitsbits für jede Eingabekoordinate verdoppelt werden). Verwenden Sie den 3D-Algorithmus aus dem zitierten Artikel.S,TSδzTδzzδzδz


+1, aber ein paar Dinge über dieses Papier (das ich gerade erst gelesen habe): (i) Sie behaupten nur, das Problem für den geradlinigen (Manhattan) Distanzfall zu lösen ; (ii) Ich verstehe nicht, warum sie denken, dass Region auf p. 2 enthält genau 1 Punkt. Ich hatte angenommen, dass p m der Punkt in P mit der mittleren y-Koordinate in P ist und q m der Punkt in Q mit der mittleren y-Koordinate in Q ist , aber ich sehe nicht, wie das Obige daraus folgen könnte . P2pmPPqmQQ
j_random_hacker

1
@j_random_hacker das Papier löst nur das Problem für die L1-Entfernung und diese Antwort ist falsch :). Und ich denke das ist der Buchstabe :). l
Aelguindy

Link ist kaputt :(
Keerthana Gopalakrishnan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.