Dado um conjunto de pontos e um raio . Qual é a complexidade de encontrar o ponto com maior número de pontos a uma distância menor que . Por exemplo, aquele que maximiza ?
Um algoritmo de força bruta seria ultrapassar todos os pontos e contar o número de pontos que estão a uma distância menor que . Isso daria uma complexidade de .
Existe uma abordagem melhor?
ball
título precisa ser do conjunto?) Uma idéia pode ser estimar se o raio é pequeno comparado à distância média ao vizinho mais próximo ou à ordem do diâmetro (e considerar abordagens para esses extremos (varredura plana para r pequenoRespostas:
Parece que um algoritmo sublinear para o Problema de Contagem de Gama de Esferas não é conhecido no momento.
No entanto, se você pudesse aceitar uma resposta não exata, poderia aproximar um disco por um conjunto de quadrados com orientação diferente. Para cada orientação, você terá que construir uma Árvore de Gama , que permitirá contar todos os pontos dentro de um quadrado em tempo (k - um número de pontos resultantes).O(log2(n)+k)
Cada árvore de intervalo exigirá memória , quanto melhor você desejar, mais orientações você deve usar. Por exemplo, duas orientações fornecerão um octógono , que aproxima um disco com erro de área inferior a 6%.O(n⋅log(n))
fonte
A resposta não é tão simples, há um estudo avançado dessa questão na teoria da complexidade; parece ser estudado, por exemplo, como o problema a seguir, focado em consultas rápidas de "contagem esférica da faixa". Sim, limites teóricos aprimorados são possíveis, mas esses parecem ser algoritmos abstratos que não foram implementados por ninguém. Se você deseja implementações reais, essa é uma pergunta diferente.
fonte