您可以使用Voronoi图以及Kirkpatrick的数据结构来解决此问题。
就像Raphael和Syzygy所建议的那样,您可以使用Fortune的(扫描线)算法来创建Voronoi图。最坏的情况:。Ø(ñ日志n )
Voronoi图将具有一堆多边形,每个多边形包含一个发射器。多边形内的任何点最接近该发射器。因此,如果可以找出哪个多边形包含接收器,则可以通过某种方式找出它所在的多边形来找到与其最接近的发射器。此后,检查该发射器是否在。1 公里
要确定哪个Voronoi多边形包含接收器,请首先对图中的每个多边形进行三角测量。现在您有了一个三角形网格。接下来,使用柯克帕特里克(Kirkpatrick)的数据结构来定位时间中包含给定点的任何三角形,这是最坏的情况。构造Kirkpatrick的数据结构需要最坏的情况。一旦知道了三角形,便会知道包含该三角形的多边形,从而知道最近的发射器。对所有接收者执行此操作将是,这是最坏的情况。O(对数n )Ø(ñ日志n )Ø(ñ日志n )
Voronoi图中的每个像元都是一个凸多边形,可能是无边界的。
...
[n个站点的Voronoi图的顶点数] V≤2n-5
― www.cs.arizona.edu
Voronoi图中的每个多边形都是凸多边形。因此,由于凸多边形的三角剖分需要时间,是边数,因此我们可以高效地对每个像元进行三角剖分。如果您担心三角剖分可能是病理性的(我们可能有单元格,每个单元格具有边),请考虑一下。Voronoi图具有个顶点(请参见上面的引用)。Voronoi图的三角剖分是平面的,稀疏图也是平面的,因此具有边和面。因此,特定单元的三角剖分可能需要,但是整体三角剖分也需要Θ (v )vññO(n)O(n)O(n)O(n)。(基本上,我们不会遇到带有边的单元格,对于平面图,这将导致太多三角形)。O(n)