it-swarm.com.de

Wie finde ich zwei entfernteste Punkte?

Diese Frage wurde mir vor einiger Zeit bei einem Vorstellungsgespräch gestellt. Und ich finde immer noch keine vernünftige Antwort.

Die Frage ist:

sie erhalten eine Menge von Punkten (x, y). Finde 2 am weitesten entfernte Punkte. Voneinander entfernt.

Zum Beispiel für Punkte: (0,0), (1,1), (-8, 5) - die am weitesten entfernten sind: (1,1) und (-8,5), da der Abstand zwischen ihnen größer ist beide (0,0) - (1,1) und (0,0) - (- 8,5).

Der naheliegende Ansatz besteht darin, alle Entfernungen zwischen allen Punkten zu berechnen und das Maximum zu finden. Das Problem ist, dass es O (n ^ 2) ist, was es für große Datensätze unerschwinglich macht.

Es gibt einen Ansatz mit ersten Tracking-Punkten, die sich an der Grenze befinden, und dann die Entfernungen für sie berechnen, unter der Voraussetzung, dass sich weniger Punkte auf der Grenze befinden als "innen", aber es ist immer noch teuer und schlägt im schlimmsten Fall fehl.

Ich habe versucht, im Internet zu suchen, fand aber keine vernünftige Antwort - obwohl dies einfach mein Mangel an Suchfähigkeiten sein könnte.

44
user80168

BEARBEITEN: Eine Möglichkeit besteht darin, das konvexe .__ zu finden. Rumpf http://en.wikipedia.org/wiki/Convex_hull der Menge von Punkten und dann die beiden entfernte Punkte sind Eckpunkte davon.

Möglicherweise hier beantwortet: Algorithmus, um zwei Punkte zu finden, die am weitesten voneinander entfernt sind

Ebenfalls:

20
zaf

Grenzpunktalgorithmen gibt es zuhauf (suchen Sie nach Algorithmen für konvexe Hüllen). Von dort sollte es O(N) Zeit dauern, um die am weitesten entfernten gegenüberliegenden Punkte zu finden.

Aus dem Kommentar des Autors: Finden Sie zuerst zwei gegenüberliegende Punkte auf dem Rumpf und gehen Sie dann im Halb-Lock-Step-Modus herum. Abhängig von den Winkeln zwischen den Kanten müssen Sie entweder einen oder den anderen Wanderer vorrücken, aber es dauert immer O(N), um die Hülle zu umrunden.

8
Marcelo Cantos

Ermitteln Sie den Mittelwert aller Punkte, messen Sie die Differenz zwischen allen Punkten und dem Mittelwert, nehmen Sie den Punkt mit der größten Entfernung vom Mittelwert und ermitteln Sie den am weitesten entfernten Punkt. Diese Punkte sind die absoluten Ecken der konvexen Hülle und die zwei am weitesten entfernten Punkte. Ich tat dies kürzlich für ein Projekt, das konvexe Hülsen benötigte, die auf zufällig gerichtete unendliche Ebenen beschränkt waren. Es hat super funktioniert. 

6
Rich Colburn

Diese Frage wird bei der Einführung in den Algorithmus vorgestellt. 1) Berechnen Sie die konvexe Hülle O (NlgN). 2) Wenn auf der konvexen Hülle M vectex vorhanden ist. Dann brauchen wir O(M), um das am weitesten entfernte Paar zu finden. 

Ich finde diese hilfreichen Links. Es beinhaltet eine Analyse der Algorithmusdetails und des Programms . http://www.seas.gwu.edu/~simhaweb/alg/lectures/module1/module1.html

Wünschte, das wird hilfreich sein.

3
yuan

Sie suchen nach einem Algorithmus zur Berechnung des Durchmessers einer Punktmenge, Diam (S). Es kann gezeigt werden, dass dies dem Durchmesser der konvexen Hülle von S, Diam (S) = Diam (CH (S)) entspricht. Berechnen Sie also zuerst die konvexe Hülle des Sets.

Jetzt müssen Sie alle antipodalen Punkte auf der konvexen Hülle finden und das Paar mit maximaler Entfernung auswählen. Es gibt O(n) antipodale Punkte auf einem konvexen Polygon. Dies gibt also einen O (n lg n) Algorithmus zum Finden der entferntesten Punkte.

Diese Technik ist als Rotating Caliper bekannt. Dies beschreibt Marcelo Cantos in seiner Antwort.

Wenn Sie den Algorithmus sorgfältig schreiben, können Sie auf Winkelberechnungen verzichten. Weitere Informationen finden Sie unter URL .

2
saadtaame

Ein stochastischer Algorithmus, um das entfernteste Paar zu finden, wäre

  • Wählen Sie einen zufälligen Punkt
  • Holen Sie sich den Punkt am weitesten entfernt
  • Wiederholen Sie einige Male
  • Entfernen Sie alle besuchten Punkte
  • Wählen Sie einen anderen zufälligen Punkt und wiederholen Sie den Vorgang einige Male.

Sie befinden sich in O(n), solange Sie "einige Male" vorgeben, aber es ist nicht garantiert, dass Sie das entfernteste Paar tatsächlich finden. Abhängig von Ihrer Punktezahl sollte das Ergebnis jedoch ziemlich gut sein. =)

2
Jens

Ein Ausgangspunkt könnte die Betrachtung von Problemen mit dem nächstgelegenen Punkt sein, die untersucht wurden. Wikipedia listet einige Optionen auf:

http://en.wikipedia.org/wiki/Closest_point_query

0
Joel Goodwin

Dies erscheint einfach, wenn die Punkte in kartesischen Koordinaten angegeben werden. So einfach, dass ich ziemlich sicher bin, dass ich etwas übersehen habe. Fühlen Sie sich frei zu sagen, was mir fehlt!

  1. Finden Sie die Punkte mit den maximalen und minimalen Werten ihrer X-, Y- und Z-Koordinaten (insgesamt 6 Punkte). Dies sollte der "entfernteste" aller Grenzpunkte sein.
  2. Berechne alle Entfernungen (30 eindeutige Entfernungen)
  3. Finden Sie die maximale Entfernung
  4. Die zwei Punkte, die dieser maximalen Entfernung entsprechen, sind die, nach denen Sie suchen.
0
Justin Henrie

Nur ein paar Gedanken:

Sie können nur die Punkte betrachten, die die konvexe Hülle Ihrer Punktmenge definieren, um die Anzahl zu reduzieren, aber es sieht immer noch etwas "nicht optimal" aus.

Andernfalls könnte es einen rekursiven Quad/Oct-Tree-Ansatz geben, der einige Entfernungen zwischen Punktsätzen schnell begrenzt und große Teile Ihrer Daten eliminiert.

0
Adrien