Problema de cobertura (transmissor e receptor)

14

Eu tento resolver o seguinte problema de cobertura.

Existem transmissores com área de cobertura de 1 km e n receptores. Decida em O ( n log n ) que todos os receptores são cobertos por qualquer transmissor. Todos os receptores e transmissores são representados por suas coordenadas x e y .nnO(nlogn)xy

A solução mais avançada que eu posso vir usa o . Para cada receptor, classifique todos os transmissores por distância a este receptor atual e, em seguida, leve o transmissor à distância mais curta e essa distância mais curta deve estar dentro de 0,5 km.O(n2logn)

Mas a abordagem ingênua parece muito melhor na complexidade do tempo . Apenas calcule toda a distância entre todos os pares de transmissor e receptor.O(n2)

Não tenho certeza se posso aplicar algoritmos de pesquisa por intervalo nesse problema. Por exemplo, o kd-trees nos permite encontrar esses intervalos, no entanto, nunca vi um exemplo, e não tenho certeza se há algum tipo de busca por círculos.

A complexidade fornecida supõe que a solução deva ser de algum modo semelhante à classificação.O(nregistron)

com
fonte
1
Se o tempo esperado estiver bom, acho que você poderia construir uma árvore k d sobre os transmissores (levando tempo O ( n log n ) ) e, em seguida, realizar uma consulta de vizinho mais próximo para cada receptor (fazendo uma média de O ( log n ) para cada receptor). Isso deve ser o truque, mas presumo que você precise da pior complexidade possível. Parece haver alguns truques para acelerar quando você está executando várias consultas de vizinhos mais próximos em uma árvore k d . O(nregistron)kdO(nregistron)O(registron)kd
utdiscant 25/05
1
Eu acho que um algoritmo de linha de varredura pode fazer o truque: classifique transmissores e receptores pela coordenada x e percorra a lista. O gerenciamento inteligente do conjunto de transmissores viáveis ​​é essencial.
Raphael
@Raphael, você pode elaborar um pouco mais, parece que vai ser muito lento no pior dos casos.
com
1
Eu acho que vale a pena dar uma olhada no algoritmo da Fortune para calcular um diagrama de Voronoi no avião. Funciona em e, dado um diagrama de Voronoi, seu problema se torna fácil. O(nregistron)
Syzygy

Respostas:

4

Você pode usar o diagrama de Voronoi, juntamente com a estrutura de dados de Kirkpatrick, para resolver esse problema.

Como Raphael e Syzygy sugeriram, você pode usar o algoritmo da Fortune (linha de varredura) para criar o diagrama de Voronoi. Pior caso: .O(nregistron)

O diagrama Voronoi terá vários polígonos, cada um contendo um transmissor. Qualquer ponto dentro do polígono é o mais próximo desse transmissor. Portanto, se você descobrir qual polígono contém o receptor, poderá encontrar o transmissor mais próximo, descobrindo de alguma forma em que polígono ele está. Depois disso, verifique se esse transmissor está a .1 km

Para determinar qual polígono de Voronoi contém o receptor, primeiro triangule cada polígono no diagrama. Agora você tem uma malha triangular. Em seguida, você usa a estrutura de dados de Kirkpatrick para localizar qualquer triângulo que contenha um determinado ponto no tempo , na pior das hipóteses. Construir a estrutura de dados de Kirkpatrick leva O ( n log n ) ao pior caso. Depois de conhecer o triângulo, você saberá o polígono que o contém e, portanto, o transmissor mais próximo. Fazer isso para todos os receptores será O ( n log n ) , na pior das hipóteses.O(registron)O(nregistron)O(nregistron)

Cada célula em um diagrama de Voronoi é um polígono convexo, possivelmente ilimitado.

...

O número de vértices [de um diagrama de Voronoi de n sites] V ≤ 2n-5

- www.cs.arizona.edu

Cada polígono em um diagrama de Voronoi é um polígono convexo. Portanto, como a triangulação de um polígono convexo levaΘ(v)vnnO(n)O(n)O(n)O(n)O(n)

Realz Slaw
fonte