Algorithmus, um für alle Punkte in Menge A den nächsten Nachbarn in Menge B zu finden

8

Nehmen wir an, wir haben zwei Sätze von Punkten A, B, und wir wollen für jeden Punkt in Menge A seinen nächsten Nachbarn in Menge B finden.

Es gibt viele gute Algorithmen, um den nächsten Nachbarn für einen Punkt zu finden. Gibt es eine Möglichkeit, die Informationen, die wir für a_1 erhalten haben, zu verwenden, um effizienter nach dem nächsten Nachbarn für a_2 oder anderen Punkten im Set zu suchen?

Ich denke so etwas wie: benutze Dreiecksunwichtigkeit, um ein Intervall für die mögliche Entfernung zwischen jedem Punkt in B und dem neuen Punkt a_2 zu erhalten, und sortiere die Max und Min der Intervalle, und dann kann ich nur die Punkte in B suchen fällt in das erste Intervall.

    
gstar2002 21.10.2012, 17:34
quelle

3 Antworten

11
  1. Finden Sie das Voronoi-Diagramm für die Punkte von Menge B.
  2. Wenden Sie einen Sweep-Zeilenalgorithmus über die Punkte des A- und Voronoi-Diagramms von B an. Überall dort, wo die Sweep-Linie einen bestimmten Punkt abdeckt Aus der Menge A, schauen Sie, zwischen welchen Kanten des Voronoi-Diagramms sich dieser Punkt befindet. Dies ermöglicht zu bestimmen, zu welcher Seite des Voronoi-Diagramms dieser Punkt gehört. Das gibt den nächsten Punkt aus Menge B.

Details für Schritt 2: Behalte alle Kanten des Voronoi-Diagramms, die derzeit von der Sweep-Linie geschnitten werden, in einem bestimmten geordneten Container. Wenn die Sweep-Linie einen Scheitelpunkt des Voronoi-Diagramms abdeckt, entfernen Sie Kanten, die zu diesem Scheitelpunkt gehören, vom / zum Container. Um zu sehen, zwischen welchen Kanten ein Punkt liegt, erhalten Sie im Container die Nachfolger / Vorgänger-Kanten.

Die Zeitkomplexität ist O ((M + N) log M). N = | A |, M = | B |.

    
Evgeny Kluev 21.10.2012, 18:08
quelle
1

Sie können davon profitieren, wenn Sie Bentleys lesen, die "effiziente Programme schreiben", in denen er sich mit einer Fallstudie des Programms für Geschäftsreisenden beschäftigt. Eine der Ersparnisse, die er erkannte, war, dass der Unterschied zwischen zwei Punkten darin bestand, eine Quadratwurzel zu nehmen, die teuer war. Wenn Sie die Quadratwurzel verwenden, erhalten Sie die tatsächliche Entfernung. Wenn Sie nicht die Quadratwurzel verwenden, erhalten Sie eine Zahl, die Sie zum Vergleich mit anderen relativen Werten verwenden können.

Ich empfehle dringend, das Buch zu lesen. Es wird dein Gehirn an den richtigen Ort bringen.

    
EvilTeach 21.10.2012 17:50
quelle
0

Eine Brute-Force-Lösung könnte sein, ein Dendogramm der nächsten Punkte von Set B zu verwenden. Dann vergleiche jeden Punkt von Set A mit dem Dendogramm. Sie können das Dendogramm auch mit einer Delaunay-Triangulation erstellen.

    
Bytemain 30.05.2014 09:04
quelle

Tags und Links