Convex hull smallest convex set
containing all the
points
Convex hull smallest convex set
containing all the
points
Convex hull smallest convex set
containing all the
3
points
2
4
1
start = 1
1.next = 2 = 3.prev
2.next = 3 = 4.prev
3.next = 4 = 1.prev
4.next = 1 = 2.prev
representation = circular doubly-linked list of points
on the boundary of the convex hull
Jarvis march
s
(assume no 3 points colinear)
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
p
find the point that
appears most to the
right looking from 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
ps
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
qi
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
BA
A prev(A)
else
AB
BC
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)
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
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)
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)
T(n) = T(n-1) +
T(n) = O(n)
2
n
SED-with-2-points
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)
T(n) = T(n-1) +
T(n) = O(n)
2
n
SED-with-point
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(I,B)
md(l {x},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
© Copyright 2026 Paperzz