Fact-checked by Grok 2 weeks ago

Graham scan

The Graham scan is an algorithm in computational geometry for computing the convex hull of a finite set of two-dimensional points, which is the smallest convex polygon enclosing all the points. Proposed by Ronald L. Graham in 1972, it provides an efficient method to identify the boundary points that form this hull, with a time complexity of O(n log n), where n is the number of input points, primarily due to an initial sorting step. The algorithm is fundamental in the field, enabling applications in computer graphics, robotics, and geographic information systems by efficiently determining the outer envelope of point sets. The process begins by selecting the point with the lowest y-coordinate as the starting point P0, breaking ties by choosing the one with the lowest x-coordinate to ensure it lies on the . The remaining points are then sorted in increasing order of the polar angle they subtend with respect to P0, measured counterclockwise, with ties resolved by increasing distance from P0 to handle collinear points. This sorting step, which takes O(n log n) time, orders the points in a way that traces a potential boundary around the hull. Following sorting, the algorithm performs a linear scan through the ordered points while maintaining a to build the hull incrementally. It starts by pushing the first three points onto the ; for each subsequent point, it checks the formed by the last three points on the (or the new point with the top two). If the turn is (indicating a non- dent), the middle point is popped from the , and the check is repeated until a counterclockwise turn is achieved or the has fewer than two points; the new point is then pushed. This ensures only vertices remain, completing the hull in O(n) time after sorting. The final holds the vertices in counterclockwise order, starting and ending with P0.

Overview

Definition and Purpose

The Graham scan is an in that computes the of a of points in the by sorting the points by polar angle relative to a reference point and scanning to eliminate those not on the hull boundary. The itself is the smallest containing all input points, often visualized as the tightest enclosing them. The algorithm takes as input a set of n points in space, typically represented by their Cartesian coordinates and assumed to be in (no three collinear). Its output is the sequence of vertices forming the , listed in counterclockwise order around the boundary. The primary purpose of the Graham scan is to identify this minimal enclosing convex polygon efficiently, addressing the fundamental problem that underpins many advanced techniques in . It finds application in areas such as in , , and defining boundaries in geographic information systems.

History

The Graham scan algorithm was introduced by Ronald Lewis Graham, a prominent American mathematician known for his contributions to and . In 1972, Graham published the algorithm in his paper "An Efficient Algorithm for Determining the of a Finite Planar Set," appearing in Information Processing Letters. This work presented an innovative approach to computing the of a of points in the plane, achieving O(n log n) through by x-coordinate followed by a linear scan to eliminate interior points. The original algorithm sorted points lexicographically and built the hull using a stack-based scan, assuming no vertical lines but handling collinear points via orientation tests. The algorithm that is now commonly known as the Graham scan uses polar-angle relative to the lowest y-coordinate point (with ties by x-coordinate), followed by a similar scanning procedure; this variant preserves the O(n log n) complexity and is the standard form described in modern textbooks. The algorithm emerged amid the rapid growth of as a formal in the early , a period when researchers sought efficient solutions to geometric problems that had previously relied on quadratic-time brute-force methods. Graham's contribution was recognized as one of the inaugural algorithms in the field, highlighting the potential of sorting-based techniques for planar point sets. It coincided with parallel developments, such as Franco Preparata's early explorations of geometric data structures and A. Jarvis's 1973 gift-wrapping algorithm (also known as Jarvis march), which offered output-sensitive performance but worse worst-case bounds. Over time, the Graham scan gained prominence as a standard method due to its balance of simplicity, implementability, and efficiency compared to earlier O(n²) approaches. Subsequent refinements addressed robustness issues, such as handling collinear points and degenerate cases, through modifications that preserved the core O(n log n) complexity while improving numerical stability in practical implementations. These evolutions solidified its role as a foundational technique in computational geometry textbooks and applications.

Algorithm

Preprocessing: Finding the Lowest Point

