Die Übung ist
Gegeben eine Reihe von Punkten und ein Punkt . Entscheide dich in Zeit wenn ist ein Scheitelpunkt eines konvexen Polygons, der aus Punkten von gebildet wird .
Das Problem ist, dass ich ein bisschen verwirrt bin mit der zeitlichen Komplexität . Die naivere Lösung wäre, ein konvexes Polygon in zu konstruieren und testen Sie ob ist einer der Eckpunkte.
Das Problem besteht darin, eine Linie zu finden, die durchgehtp und hat alle anderen Punkte in S. Auf der einen Seite. Dies ist ein zweidimensionales lineares Programmierproblem, das gelöst werden kannO ( 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 sop 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< m x 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 inQ liegt direkt darüber p (das heißt, wenn irgendein Punkt in Q hat Koordinaten (0,y) für einige y>0 ), dann p kann nicht auf dem oberen Rumpf liegen. Es ist einfach, diesen Zustand einzucheckenO(n) Zeit.
Nehmen Sie also keine Punkte anQ 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 darunterp egal; ignoriere sie einfach.) Lass
WennmL<MR , dann jeder Punkt in Q liegt streng unter der Linie y=mx , damit p ist ein Scheitelpunkt des oberen Rumpfes.
WennmL=MR , dann die Linie y=mx geht durch einen Punkt in L und ein Punkt in R und kein Punkt in Q ist streng über dieser Linie. Damitp liegt an einer Kante des oberen Rumpfes, ist aber kein Scheitelpunkt.
WennmL>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 berechnenmL und MR im O(n) Zeit. Wir müssen eigentlich nicht rechnenm .
quelle