Given a set $P$ of $n$ points and a set $S$ of $m$ disks in the plane, the disk coverage problem asks for a smallest subset of disks that together cover all points of $P$. The problem is NP-hard. In this paper, we consider a line-separable unit-disk version of the problem where all disks have the same radius and their centers are separated from the points of $P$ by a line $\ell$. We present an $O((n+m)\log(n+m))$ time algorithm for the problem. This improves the previously best result of $O(nm+ n\log n)$ time. Our techniques also solve the line-constrained version of the problem, where centers of all disks of $S$ are located on a line $\ell$ while points of $P$ can be anywhere in the plane. Our algorithm runs in $O((n+m)\log (m+ n)+m \log m\log n)$ time, which improves the previously best result of $O(nm\log(m+n))$ time. In addition, our results lead to an algorithm of $O(n^3\log n)$ time for a half-plane coverage problem (given $n$ half-planes and $n$ points, find a smallest subset of half-planes covering all points); this improves the previously best algorithm of $O(n^4\log n)$ time. Further, if all half-planes are lower ones, our algorithm runs in $O(n\log n)$ time while the previously best algorithm takes $O(n^2\log n)$ time.
翻译:给定平面上$n$个点的集合$P$和$m$个圆盘的集合$S$,圆盘覆盖问题要求找出能够覆盖$P$中所有点的最小圆盘子集。该问题是NP难问题。本文考虑该问题的一个线性可分单位圆盘版本,其中所有圆盘具有相同半径,且其圆心与$P$中的点被一条直线$\ell$分隔。我们提出一个$O((n+m)\log(n+m))$时间的算法来解决该问题,改进了此前最优的$O(nm+n\log n)$时间结果。我们的技术还解决了该问题的直线约束版本,其中$S$中所有圆盘的圆心位于一条直线$\ell$上,而$P$中的点可位于平面任意位置。该算法运行时间为$O((n+m)\log(m+n)+m\log m\log n)$,改进了此前最优的$O(nm\log(m+n))$时间结果。此外,我们的结果还导出一个用于半平面覆盖问题(给定$n$个半平面和$n$个点,找出覆盖所有点的最小半平面子集)的$O(n^3\log n)$时间算法,改进了此前最优的$O(n^4\log n)$时间算法。进一步地,若所有半平面均为下半平面,我们的算法运行时间为$O(n\log n)$,而此前最优算法需要$O(n^2\log n)$时间。