The preprocessing step of the Graham scan algorithm begins by identifying a pivot point P_0 from the input set of n points in the , which serves as the for subsequent polar . This is selected as the point with the lowest y-coordinate; in case of ties among multiple points sharing this minimum y-coordinate, the one with the smallest x-coordinate (i.e., the leftmost) is chosen. This selection ensures that P_0 is guaranteed to be a on the , as it represents an in the downward direction—no other point can lie below it, preventing it from being interior to the . By starting from this point, avoids complications arising from collinear points along the bottom edge, as the leftmost choice among ties promotes a consistent counterclockwise ordering in the later phases. The P_0 then acts as the for polar to all other points. For small input sizes, the algorithm handles trivial cases directly: if n = 1, the convex hull consists solely of that single point; if n = 2, the hull is the connecting the two points. For n = 3, the points form a if non-collinear (all three on the hull) or degenerate to the two endpoints if collinear. This preprocessing requires a single linear scan through the points to find the minimum y-coordinate and resolve any ties by comparing x-coordinates, achieving O(n) time complexity.

Sorting by Polar Angle

After identifying the point P_0 with the lowest y-coordinate (and lowest x-coordinate in case of ties) as the , the Graham scan proceeds by considering all other points relative to P_0, effectively translating the so that P_0 becomes the for angular comparisons. The remaining n-1 points are then sorted in increasing order of the polar angle they form with P_0 and the positive x-axis, proceeding in a counterclockwise . This ordering prepares the points for sequential processing along the potential boundary of the . To avoid explicit computation of angles, which would require trigonometric functions and potential floating-point precision issues, the sorting uses the cross product of vectors to determine relative angular order. For two points A and B, form the vectors \overrightarrow{P_0A} = (A_x - P_{0.x}, A_y - P_{0.y}) and \overrightarrow{P_0B} = (B_x - P_{0.x}, B_y - P_{0.y}). The cross product is given by: (A_x - P_{0.x})(B_y - P_{0.y}) - (A_y - P_{0.y})(B_x - P_{0.x}). If this value is positive, A precedes B in counterclockwise order (i.e., A has a smaller polar angle than B); if negative, B precedes A; if zero, the points are collinear with P_0. This orientation test leverages the geometric property that the sign of the cross product indicates the turn direction. In the case of collinear points (cross product zero), the tie is broken by comparing Euclidean distances from P_0, sorting in increasing order of distance (closest points first). This ensures that, during the subsequent scanning phase, inner collinear points can be discarded, retaining only the farthest point on each ray from P_0 for the outer boundary. The sorting is performed using a comparison-based algorithm such as merge sort or quicksort, yielding an overall time complexity of O(n \log n) for this phase. By arranging the points in this angular order around P_0, the Graham scan guarantees that the sorted list traverses the boundary in a manner that facilitates linear-time identification of hull vertices in , contributing to the algorithm's optimal asymptotic .

Scanning and Building the Hull

The scanning phase of the Graham scan algorithm constructs the by iteratively processing the points sorted in increasing order of polar around the lowest point P_0. This phase begins by initializing a with the first two points in the sorted list, P_0 and P_1. For each point P_i where i ranges from 2 to n-1, the algorithm examines the formed by the last two points on the and P_i. While the has at least two points and these three points form a right turn ( ) or are collinear, the last point on the is removed (popped). Once a left turn (counterclockwise ) is confirmed or the has fewer than two points, P_i is added (pushed) to the . This process ensures that portions are eliminated, maintaining only (left) turns on the . The turn test is performed using the cross-product formula: for points A = (A_x, A_y), B = (B_x, B_y), C = (C_x, C_y), (B_x - A_x)(C_y - A_y) - (B_y - A_y)(C_x - A_x) If this value is less than or equal to zero, it indicates a right turn or collinear points, prompting the removal of B. After processing all points, the stack contains the vertices of the convex hull in counterclockwise order, starting with P_0 and ending with the last hull vertex. The hull is closed by connecting the final vertex back to P_0. This single-pass scanning eliminates all internal and concave points efficiently. Handling of collinear points during scanning depends on the specific variant and requirements: if the cross-product equals zero, the middle point may be discarded to include only extreme hull vertices (using ≤ 0 in the test), or retained if all boundary points are desired. The original formulation assumes no three points are collinear for simplicity, but practical implementations adjust the inequality (e.g., strict >0 for left turns) to manage degeneracies robustly.

