smallest convex set containing all the points Convex hull
smallest convex set containing all the points Convex hull
smallest convex set containing all the points Convex hull 3 2 start = 1 1.next = 2 = 3.prev 2.next = 3 = 4.prev 3.next = 4 = 1.prev 4.next = 1 = 2.prev 4 1 representation = circular doubly-linked list of points on the boundary of the convex hull
Jarvis march (assume no 3 points colinear) s find the left-most point
Jarvis march (assume no 3 points colinear) s find the point that appears most to the right looking from s
Jarvis march (assume no 3 points colinear) s find the point that appears most to the right looking from p p
Jarvis march (assume no 3 points colinear)
Jarvis march (assume no 3 points colinear)
Jarvis march (assume no 3 points colinear) s point with smallest x-coord p s repeat PRINT(p) q point other than p for i from 1 to n do if i p and point i to the right of line (p,q) then q i p q until p = s
Jarvis march (assume no 3 points colinear) Running time = O(n.h)
Graham scan (assume no 3 points colinear) O(n log n) homework start with a simple polygon containing all the points fix it in time O(n)
Graham scan (assume no 3 points colinear)
Graham scan (assume no 3 points colinear)
Graham scan (assume no 3 points colinear)
Graham scan (assume no 3 points colinear)
Graham scan (assume no 3 points colinear)
Graham scan (assume no 3 points colinear)
Graham scan (assume no 3 points colinear) A start B next(A) C next(B) repeat 2n times if C is to the right of AB then A.next C; C.prev A B A A prev(A) else A B B C C next(C)
Closest pair of points
Closest pair of points
Closest pair of points 2T(n/2) min(left,right)
Closest pair of points 2T(n/2) min(left,right)
Closest pair of points 2T(n/2) min(left,right)
Closest pair of points pre-processing X sort the points by x-coordinate Y sort the points by y-coordinate Closest-pair(S) if |S|=1 then return if |S|=2 then return the distance of the pair split S into S1 and S2 by the X-coord 1 Closest-pair(S1), 2 Closest-pair(S2) min(1,2) for points x in according to Y check 12 points around x, update if a closer pair found
Smallest enclosing disc
Smallest enclosing disc
Smallest enclosing disc Claim #1: The smallest enclosing disc is unique.
Smallest enclosing disc Claim #1: The smallest enclosing disc is unique.
Smallest enclosing disc SED(S) pick a random point x S (c,r) SED(S-{x}) if xDisc(c,r) then return (c,r) else return SED-with-point(S,x)
Smallest enclosing disc SED(S) pick a random point x S (c,r) SED(S-{x}) if xDisc(c,r) then return (c,r) else return SED-with-point(S,x) SED-with-point(S,y) pick a random point x S (c,r) SED-with-point(S-{x},y) if xDisc(c,r) then return (c,r) else return SED-with-2-points(S,y,x)
Smallest enclosing disc SED(S) pick a random point x S (c,r) SED(S-{x}) if xDisc(c,r) then return (c,r) else return SED-with-point(S,x) SED-with-point(S,y) pick a random point x S (c,r) SED-with-point(S-{x},y) if xDisc(c,r) then return (c,r) else return SED-with-2-points(S,y,x) SED-with-2-point(S,y,z) pick a random point x S (c,r) SED-with-2-points(S-{x},y,z) if xDisc(c,r) then return (c,r) else return circle given by x,y,z
Running time ? SED(S) pick a random point x S (c,r) SED(S-{x}) if xDisc(c,r) then return (c,r) else return SED-with-point(S,x) SED-with-point(S,y) pick a random point x S (c,r) SED-with-point(S-{x},y) if xDisc(c,r) then return (c,r) else return SED-with-2-points(S,y,x) SED-with-2-point(S,y,z) pick a random point x S (c,r) SED-with-2-points(S-{x},y,z) if xDisc(c,r) then return (c,r) else return circle given by x,y,z
Running time ? SED(S) pick a random point x S (c,r) SED(S-{x}) if xDisc(c,r) then return (c,r) else return SED-with-point(S,x) SED-with-point(S,y) pick a random point x S (c,r) SED-with-point(S-{x},y) if xDisc(c,r) then return (c,r) else return SED-with-2-points(S,y,x) O(n) SED-with-2-point(S,y,z) pick a random point x S (c,r) SED-with-2-points(S-{x},y,z) if xDisc(c,r) then return (c,r) else return circle given by x,y,z
Running time ? SED(S) pick a random point x S (c,r) SED(S-{x}) if xDisc(c,r) then return (c,r) else return SED-with-point(S,x) O(n) SED-with-point(S,y) pick a random point x S (c,r) SED-with-point(S-{x},y) if xDisc(c,r) then return (c,r) else return SED-with-2-points(S,y,x) 2 T(n) = T(n-1) + SED-with-2-points n T(n) = O(n)
Running time ? SED(S) pick a random point x S (c,r) SED(S-{x}) if xDisc(c,r) then return (c,r) else return SED-with-point(S,x) O(n) 2 T(n) = T(n-1) + SED-with-point n T(n) = O(n)
Smallest enclosing disc md(I,B) = smallest enclosing disc with B on the boundary and I inside Claim #2: if x is inside md(I,B) then md(I {x},B) = md(I,B)
Smallest enclosing disc md(I,B) = smallest enclosing disc with B on the boundary and I inside Claim #3: if x is outside of md(I,B) then md(I {x},B) = md(I,B {x})
Smallest enclosing disc md(I,B) = smallest enclosing disc with B on the boundary and I inside Claim #3: if x is outside of md(I,B) then md(I {x},B) = md(I,B {x}) x md(l {x},B) md(I,B)
Smallest enclosing disc md(I,B) = smallest enclosing disc with B on the boundary and I inside Claim #3: if x is outside of md(I,B) then md(I {x},B) = md(I,B {x}) Claim #2: if x is inside md(I,B) then md(I {x},B) = md(I,B) Claim #1: md(I,B) is unique