Complexidade para encontrar uma bola que maximize o número de pontos nela

10

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 ?x1,,xnR2rri=1n1xxir

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 r . Isso daria uma complexidade de O(n2) .

Existe uma abordagem melhor?

Manuel
fonte
Você já viu quadras e árvores de particionamento de espaço binário? Eu anteciparia que eles poderiam fornecer um algoritmo mais eficiente na prática, embora eu não saiba qual seria o pior caso de tempo de execução assintótico.
DW
(O centro do balltí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 pequeno r) e o amplo espaço no meio).
greybeard
O centro da bola deve ser um xi mas se houver um algoritmo melhor sem essa condição, também estou interessado.
Manuel
Parece que um algoritmo mais rápido que para o Problema de Contagem de Gama de Esferas é desconhecido. 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ê precisará criar uma Árvore de Gama ( en.wikipedia.org/wiki/Range_tree ), que permitirá contar todos os pontos dentro de um quadrado no tempo (k - um número de pontos resultantes). O(n)O(log2(n)+k)
HEKTO
@HEKTO Você está sugerindo a construção de uma estrutura de custo para consultar se um ponto está em um retângulo com um custo ? Então repasse todos os pontos para contar quantos outros pontos estão na bola aproximada? Isso poderia funcionar, mas então, qual seria a memória necessária para essa estrutura de dados? seria menor que ? O(nlog(n))O(log2(n)+k)O(n2))
Manuel

Respostas:

5

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

HEKTO
fonte
3

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.

vzn
fonte