Analysis

Time and Space Complexity

The Graham scan algorithm achieves a of O(n log n) in both the worst and average cases for a set of n points in the , with the dominant cost arising from the of points by polar relative to the lowest y-coordinate point. The initial preprocessing step to identify this lowest point requires O(n) time via a single linear pass over the input. The core scanning phase, which constructs the by maintaining a and performing tests, also operates in O(n) time overall, since each point is pushed onto the stack at most once and popped at most once during the process, leading to an amortized O(1) cost per point. The of the standard Graham scan is , accounting for the of the input points, a temporary for the sorted order, and the used during construction, which holds at most points in the worst case. Implementations employing in-place sorting for the polar angle ordering—such as adaptations of or with custom comparators—can minimize auxiliary space to O(1) beyond the input and output . To derive the time bound, note that sorting by polar angle demands Ω(n log n) comparisons in the standard algebraic , providing a tight lower bound that meets through efficient comparison-based . The O(n) contributions from preprocessing and scanning do not increase this asymptotic cost. Even in the best case, where points might exhibit favorable ordering, the time remains Θ(n log n) due to the unavoidable step; a linear runtime is theoretically possible only if points are pre-sorted by polar angle, but this assumption is not part of the general analysis. This O(n log n) performance renders the Graham scan asymptotically optimal for 2D computation under comparison-based models, aligning precisely with the established Ω(n log n) lower bound for the problem, proven via reduction from or element uniqueness in the .

Correctness Proof Sketch

The correctness of the Graham scan is established by verifying that the output consists precisely of the vertices in counterclockwise boundary order. A key during the scanning phase states that the points on the current form a chain in counterclockwise order, where every consecutive triple of points p_{j-1}, p_j, p_{j+1} produces a left turn, determined by a non-negative orientation test (≥ 0). This is proven by on the number of points processed after . For the base case, the is initialized with p_0 (lowest point) and p_1 (next in polar order), forming a trivial convex chain (degenerate segment). Processing p_2: while the has ≥2 points and the orientation p_0, p_1, p_2 indicates a non-left turn ( < 0 or =0 for strict hull excluding collinear intermediates), pop p_1; then push p_2. The resulting (either p_0, p_2 if popped, or p_0, p_1, p_2) satisfies the as a convex chain. In the inductive step, assume the invariant holds for the first k points, forming the convex hull prefix CH(P_k). When processing p_{k+1}, the algorithm pops points from the stack while the turn p_{j-1}, p_j, p_{k+1} is not a (cross product < 0), removing any concavity; appending p_{k+1} then maintains the left-turn property and convexity, as p_{k+1} lies outside or on the current hull due to the polar angle sorting. Popped points are guaranteed to lie inside the final hull, as their position inside the triangle formed by neighboring hull points and p_0 contradicts their membership in the . A supporting lemma ensures completeness: the polar angle from p_0 implies that no subsequent point p_i (with i > j) can lie inside the angular wedge defined by earlier points p_0 and p_j, preventing omission of vertices. The selection of the lowest p_0 and the farthest point among collinear candidates during further guarantees inclusion of all boundary extremes, while the scanning phase detects and resolves all concavities. Degenerate cases with collinear points are handled by secondary based on distance from p_0 when the is zero, and using ≤ 0 in the popping condition to retain only the extreme points on the edge and discard intermediates inside. The algorithm assumes or uses the test to manage collinearities without altering the . Formal verifications decompose the proof into local geometric properties, such as convexity preservation and point inclusion, using induction and invariants in proof assistants like Isabelle, confirming the algorithm's reliability even under degeneracies. The resulting implicitly forms a simple closed , separating the into interior and exterior regions as per the , ensuring all points are correctly classified.

Implementation

Pseudocode

