Cercle de clôture maximal d'un rayon donné

19

J'essaie de trouver une approche au problème suivant:

Étant donné l'ensemble du point et du rayon , trouvez le point central du cercle, de sorte que le cercle contienne le nombre maximal de points de l'ensemble. Le temps d'exécution doit être .r O ( n 2 )SrO(n2)

Au début, cela semblait être quelque chose de similaire au plus petit problème de cercle englobant, qui peut facilement être résolu dans . L'idée était de mettre un centre arbitraire et encerclent tout point de . Ensuite, étape par étape, remplacez le cercle pour toucher les points les plus à gauche / à droite et rétrécissez le cercle au rayon donné, évidemment, cela ne fonctionnera pas.SO(n2)S

com
la source

Réponses:

7

Je ne sais pas comment résoudre ce problème en temps , mais un algorithme existe.O ( n 2 log n )O(n2)O(n2logn)

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(si)siirP={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)n1C(si)C ( s i )2(n1)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)

Wu Yin
la source
2
L'arrangement des cercles peut être construit en temps (avec une probabilité élevée) en utilisant un algorithme incrémental randomisé standard. En fait, le temps d'exécution est , où est le nombre de paires de cercles qui se croisent. Consultez votre manuel de géométrie informatique préféré. O ( n log n + k ) kO(n2)O(nlogn+k)k
JeffE
2

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.

putnampp
la source
1

À 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 ) )2n2O(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+EF=2O(n2)

stack99
la source
Si cela doit être lu comme un complément à la réponse acceptée et ne doit pas être lu seul (ce que je ne connais pas, car je ne connais pas ce sujet), vous devez être explicite à ce sujet.
babou