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 .
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.
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.
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.
Respostas:
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 ( n logn )
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 (logn ) O ( n logn ) O ( n logn )
Cada polígono em um diagrama de Voronoi é um polígono convexo. Portanto, como a triangulação de um polígono convexo levaΘ ( v ) v n n O (n) O (n) O (n) O (n) O (n)
fonte