The Graham scan algorithm can be expressed in pseudocode as follows, assuming an input set of n \geq 3 points in the plane, each represented as a structure with real-valued coordinates (x, y), and the points are in (no three collinear). This formulation integrates the preprocessing steps of pivot selection and polar-angle sorting with the scanning phase to construct the . A key helper function is the cross-product test, which determines the turn direction between three points o, a, and b:
cross(o, a, b) = (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x)
A positive value indicates a counterclockwise (left) turn, a negative value a (right) turn, and zero indicates . In the sorting comparator, points are ordered by increasing polar angle with respect to the pivot p_0; if two points have the same angle, the closer one (by ) precedes the farther one to handle potential collinearities without including interior points on the . During scanning, the condition \leq 0 ensures right turns and collinear points are removed to maintain convexity. The main procedure is:
GrahamScan(points):
    n = length(points)
    // Step 1: Find pivot [p0](/page/P0) (lowest y, then lowest x if tie)
    p0 = point with minimum (y, x) among points
    swap points[0] and [p0](/page/P0)  // p0 now at index 0

    // Step 2: Sort points[1..n-1] by polar angle with [p0](/page/P0), using cross-product comparator
    sort points[1..n-1] using comparator polarCompare([p0](/page/P0), p, q)
    // Where polarCompare(o, p, q):
    //   c = cross(o, p, q)
    //   if c != 0: return c
    //   else: return distSq(o, p) - distSq(o, q)
    //   (distSq(o, p) = (p.x - o.x)^2 + (p.y - o.y)^2)

    // Step 3: Build the [convex hull](/page/Convex_hull) (scan the sorted points)
    hull = empty [stack](/page/Stack)
    push points[0] to hull
    push points[1] to hull
    for i = 2 to n-1:
        while length(hull) >= 2 and cross(hull[-2], hull[-1], points[i]) <= 0:
            pop hull
        push points[i] to hull

    return hull  // Points in hull form the [convex hull](/page/Convex_hull) in counterclockwise order
This pseudocode produces the vertices in counterclockwise order starting from the . A related variant is Andrew's monotone chain , which achieves the same O(n log n) by points by x-coordinate (then y-coordinate) instead of polar angle, and constructing upper and lower hulls separately. The algorithm runs in O(n log n) time overall, dominated by the sorting step, and is straightforward to implement in programming languages such as Python or C++ using standard libraries for sorting and stack operations.

Numerical Robustness

The primary numerical robustness challenge in implementing the Graham scan arises from the orientation test, which relies on the cross product to determine whether three points form a left turn, right turn, or collinear configuration. In finite-precision floating-point arithmetic, the cross product value can be computed as near zero due to round-off errors, leading to misclassification of turns or erroneous detection of collinearity, especially for nearly collinear points or when coordinates are large. This can result in incorrect inclusion or exclusion of points on the convex hull, potentially producing a non-convex polygon or omitting extreme vertices. To address these issues, one approach is to employ exact arithmetic, such as using integer coordinates with arbitrary-precision big integers to compute the without rounding errors, ensuring precise decisions. Alternatively, adaptive precision methods like Shewchuk's robust geometric predicates can be used for the test; these predicates employ filtered exact arithmetic, starting with floating-point approximations and escalating to exact computations only when necessary, providing speed comparable to floating-point while guaranteeing correctness. Practical best practices include input coordinates to a normalized range to minimize overflow risks during multiplication in the computation, and introducing small perturbations to points to assume and avoid exact degeneracies. For collinear detection, an threshold—such as considering points collinear if the absolute value is less than $1 \times 10^{-9}—can be applied during and scanning to tolerate errors, though this must be tuned carefully to avoid over- or under-correction. Additionally, libraries like implement the Graham scan (via Andrew's variant) with built-in robust predicates, leveraging exact arithmetic kernels for reliable results in production environments. In practice, for input points with coordinates up to $10^9, 64-bit floating-point (double precision) arithmetic often suffices if the is computed using 64-bit intermediates to avoid intermediate rounding, as the final sign determination remains accurate under these constraints. Handling degeneracies explicitly is crucial: during polar angle sorting, collinear points should be ordered by distance from the base point to preserve the hull boundary, and in the scanning phase, chains of collinear points must be resolved by retaining only the farthest one (or all, depending on requirements) to prevent erroneous that could lead to infinite loops or malformed hulls. Failure to do so can amplify small errors into topological inconsistencies, such as self-intersecting edges.

Comparisons and Extensions

Comparison with Other Convex Hull Algorithms

