覆盖问题(发送方和接收方)


14

我尝试解决以下覆盖问题。

有发射器,覆盖范围为1km,接收器。在确定所有接收器都被任何发送器覆盖。所有接收器和发送器均由其和坐标表示。nnO(nlogn)xy

我可以使用的最先进的解决方案采用。对于每个接收器,请按与当前接收器的距离对所有发送器进行排序,然后选择距离最短的发送器,并且该最短距离应在0.5 km之内。O(n2logn)

但是天真的方法看起来在时间复杂度要好得多。只需计算所有成对的发射器和接收器之间的所有距离。O(n2)

我不确定是否可以在此问题中应用范围搜索算法。例如,kd-trees使我们能够找到这样的范围,但是我从未见过示例,并且不确定是否存在用于圆的范围搜索。

给定的复杂度假设解决方案应在某种程度上类似于排序。O(nlogn)


1
如果预期时间可以,我想您可以在发送器上建立一个树(以时间),然后为每个接收器执行最近的邻居查询(以每个接收器的平均时间)。这应该可以解决问题,但是我认为您需要最坏的情况。当您在树中执行多个最近的邻居查询时,似乎有一些技巧可以加快速度。k d O n log n O log n k dO(nlogn)kdO(nlogn)O(logn)kd
utdiscant 2012年

1
我猜想扫描线算法可以达到目的:通过x坐标对发送器和接收器进行排序,并逐步浏览列表。对可行的发射器进行巧妙的管理至关重要。
拉斐尔

@Raphael,能否请您详细说明一下,在最坏的情况下看起来会很慢。
com

1
我认为值得一看Fortune在飞机上计算Voronoi图的算法。它可以在,并给出一个Voronoi图,您的问题将变得很容易。O(nlogn)
Syzygy'5

Answers:


4

您可以使用Voronoi图以及Kirkpatrick的数据结构来解决此问题。

就像Raphael和Syzygy所建议的那样,您可以使用Fortune的(扫描线)算法来创建Voronoi图。最坏的情况:。Øñ日志ñ

Voronoi图将具有一堆多边形,每个多边形包含一个发射器。多边形内的任何点最接近该发射器。因此,如果可以找出哪个多边形包含接收器,则可以通过某种方式找出它所在的多边形来找到与其最接近的发射器。此后,检查该发射器是否在。1个 公里

要确定哪个Voronoi多边形包含接收器,请首先对图中的每个多边形进行三角测量。现在您有了一个三角形网格。接下来,使用柯克帕特里克(Kirkpatrick)的数据结构来定位时间中包含给定点的任何三角形,这是最坏的情况。构造Kirkpatrick的数据结构需要最坏的情况。一旦知道了三角形,便会知道包含该三角形的多边形,从而知道最近的发射器。对所有接收者执行此操作将是,这是最坏的情况。Ø日志ñØñ日志ñØñ日志ñ

Voronoi图中的每个像元都是一个凸多边形,可能是无边界的。

...

[n个站点的Voronoi图的顶点数] V≤2n-5

www.cs.arizona.edu

Voronoi图中的每个多边形都是凸多边形。因此,由于凸多边形的三角剖分需要时间,是边数,因此我们可以高效地对每个像元进行三角剖分。如果您担心三角剖分可能是病理性的(我们可能有单元格,每个单元格具有边),请考虑一下。Voronoi图具有个顶点(请参见上面的引用)。Voronoi图的三角剖分是平面的,稀疏图也是平面的,因此具有边和面。因此,特定单元的三角剖分可能需要,但是整体三角剖分也需要ΘvvññØñØñØñØñ。(基本上,我们不会遇到带有边的单元格,对于平面图,这将导致太多三角形)。Øñ

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.