Complexité pour trouver une balle qui maximise le nombre de points qui s'y trouvent

10

Étant donné un ensemble de points et un rayon . Quelle est la complexité de trouver le point avec un plus grand nombre de points à une distance inférieure à . Par exemple, celui qui maximise ?x1,,xnR2rri=1n1xxir

Un algorithme de force brute consisterait à parcourir chaque point et à compter le nombre de points qui sont à une distance inférieure à r . Cela donnerait une complexité de O(n2) .

Est-ce qu'il y a une meilleure approche?

Manuel
la source
Avez-vous examiné les arbres quadruples et les arbres de partitionnement d'espace binaire? Je m'attendrais à ce qu'ils donnent un algorithme plus efficace dans la pratique, bien que je ne sache pas quel serait le pire temps de fonctionnement asymptotique.
DW
(Le centre du balltitre doit être de l'ensemble?) Une idée pourrait être d'estimer si le rayon est petit par rapport à la distance moyenne du plus proche voisin ou de l'ordre du diamètre (et envisager des approches pour ces extrêmes (balayage plan pour petit ) et le large espace entre les deux). r
greybeard
Le centre de la balle devrait être un mais s'il existe un meilleur algorithme sans cette condition, je suis également intéressé. xi
Manuel
Il ressemble à un algorithme plus rapide que car le problème de comptage de la distance de balle est inconnu. Cependant, si vous pouviez accepter une réponse non exacte, vous pourriez approximer un disque par un ensemble de carrés avec une orientation différente. Pour chaque orientation, vous devrez créer un arbre de plage ( en.wikipedia.org/wiki/Range_tree ), qui vous permettra de compter tous les points à l'intérieur d'un carré en temps (k - un certain nombre de points résultants). O ( l o g 2 ( n ) + k )O(n)O(log2(n)+k)
HEKTO
@HEKTO Suggérez-vous de construire une structure de coût pour demander si un point se trouve dans un rectangle à un coût ? Passez ensuite en revue tous les points pour compter combien d'autres points se trouvent dans la balle approximative? Cela pourrait fonctionner, mais alors, quelle serait la mémoire requise pour une telle structure de données? serait-il inférieur à ? O ( l o g 2 ( n ) + k ) O ( n 2 ) )O(nlog(n))O(log2(n)+k)O(n2))
Manuel

Réponses:

5

Il ressemble à un algorithme sublinéaire pour le problème de comptage de distance de balle n'est pas connu pour l'instant.

Cependant, si vous pouviez accepter une réponse non exacte, vous pourriez approximer un disque par un ensemble de carrés avec une orientation différente. Pour chaque orientation, vous devrez créer un arbre de plage , qui vous permettra de compter tous les points à l'intérieur d'un carré en temps (k - un certain nombre de points résultants).O(log2(n)+k)

Chaque arbre de plage nécessitera de la mémoire , plus vous voulez une meilleure approximation, plus vous devez utiliser d'orientations. Par exemple, deux orientations vous donneront un octogone , qui se rapproche d'un disque avec une erreur de zone inférieure à 6%.O(nlog(n))

HEKTO
la source
3

La réponse n'est pas si simple, il y a une étude avancée de cette question dans la théorie de la complexité; il semble être étudié, par exemple, comme le problème suivant, qui se concentre sur les requêtes rapides de "comptage de plages sphériques". Oui, des limites théoriques améliorées sont possibles, mais celles-ci semblent être des algorithmes abstraits qui n'ont été implémentés par personne. Si vous voulez des implémentations réelles, c'est une question différente.

vzn
la source