Wenn ein Punkt ein Scheitelpunkt einer konvexen Hülle ist


7

Die Übung ist

Gegeben eine Reihe von Punkten S. und ein Punkt p. Entscheide dich inÖ(n) Zeit wenn p ist ein Scheitelpunkt eines konvexen Polygons, der aus Punkten von gebildet wird S..

Das Problem ist, dass ich ein bisschen verwirrt bin mit der zeitlichen Komplexität Ö(n). Die naivere Lösung wäre, ein konvexes Polygon in zu konstruierenÖ(nLogn) und testen Sie ob p ist einer der Eckpunkte.

Antworten:


8

Hinweis: der Punkt p ist ein Scheitelpunkt der konvexen Halle, wenn zwei halbe Linien davon vorhanden sind, so dass alle Punkte in den von ihnen erzeugten Winkel fallen.

Hier ist eine Idee für einen Algorithmus, der auf diesem Hinweis basiert:

Entwerfen Sie einen Algorithmus mit zwei Variablen q und r(Eingabepunkte). Der Algorithmus überprüft jeden der Eingabepunkte und wird aktualisiertq und r so dass alle bisher geprüften Punkte in den Keil fallen qpr.


@ JeffE, gibt es einen Fehler in meiner Idee? Sie können es sehen, wenn Sie mit der Maus über den Teil unter dem zweiten Absatz fahren.
Kaveh

Ich habe es herausgefunden. (Ich hatte eine andere Lösung im Sinn.)
JeffE

@JeffE, ich hätte geschrieben ein statt der , wird er in einem zweiten beheben. :)
Kaveh

2
@ JeffE, ich bin neugierig, was war deine Idee?
com

7

Das Problem besteht darin, eine Linie zu finden, die durchgeht p und hat alle anderen Punkte in S.Auf der einen Seite. Dies ist ein zweidimensionales lineares Programmierproblem, das gelöst werden kannÖ(n)Zeit mit Lehrbuch geometrischen Algorithmen . Aber lassen Sie mich eine in sich geschlossene Lösung beschreiben.


Um die Notation zu vereinfachen, übersetzen Sie alle Punkte so p ist der Ursprung (0,0), und lass Q.=S.{p}}. Dann wollen wir feststellen, ob es eine reelle Zahl gibtm so dass entweder (1) y<mx für alle (x,y)Q oder (2) y>mx für alle (x,y)Q. Im ersten Fall,p ist ein Scheitelpunkt des oberen Rumpfes von S;; im zweiten Fallp ist ein Scheitelpunkt des unteren Rumpfes von S. Ich werde einen Algorithmus für den ersten Fall beschreiben; Der andere Fall ist symmetrisch.

Wenn irgendein Punkt in Q liegt direkt darüber p (das heißt, wenn irgendein Punkt in Q hat Koordinaten (0,y) für einige y>0), dann pkann nicht auf dem oberen Rumpf liegen. Es ist einfach, diesen Zustand einzucheckenO(n) Zeit.

Nehmen Sie also keine Punkte an Q liegen direkt darüber p. Dasy-Achsen spaltet sich Q in zwei Teilmengen L (links) und R(Recht). Punkte inL negativ haben x-Koordinaten und Punkte in R hat positiv x-Koordinaten. (Punkte direkt darunterpegal; ignoriere sie einfach.) Lass

mL=min(x,y)Lyx,MR=max(x,y)Ryx,andm=mL+MR2.
Nun sind drei Fälle zu berücksichtigen:
  • Wenn mL<MR, dann jeder Punkt in Q liegt streng unter der Linie y=mx, damit p ist ein Scheitelpunkt des oberen Rumpfes.

  • Wenn mL=MR, dann die Linie y=mx geht durch einen Punkt in L und ein Punkt in Rund kein Punkt in Qist streng über dieser Linie. Damitp liegt an einer Kante des oberen Rumpfes, ist aber kein Scheitelpunkt.

  • Wenn mL>MR, dann mindestens einen Punkt in L und mindestens einen Punkt in R liegen streng über der Linie y=mx. Damitp liegt streng unter dem oberen Rumpf.

Es ist leicht zu berechnen mL und MR im O(n)Zeit. Wir müssen eigentlich nicht rechnenm.

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.