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(nlog⁡n)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(n2log⁡n)

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(nregistro⁡n)


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(nregistro⁡n)kdO(nregistro⁡n)O(registro⁡n)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(nregistro⁡n)
— 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(nregistro⁡n)

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(registro⁡n)O(nregistro⁡n)O(nregistro⁡n)

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)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.