The convex hull of a data set $P$ is the smallest convex set that contains $P$. In this work, we present a new data structure for convex hull, that allows for efficient dynamic updates. In a dynamic convex hull implementation, the following traits are desirable: (1) algorithms for efficiently answering queries as to whether a specified point is inside or outside the hull, (2) adhering to geometric robustness, and (3) algorithmic simplicity.Furthermore, a specific but well-motivated type of two-dimensional data is rank-based data. Here, the input is a set of real-valued numbers $Y$ where for any number $y\in Y$ its rank is its index in $Y$'s sorted order. Each value in $Y$ can be mapped to a point $(rank, value)$ to obtain a two-dimensional point set. In this work, we give an efficient, geometrically robust, dynamic convex hull algorithm, that facilitates queries to whether a point is internal. Furthermore, our construction can be used to efficiently update the convex hull of rank-ordered data, when the real-valued point set is subject to insertions and deletions. Our improved solution is based on an algorithmic simplification of the classical convex hull data structure by Overmars and van Leeuwen~[STOC'80], combined with new algorithmic insights. Our theoretical guarantees on the update time match those of Overmars and van Leeuwen, namely $O(\log^2 |P|)$, while we allow a wider range of functionalities (including rank-based data). Our algorithmic simplification includes simplifying an 11-case check down to a 3-case check that can be written in 20 lines of easily readable C-code. We extend our solution to provide a trade-off between theoretical guarantees and the practical performance of our algorithm. We test and compare our solutions extensively on inputs that were generated randomly or adversarially, including benchmarking datasets from the literature.
翻译:数据集$P$的凸包是包含$P$的最小凸集。本文提出了一种新的凸包数据结构,支持高效的动态更新。在动态凸包实现中,以下特性是可取的:(1) 高效回答指定点是否在凸包内部或外部的查询算法;(2) 满足几何鲁棒性;(3) 算法简洁性。此外,一类特定且具有充分动机的二维数据是基于排序的数据。在这里,输入是一组实数值$Y$,其中任意$y\in Y$的秩是其在$Y$排序顺序中的索引。$Y$中的每个值可以映射到一个点$(rank, value)$,从而得到一个二维点集。本文给出了一种高效、几何鲁棒、支持内部点查询的动态凸包算法。此外,我们的构造可用于有效更新排序数据的凸包,当实数值点集受到插入和删除操作时。我们的改进方案基于对Overmars和van Leeuwen~[STOC'80]经典凸包数据结构的算法简化,并结合了新的算法见解。我们的更新时间复杂度理论保证与Overmars和van Leeuwen相匹配,即$O(\log^2 |P|)$,同时允许更广泛的功能(包括基于排序的数据)。我们的算法简化将11种情况检查简化为3种情况检查,可用20行易读的C代码实现。我们扩展了解决方案,在理论保证与算法实际性能之间提供了权衡。我们通过随机或对抗性生成的输入(包括文献中的基准数据集)对我们的解决方案进行了广泛测试和比较。