Complessità per trovare una palla che massimizzi il numero di punti che vi si trovano


10

x1,,xnR2rri=1n1xxir

Un algoritmo di forza bruta sarebbe quello di andare oltre ogni punto e contare il numero di punti che sono a distanza inferiore a . Ciò darebbe una complessità di .rO(n2)

C'è un approccio migliore?


Hai guardato quadrifogli e alberi binari di partizionamento dello spazio? Anticiperei che potrebbero fornire un algoritmo più efficiente in pratica, anche se non so quale potrebbe essere il tempo di esecuzione asintotico nel peggiore dei casi.
DW

(Il centro del balldal titolo deve essere dall'insieme?) Un'idea potrebbe essere quella di stimare se il raggio è piccolo rispetto alla distanza media dal vicino più vicino o sull'ordine del diametro (e considerare approcci per questi estremi (sweep piano per la piccola ) e l'ampio spazio in mezzo). r
Greybeard,

Il centro della palla dovrebbe essere un ma se esiste un algoritmo migliore senza quella condizione, sono anche interessato. xi
Manuel,

Sembra un algoritmo più veloce di per il problema di conteggio della portata della sfera sconosciuto. Tuttavia, se si potesse accettare una risposta non esatta, è possibile approssimare un disco con una serie di quadrati con orientamento diverso. Per ogni orientamento dovrai costruire un Range Tree ( en.wikipedia.org/wiki/Range_tree ), che ti permetterà di contare tutti i punti all'interno di un quadrato in time (k - un numero di punti risultanti). O(n)O(log2(n)+k)
HEKTO,

@HEKTO Stai suggerendo di costruire una struttura di cost per interrogare se un punto si trova in un rettangolo a un costo ? Quindi vai su tutti i punti per contare quanti altri punti si trovano nella palla approssimativa? Ciò potrebbe funzionare, ma quale sarebbe la memoria necessaria per tale struttura di dati? sarebbe inferiore a ? O(nlog(n))O(log2(n)+k)O(n2))
Manuel,

Risposte:


5

Sembra un algoritmo sublineare per il problema del conteggio della portata della palla non è noto per ora.

Tuttavia, se si potesse accettare una risposta non esatta, è possibile approssimare un disco con una serie di quadrati con orientamento diverso. Per ogni orientamento dovrai costruire un Range Tree , che ti permetterà di contare tutti i punti all'interno di un quadrato nel tempo (k - un numero di punti risultanti).O(log2(n)+k)

Ogni albero di intervallo richiederà memoria , maggiore è l'approssimazione desiderata, più orientamenti dovresti usare. Ad esempio, due orientamenti ti daranno un ottagono , che si avvicina a un disco con errore di area inferiore al 6%.O(nlog(n))


3

La risposta non è così semplice, c'è uno studio avanzato di questa domanda nella teoria della complessità; sembra essere studiato, ad esempio, come il seguente problema, incentrato su query rapide di "conteggio sferico". Sì, sono possibili limiti teorici migliorati, ma questi sembrano essere algoritmi astratti che non sono stati implementati da nessuno. Se vuoi implementazioni effettive, questa è una domanda diversa.

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.