So che questo può essere un duplicato, ma sembra una variazione dell'algoritmo "Coppia di punti più vicina".Variazione più stretta dell'algoritmo di coppie di punti
Dato un insieme di N punti (x, y) nel quadrato unitario e una distanza d Trovare tutti coppia di punti tale che la distanza tra di loro è al massimo d.
Per grandi N il metodo della forza bruta non è un'opzione. Oltre ai metodi 'sweep line' e 'divide and conquer', c'è una soluzione più semplice? Queste coppie di punti sono i bordi di un grafo non orientato, che ho bisogno di attraversarlo e dire se è collegato o meno (che ho già fatto usando DFS, ma quando N = 1 milione non finisce mai!).
Qualsiasi pseudocodice, commenti o idee sono i benvenuti, Grazie!
EDIT: Ho trovato questo su Sedgewick libro (sto guardando il codice in questo momento):
Programma 3.18 usa un array bidimensionale di liste concatenate per migliorare il tempo di esecuzione del Programma 3.7 per un fattore di circa 1/d2 quando N è sufficientemente grande. Divide l'unità in una griglia di quadrati più piccoli di uguali dimensioni. Quindi, per ogni quadrato, crea un elenco collegato di tutti i punti che cadono in quel quadrato. L'array bidimensionale offre la possibilità di accedere immediatamente allo insieme di punti vicini a un punto specifico; gli elenchi collegati offrono la flessibilità per memorizzare i punti in cui possono cadere senza che sia necessario sapere in anticipo quanti punti rientrano in ciascun riquadro della griglia.
Hum ... sembra esattamente quello di cui ho bisogno. Come scelgo la dimensione della griglia? Grazie! – Fernando