English

The Presort Hierarchy for Geometric Problems

Computational Geometry 2026-05-18 v1 Data Structures and Algorithms

Abstract

Many fundamental problems in computational geometry admit no algorithm running in o(nlogn)o(n \log n) time for nn planar input points, via classical reductions from sorting. Prominent examples include the computation of convex hulls, quadtrees, onion layer decompositions, Euclidean minimum spanning trees, KD-trees, Voronoi diagrams, and decremental closest-pair. A classical result shows that, given nn points sorted along a single direction, the convex hull can be constructed in linear time. Subsequent works established that for all of the other above problems, this information does not suffice. In 1989, Aggarwal, Guibas, Saxe, and Shor asked: Under which conditions can a Voronoi diagram be computed in o(nlogn)o(n \log n) time? Since then, the question of whether sorting along TWO directions enables a o(nlogn)o(n \log n)-time algorithm for such problems has remained open and has been repeatedly mentioned in the literature. In this paper, we introduce the Presort Hierarchy: A problem is 1-Presortable if, given a sorting along one axis, it permits a (possibly randomised) o(nlogn)o(n \log n)-time algorithm. It is 2-Presortable if sortings along both axes suffice. It is Presort-Hard otherwise. Our main result is that quadtrees, and by extension Delaunay triangulations, Voronoi diagrams, and Euclidean minimum spanning trees, are 2-Presortable: we present an algorithm with expected running time O(nlogn)O(n \sqrt{\log n}). This addresses the longstanding open problem posed by Aggarwal, Guibas, Saxe, and Shor (albeit randomised). We complement this result by showing that some of the other above geometric problems are also 2-Presortable or Presort-Hard.

Keywords

Cite

@article{arxiv.2602.08843,
  title  = {The Presort Hierarchy for Geometric Problems},
  author = {Ivor van der Hoog and Eva Rotenberg and Jack Spalding-Jamieson and Lasse Wulf},
  journal= {arXiv preprint arXiv:2602.08843},
  year   = {2026}
}
R2 v1 2026-07-01T10:28:13.196Z