The Graham scan, with its O(n log n) time complexity dominated by polar-angle sorting, contrasts with the Jarvis march (also known as gift wrapping), which achieves O(n h) time where h is the number of points on the convex hull. The Jarvis march is conceptually simpler, starting from the leftmost point and iteratively selecting the next hull vertex by finding the point that forms the smallest polar angle with the current edge, akin to wrapping a gift around the points. However, its performance degrades when h is large relative to n, such as in dense configurations where many points lie on the hull, making the Graham scan preferable for such cases due to its logarithmic factor independence from h. In practical implementations, the Jarvis march outperforms the Graham scan only on inputs with small h, like clustered points forming a sparse hull, but remains slower overall for typical large-scale datasets. Andrew's monotone chain algorithm also runs in O(n log n) time, matching the Graham scan's complexity, but employs a different strategy based on x-coordinate followed by y-coordinate, followed by linear scans to build upper and lower hulls separately. This Cartesian avoids the computational expense and numerical issues of polar-angle calculations, rendering it more robust to collinear points and degenerate cases where angles may be undefined or imprecise. While the Graham scan's polar ordering provides an intuitive counterclockwise traversal around the hull, Andrew's method is often viewed as a refined variant that simplifies implementation without sacrificing efficiency. For output-sensitive scenarios, Chan's algorithm improves upon the Graham scan with an O(n log h) time bound, making it asymptotically optimal for sparse hulls where h << n. It combines elements of the Graham scan—applying it to small subsets of points—and the , using a multi-phase approach that partitions the input, computes sub-hulls, and merges them via gift-wrapping steps on candidate hull points. This hybrid design excels when the hull is small, as the logarithmic factor scales with h rather than n, but it introduces additional overhead from subset management and merging, which can make it more complex to implement than the Graham scan. Empirical evaluations show Chan's algorithm underperforming the Graham scan in some practical settings due to these extra computations, despite its theoretical advantages for sparse distributions. The Quickhull algorithm, a randomized divide-and-conquer method, achieves expected O(n log n) time similar to the Graham scan but adapts to input geometry like quicksort, potentially running faster in practice for certain point distributions by recursively partitioning based on extreme points and discarding irrelevant regions. Its worst-case time is O(n²), however, on adversarial inputs where partitions remain unbalanced, whereas the Graham scan's sorting ensures consistent performance. Quickhull often proves quicker empirically for evenly distributed points, but the Graham scan's deterministic nature and angle-based intuition make it more reliable for general use without randomization risks. Unlike output-sensitive algorithms such as Chan's or Jarvis march, the Graham scan is non-adaptive to hull size h, as its sorting step processes all n points regardless of sparsity, which limits scalability in highly sparse cases but ensures predictable O(n log n) behavior. Its straightforward polar sorting and stack-based scanning render it particularly favored in educational contexts for illustrating convex hull concepts, as the angular ordering visually aligns with the hull's boundary traversal. The Graham scan is thus ideally chosen for datasets of moderate size n where balanced performance is needed, or when polar ordering facilitates visualization and debugging in geometric applications.

Variants and Improvements

One notable variant of the Graham scan is Andrew's monotone chain algorithm, which sorts the points lexicographically by x-coordinate (and then by y-coordinate for ties) before constructing the by building the lower and upper hulls in separate linear passes. This approach maintains the O(n log n) dominated by while avoiding the polar angle computation, thereby improving numerical robustness against floating-point precision issues in degenerate cases like collinear points. The Graham scan generalizes poorly to three dimensions because its reliance on polar angle sorting lacks a straightforward equivalent in higher-dimensional spaces, leading to inefficient or undefined ordering. For 3D convex hulls, alternative methods such as gift wrapping (Jarvis march) or incremental algorithms are preferred, as they achieve O(n log n) expected time without depending on angular coordinates. Parallel implementations of the Graham scan distribute the and scanning phases across multiple threads or processors to handle large datasets efficiently. For instance, the gScan algorithm preprocesses points on the GPU through two filtering rounds to discard interior points and partition by angle, followed by CPU-based hull finalization, yielding speedups of 6x to 7x over traditional implementations for up to 20 million points. Improvements to the Graham scan often incorporate preprocessing to eliminate interior points early, such as filtering via a bounding or eight-vertex constructed from extreme points, which reduces the input size in time and accelerates the subsequent by up to 77 times for dense point sets. Hybrid approaches combine the Graham with divide-and-conquer strategies, such as integrating quickhull's partitioning for initial approximation before applying the scan, to scale better for very large datasets by balancing recursive decomposition with linear scanning.

