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 |
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 )T.
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).
Motivation: Ein effizienter Algorithmus wäre für diese andere Frage hilfreich .