Je ne sais pas comment résoudre ce problème en temps , mais un algorithme existe.O ( n 2 log n )O ( n2)O ( n2Journaln )
Soit le cercle dont le centre est , le ème point, de rayon . Il n'est pas difficile de trouver que l'ensemble de points peut être entouré par un cercle de rayon si l'intersection de n'est pas vide. De plus, si n'est pas vide, il doit y avoir quelques points dans posés sur certains (la frontière de ). Donc, pour chaque et chaque point de sa liaison, nous essayons de trouver combien de cercles contiennents i i r P = { p 0 , p 1 , … , p m } r I ( P ) C ( p 0 ) , C ( p 1 ) , … , C ( p m ) I ( P ) I ( P ) bd C ( p i )C( sje)sjejerP={p0,p1,…,pm}rI(P)C(p0),C(p1),…,C(pm)I(P)I(P)bdC(pi)C ( s i ) p p pC(pi)C(si)pp . Le nombre maximum parmi tous les sera la réponse à ce problème.p
Examinons les points dans . Il y a une correspondance un à un entre les points sur et le nombre réel dans . Pour chaque cercle , l'intersection entre et peut être représentée par un intervalle . Donc, pour tous les cercles autres que , il y a au plus intervalles (certains cercles peuvent ne pas croiser ). Le nombre maximal peut être trouvé facilement en triant les points finaux d'intervalle, en les balayant dans l'ordre et en comptant le nombre de chevauchement actuel. Pour chaquebd C ( s i ) [ 0 , 2 π ) C ( s j ) C ( s j ) bd C ( s i ) [ b e g i n j , e n d j ] C ( s i ) n - 1 C ( s i ) 2bdC(si)bdC(si)[0,2π)C(sj)C(sj)bdC(si)[beginj,endj]C(si)n−1C(si)C ( s i )2(n−1)C(si) , cette étape peut être effectuée en temps , et il y a cercles, donc la complexité temporelle de cet algorithme est .n O ( n 2 log n )O(nlogn)nO(n2logn)
Je pense que la question difficile est de savoir si le cercle que vous avez sélectionné est réellement "maximal" dans l'ensemble. La seule façon dont je peux penser pour déterminer cela est d'essayer toutes les combinaisons possibles des points et de tester la taille du cercle qui les entoure.
Vous pouvez cependant réduire l'espace de recherche en divisant d'abord l'espace ponctuel en une grille de cellules carrées de largeur 2r. Localisez ensuite la cellule avec la plus grande densité. Puisque vous avez déjà localisé un cercle de X points, vous pouvez conclure que si un cercle existe avec plus de points, il doit contenir au moins X points. Et utilisez-le comme point de départ pour tester les différentes combinaisons de points.
Si vous recherchez uniquement un ensemble de points susceptibles d'être maximaux, vous pourrez peut-être réduire davantage le nombre de combinaisons que vous devez tester en sélectionnant les points qui se trouvent dans un quartier de cellules où la densité du quartier est supérieur à X.
Cela dit, les deux «réductions» peuvent échouer et, dans le pire des cas, vous calculerez des cercles pour toutes les combinaisons possibles de points.
la source
À Chazelle, B .; Lee, article de DT Computing 36, 1-16 (1986), théorème 3 à la page 15, il déclare que l'algorithme de recherche de cercle englobant maximum prend un coût en temps .O(n2)
Je pense que la clé est toujours l' algorithme de construction de graphe d'intersection qu'il mentionne tôt (ou voir Edelsbrunner, H. (1987), Algorithms in Combinatorial Geometry, chapitre 7). Ensuite, la découverte du cercle entourant maximun devrait être simple.O(n2)
Apparemment, ce problème équivaut à trouver le point couvert par le nombre maximum de cercles donnés et il est facile de savoir que seuls les points majoritairement coupés par n cercles donnés doivent être considérés comme candidats. (Cela conduit également directement un algorithme ) O ( n 2 l o g ( n ) )2n2 O(n2log(n))
Cependant, en utilisant l' algorithme de construction mentionné ci-dessus , il conduit également un algorithme pour ce problème. Parce que le graphe d'intersection construit avec des sommets comme points d'intersection et des arêtes comme des arcs est un graphe plan d'Euler. Ainsi, on peut simplement parcourir tous les arcs à travers un cycle d'Euler et un ordre d'arcs indexés par les index des cercles auxquels il appartient et des informations sur si un arc est un "arc de sortie" (courbé vers l'arrière) ou "entrant dans l'arc" ( courbe vers l'avant) pour le sommet rencontré pendant le déplacement sur lequel cet arc est incident sera enregistré.O ( n 2 )O(n2) O(n2)
Selon le théorème de Jordan, un sommet d'intersection n'est entouré par un cercle que s'il rencontre d'abord un "arc de fuite" appartenant à ce cercle ou s'il a un arc incident appartenant à ce cercle. Ainsi, après tout le voyage, le cercle de confinement maximal peut être facilement trouvé. C'est similaire au cas de décider des temps de couverture pour des points avec des intervalles ordonnés le long d'une ligne droite (ou c'est-à-dire la version 1D de ce problème englobant), sauf que l'ordre a déjà été donné par le voyage. Alors que par le formulaire d'Euler pour un graphique planaire, le nombre total d'arcs est linéaire avec le nombre de sommets, et comme il n'est pas nécessaire d'enregistrer à nouveau les informations associées lors du retour vers les sommets déjà visités, par prise de contact lemme, le coût total en temps sera .O ( n 2 )V+E−F=2 O(n2)
la source