É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 ?
Un algorithme de force brute consisterait à parcourir chaque point et à compter le nombre de points qui sont à une distance inférieure à . Cela donnerait une complexité de .
Est-ce qu'il y a une meilleure approche?
ball
titre 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éponses:
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(n⋅log(n))
la source
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.
la source