Cerchio di chiusura massimo di un dato raggio


19

Provo a trovare un approccio al seguente problema:

Dato l'insieme del punto e il raggio r , trova il punto centrale del cerchio, in modo tale che il cerchio contenga il numero massimo di punti dall'insieme. Il tempo di esecuzione dovrebbe essere O ( n 2 ) .SrO(n2)

Inizialmente sembrava essere qualcosa di simile al più piccolo problema del circolo chiuso, che può essere facilmente risolto in . L'idea era di impostare un centro arbitraria e circondare tutti i punti di S . Quindi, passo dopo passo, sostituisci il cerchio per toccare i punti più a sinistra / più a destra e riduci il cerchio al raggio dato, ovviamente, questo non funzionerà.O(n2)S

Risposte:


7

Non so come risolvere questo problema nel tempo , ma esiste un algoritmo O ( n 2 log n ) .O(n2)O(n2logn)

Let essere il cerchio il cui centro è s i , l' i punti -esimo, con raggio r . Non è difficile scoprire che il punto impostato P = { p 0 , p 1 , ... , p m } può essere racchiuso da un cerchio con raggio r se l'intersezione I ( P ) di C ( p 0 ) , C ( p 1 ) , ...C(si)siirP={p0,p1,,pm}rI(P) non è vuoto. Inoltre, se I ( P ) non è vuoto, ci devono essere alcuni punti in I ( P ) posti su alcuni bd C ( p i ) (il confine di C ( p i ) ). Quindi per ogni C ( s i ) e ogni punto p sul suo bondary, proviamo a trovare quanti cerchi contengono p . Il conteggio massimo tra tutte le p sarà la risposta a questo problema.C(p0),C(p1),,C(pm)I(P)I(P)bdC(pi)C(pi)C(si)ppp

Esaminiamo i punti in . Esiste un mapping uno a uno tra i punti su bd C ( s i ) e il numero reale in [ 0 , 2 π ) . Per ogni cerchio C ( s j ) , l'intersezione tra C ( s j ) e bd C ( s i ) può essere rappresentata da un intervallo [ b e g i n jbdC(si)bdC(si)[0,2π)C(sj)C(sj)bdC(si) . Quindi per tutti i cerchi diversi da C ( s i ) , ci sono al massimo n - 1 intervalli (alcuni cerchi potrebbero non intersecarsi con C ( s i ) ). Il conteggio massimo può essere trovato facilmente ordinando tutti i 2 ( n - 1 ) punti di fine intervallo, scansionandoli in ordine e contando il numero di sovrapposizione corrente. Per ogni C ( s i ) , questo passaggio può essere eseguito in O ( n log n[beginj,endj]C(si)n1C(si)2(n1)C(si) tempo, e non ci sono n tali cerchi, quindi la complessità temporale di questo algoritmo è O ( n 2 log n ) .O(nlogn)nO(n2logn)


2
La disposizione dei cerchi può essere costruita in tempo (con alta probabilità) usando un algoritmo incrementale randomizzato standard. In effetti, il tempo di esecuzione è O ( n log n + k ) , dove k è il numero di coppie di cerchi che si intersecano. Vedi il tuo libro di testo di geometria computazionale preferito. O(n2)O(nlogn+k)k
JeffE,

2

Penso che la domanda difficile sia sapere se il cerchio che hai selezionato è effettivamente "massimo" all'interno dell'insieme. L'unico modo in cui posso pensare di determinarlo è provare tutte le possibili combinazioni dei punti e testare la dimensione del cerchio che li racchiude.

È possibile ridurre lo spazio di ricerca dividendo innanzitutto lo spazio punto in una griglia di celle quadrate con larghezza 2r. Quindi individuare la cella con la massima densità. Poiché hai già individuato un cerchio di punti X, puoi concludere che se esiste un cerchio con più punti, allora deve contenere almeno X punti. E usalo come punto di partenza per testare le diverse combinazioni di punti.

Se stai solo cercando un insieme di punti che è probabile che sia massimo, allora potresti essere in grado di ridurre ulteriormente il numero di combinazioni che devi testare selezionando quei punti che rientrano in un quartiere di celle in cui la densità del quartiere è maggiore di X.

Detto questo, entrambe le "riduzioni" possono fallire e, nel peggiore dei casi, calcolerai i cerchi per tutte le possibili combinazioni di punti.


1

O(n2)

O(n2)

2n2O(n2log(n))

O(n2)O(n2)

V+EF=2O(n2)


Se questo deve essere letto come complemento della risposta accettata, e non dovrebbe essere letto da solo (cosa che non conosco, poiché ignoro questo argomento), dovresti essere esplicito al riguardo.
babou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.