Chan's algorithm
In computational geometry, Chan's algorithm,[1] named after Timothy M. Chan, is an optimal output-sensitive algorithm to compute the convex hull of a set of
points, in 2- or 3-dimensional space.
The algorithm takes
time, where
is the number of vertices of the output (the convex hull). In the planar case, the algorithm combines an
algorithm (Graham scan, for example) with Jarvis march, in order to obtain an optimal
time. Chan's algorithm is notable because it is much simpler than the Kirkpatrick–Seidel algorithm, and it naturally extends to 3-dimensional space. This paradigm[2] has been independently developed by Frank Nielsen in his Ph. D. thesis.[3]
Algorithm
Initially, we assume that the value of is known and make a parameter
. This assumption is not realistic, but we remove it later. The algorithm starts by arbitrarily partitioning
into at most
subsets
with at most
points each. Then, it computes the convex hull of each subset
using an
algorithm (for example, Graham scan). Note that, as there are
subsets of
points each, this phase takes
time.
The second phase consists of executing Jarvis's march algorithm and using the precomputed convex hulls to speed up the execution. At each step in Jarvis's march, we have a point in the convex hull, and need to find a point
such that all other points of
are to the right of the line
. If we know the convex hull of a set
of
points, then we can compute
in
time, by using binary search. We can compute
for all the
subsets
in
time. Then, we can determine
using the same technique as normally used in Jarvis's march, but only considering the points that are
for some subset
. As Jarvis's march repeats this process
times, the second phase also takes
time, and therefore
time if
.
By running the two phases described above, we can compute the convex hull of points in
time, assuming that we know the value of
. If we make
, we can abort the execution after
steps, therefore spending only
time (but not computing the convex hull). We can initially set
as a small constant (we use 2 for our analysis, but in practice numbers around 5 may work better), and increase the value of
until
, in which case we obtain the convex hull as a result.
If we increase the value of too slowly, we may need to repeat the steps mentioned before too many times, and the execution time will be large. On the other hand, if we increase the value of
too quickly, we risk making
much larger than
, also increasing the execution time. Similar to strategy used by Chazelle and Matoušek's,[4] algorithm, Chan's algorithm squares the value of
at each iteration, and makes sure that
is never larger than
. In other words, at iteration
(starting at 0), we have
. The total running time of the algorithm is
To generalize this construction for the 3-dimensional case, an algorithm to compute the 3-dimensional convex hull should be used instead of Graham scan, and a 3-dimensional version of Jarvis's march needs to be used. The time complexity remains
.
Implementation
Chan's paper contains several suggestions that may improve the practical performance of the algorithm, for example:
- When computing the convex hulls of the subsets, eliminate the points that are not in the convex hull from consideration in subsequent executions.
- The convex hulls of larger point sets can be obtained by merging previously calculated convex hulls, instead of recomputing from scratch.
- With above idea, the dominant cost of algorithm lies in the pre-processing, i.e., the computation of the convex hulls of the groups. To reduce this cost, we may consider reusing hulls computed from the previous iteration and merging them as the group size is increased.
Extensions
Chan's paper contains some other problems whose known algorithms can be made optimal output sensitive using his technique, for example:
- Computing the lower envelope
of a set
of
line segments, which is defined as the lower boundary of the unbounded trapezoid of formed by the intersections.
- Hershberger[5] gave an
algorithm which can be sped up to
, where h is the number of edges in the envelope
- Constructing output sensitive algorithms for higher dimensional convex hulls. With the use of grouping points and using efficient data structures,
complexity can be achieved provided h is of polynomial order in
.
References
- ↑ Timothy M. Chan. "Optimal output-sensitive convex hull algorithms in two and three dimensions". Discrete and Computational Geometry, Vol. 16, pp.361–368. 1996.
- ↑ Frank Nielsen. "Grouping and Querying: A Paradigm to Get Output-Sensitive Algorithms". Discrete and Computational Geometry, LNCS 1763, pp. 250–257, 2000.
- ↑ Frank Nielsen. "Adaptive Computational Geometry". Ph. D thesis, INRIA, 1996.
- ↑ B. Chazelle Jiří Matoušek. "Derandomizing an output-sensitive convex hull algorithm in three dimensions". Computational Geometry, Vol. 5, pp.27–32. 1995.
- ↑ J. Hershberger. "Finding the upper envelope of n line segments in O(n log n) time". Information Processing Letters , Vol. 33, pp.169–174. 1989.