References

  1. [1]
    An Efficient Algorithm for Determining the Convex Hull of a Finite ...
    An Efficient Algorithm for Determining the Convex Hull of a Finite Planar Set · R. Graham · Published in Information Processing… 1 June 1972 · Mathematics, ...
  2. [2]
    Convex hull construction - Algorithms for Competitive Programming
    Oct 13, 2024 · Graham's scan Algorithm¶ · The algorithm first finds the bottom-most point · Next, all the other points are sorted by polar angle in clockwise ...Graham's scan Algorithm · Implementation · Monotone chain Algorithm
  3. [3]
    [PDF] 14 Convex Hulls
    Our third convex hull algorithm, called Graham's scan, first explicitly sorts the points in O(nlogn) and then applies a linear-time scanning algorithm to finish ...
  4. [4]
    [PDF] an efficient algorith for determining the convex hull of a finite planar set
    In this note we describe an algorithm which determines CH(S) in no more than (n log n)/. (log 2) + cn "operations" where c is a small positive constant which ...Missing: Ronald | Show results with:Ronald
  5. [5]
    The quickhull algorithm for convex hulls - ACM Digital Library
    Dec 1, 1996 · The convex hull of a set of points is the smallest convex set that contains the points. This article presents a practical convex hull ...
  6. [6]
    Convex Hull - Algorithms, 4th Edition
    Applications. Among oldest and most well-studied problems in computational geometry problems. Robot motion planning. Shortest perimeter fence enclosing P ...
  7. [7]
    On the identification of the convex hull of a finite set of points in the ...
    March 1973, Pages 18-21 ... On the identification of the convex hull of a finite set of points in the plane. Author links open overlay panel R.A. Jarvis.Missing: paper | Show results with:paper
  8. [8]
    A modification of Graham's algorithm for determining the convex hull ...
    Aug 7, 2025 · Oct 1998. Joseph O'Rourke · View · Graham, R.L.: An Efficient Algorithm for Determining the Convex Hull of a Finite Planar Set ...
  9. [9]
    [PDF] Convex Hull - csail
    May 6, 2011 · The Graham's scan algorithm begins by choosing a point that is definitely on the convex hull and then iteratively adding points to the convex ...
  10. [10]
    [PDF] CS3110 Spring 2016 Lecture 17 - Cornell: Computer Science
    Graham Scan starts with a point with the lowest y coordinate and sorts the other points by increasing angle. In lecture we started with the lowest x coordinate ...
  11. [11]
    [PDF] Chapter 33
    Apr 12, 2016 · That is, we look at the cross product, (p1 − p0) × (p2 − p0). This ... or (3) pi and pj have the same polar angle with respect to pk.
  12. [12]
    Convex Hull
    If the cross product is negative, p2 lies to the right of the line segment. Polar angle. Another core operation we are going to use below is the polar angle of ...
  13. [13]
    Convex Hull using Graham Scan - GeeksforGeeks
    Jul 23, 2025 · The Graham scan algorithm is a simple and efficient algorithm for computing the convex hull of a set of points. It works by iteratively adding ...
  14. [14]
  15. [15]
    Convex Hull (Graham's Scan, Jarvis March) - CSU083 - dmj.one
    Jan 18, 2025 · Space Complexity Analysis​​ Both algorithms require O(n) space, meaning space usage grows linearly with input size. Graham's Scan uses extra ...
  16. [16]
    [PDF] Computational Geometry: Homework 1 Answers
    Feb 4, 2010 · Prove the correctness of the Graham scan algorithm by proving the following facts. • Prove that the output stack contains all of the vertices of ...
  17. [17]
    None
    ### Proof of Correctness for Graham's Scan
  18. [18]
    LNAI 3763 - Mechanical Theorem Proving in Computational Geometry
    Mechanical Theorem Proving in Computational Geometry. 3. A common approach to verification is simulating the algorithm on certain examples. Typically these ...
  19. [19]
    Formal Verification of Graham's Scan Algorithm - ACM Digital Library
    Oct 12, 2025 · Graham's Scan algorithm is a widely-used method to compute convex hulls. This paper presents its formal verification using the Rocq Proof ...
  20. [20]
    [PDF] Classroom Examples of Robustness Problems in Geometric ...
    Jun 17, 2008 · The algorithm maintains the current hull as a circular list L = (v0,v1,...,vk−1) of its extreme points in counter-clockwise order.
  21. [21]
    [PDF] Robust Adaptive Floating-Point Geometric Predicates
    The orientation and incircle tests evaluate the sign of a matrix determinant. It is significant that only the sign, and not the magnitude, of the determinant is ...Missing: Graham | Show results with:Graham
  22. [22]
    Robustness Issues - CGAL 6.1 - Manual
    The source of the robustness problem is that the default hardware-supported arithmetic does not really fulfill the requirements of the algorithm.Missing: graham scan
  23. [23]
    [PDF] 1 Convex Hulls - Jeff Erickson
    Our next convex hull algorithm, called Graham's scan, first explicitly sorts the points in O(nlogn) and then applies a linear-time scanning algorithm to finish ...
  24. [24]
    [PDF] Convex Hulls: Comparing Theoretical and Practical Runtimes
    Dec 10, 2021 · Graham's scan algorithm was introduced by Ronald Graham in 1972 [5]. ... Graham, “An efficient algorithm for determining the convex hull of a.
  25. [25]
    [PDF] Convex Hull Algorithms - Activities
    Apr 10, 2015 · The convex hull problem finds a polygon containing all points. Algorithms include gift wrapping, Graham scan, and monotone chain.
  26. [26]
    Optimal output-sensitive convex hull algorithms in two and three ...
    Nov 30, 1995 · We present simple output-sensitive algorithms that construct the convex hull of a set ofn points in two or three dimensions in worst-case optimalO (n logh) ...
  27. [27]
    [PDF] Chan's Convex Hull Algorithm
    • The upper-hull plane-sweep algorithm runs in. O(n log n) time. – This algorithm is sometimes called “Graham Scan”. • The Gift Wrapping algorithm runs in O(nh) ...
  28. [28]
    [PDF] The Quickhull Algorithm for Convex Hulls - UF CISE
    This article presents a practical convex hull algorithm that combines the two-dimensional Quick- hull Algorithm with the general-dimension Beneath-Beyond ...
  29. [29]
    Difference between convex hull algorithms
    Jun 19, 2021 · My understanding is that Graham scan and Chan's are efficient, Graham scan on smallers sets and Chan's algorithm on bigger sets but what are ...Missing: comparison | Show results with:comparison
  30. [30]
    Another efficient algorithm for convex hulls in two dimensions
    A reevaluation of an efficient algorithm for determining the convex hull of a finite planar set. Information Processing Lett., 7 (1978), pp. 53-55.
  31. [31]
    [1508.05931] gScan: Accelerating Graham Scan on the GPU - arXiv
    Aug 22, 2015 · This paper presents a fast implementation of the Graham scan on the GPU. The proposed algorithm is composed of two stages: (1) two rounds of preprocessing ...
  32. [32]
    A Preprocessing Technique for Fast Convex Hull Computation
    In this paper, we propose a fast filtering technique that reduces the computational cost for computing a convex hull for a large set of points.
  33. [33]
    [PDF] A new Approach to Compute Convex Hull - CORE
    In this paper a hybrid method is proposed to compute convex hull. The method is based on two already existing convex hull algorithms i.e. quick hull and grahams.Missing: original | Show results with:original<|control11|><|separator|>
  34. [34]
    Designing and proving correct a convex hull algorithm with ...
    2.2.​​ Meikle and Fleuriot [28] use the Isabelle proof system to formally prove the correctness of a program computing convex hulls using Grahamʼs scan. Their ...