Coppia di punti più vicina tra due set, in 2D


11

Ho due insiemi di punti nel piano bidimensionale. Voglio trovare la coppia più vicina di punti tale che , e la distanza euclidea tra sia la più piccola possibile. Quanto efficacemente può essere fatto? Può essere fatto in tempo, dove?S,Ts,tsStTs,tO(nlogn)n=|S|+|T|

So che se mi viene dato un singolo set , allora è possibile trovare la coppia di punti più vicina nel tempo usando un algoritmo standard di divisione e conquista . Tuttavia, tale algoritmo non sembra generalizzare al caso di due insiemi, poiché non esiste alcuna connessione tra la distanza tra i due punti più vicini all'interno di o rispetto alla distanza tra i due punti più vicini tra quegli insiemi.Ss,sSO(nlogn)ST

Ho pensato di memorizzare l'insieme in un albero -d, quindi per ogni , usando una query del vicino più vicino per trovare il punto più vicino in a . Tuttavia, il tempo di esecuzione nel peggiore dei casi potrebbe essere negativo quanto tempo. Ci sono risultati che dicono che se i punti di sono distribuiti casualmente, il tempo di esecuzione previsto per ogni query è , quindi otterremmo un algoritmo con tempo di esecuzione previsto se noi erano garantiti che i punti fossero distribuiti casualmente - ma sto cercando un algoritmo che funzionerà per qualsiasi raccolta di punti (non necessariamente distribuito casualmente).TksSTO ( n 2 ) T O ( registro n ) O ( n registro n )sO(n2)TO(logn)O(nlogn)

Motivazione: un algoritmo efficiente sarebbe utile per questa altra domanda .

Risposte:


10

Sì, questo può essere tempo. Costruire un diagramma di Voronoi . Quindi, per ogni punto , trova in quale cella del diagramma Voronoi è contenuto. Il centro di quella cella è il punto che è più vicino a .O(nlogn)TsStTs

È possibile creare un diagramma Voronoi in tempo e ogni query (trova la cella contenente ) può essere eseguita in tempo, quindi il tempo di esecuzione totale è tempo.O(nlogn)sO(logn)O(nlogn)


Bello, molto più semplice di quello che avrei potuto inventare :).
aelguindy,

Bel approccio! I collegamenti potrebbero essere d'aiuto, soprattutto per quanto riguarda le query. Potrei trovare una pagina di Wikipedia che mostra che il problema generale della posizione dei punti può essere risolto in tempo, ma esiste un modo migliore per il caso speciale delle celle Voronoi? La mia ricerca ha solo sollevato questa risposta , che lo fa nel modo . O(logn)O(n)
j_random_hacker,

La complessità del problema della posizione del punto è generalmente data in termini di numero totale di vertici (qui del diagramma Voronoi). Questo numero è probabilmente maggiore del numero di punti in e anche. Non sono sicuro che il numero di vertici sia limitato da , vero? Tn=|S|+|T|O(n)
Albjenow,

1
@Albjenow, non sono sicuro che questo risolva la tua preoccupazione, ma sì, in 2 dimensioni, credo che il numero di vertici in un diagramma di Voronoi su punti sia (mi sembra di ricordare che è o qualcosa del genere). nO(n)6n
DW

Sembra corretto a partire da questa domanda su math.stackexchange.
Albjenow,

5

Sto espandendo il mio commento in una risposta, dal momento che ho capito una risposta semi-soddisfacente. Questo risolve il problema solo per la distanza . Questa risposta è sostanzialmente sbagliata.L1

Questo documento risolve il problema di trovare la coppia di punti più vicina in dimensioni per il caso in cui gli insiemi sono separati da un iperpiano in .dO(nlogd1n)

Per due dimensioni, questo risolve il caso nella risposta a cui fai riferimento come motivazione principale per la tua domanda in . Può anche essere usato per risolvere il caso generale del problema 2D in .O(nlogn)O(nlog2n)

Dati due insiemi di punti in 2D, incorporali nello spazio 3D, spostando l'insieme di alcuni e impostando di nella direzione . La scelta di può essere fatta per non influenzare la scelta della coppia di punti più vicina prendendo per essere più piccolo della precisione dei punti di input (e raddoppiando i bit di precisione per ciascuna coordinata di input). Usa l'algoritmo 3D dal documento citato.S,TSδzTδzzδzδz


+1, ma un paio di cose su quel documento (che ho appena iniziato a leggere): (i) sostengono solo di risolvere il problema per il caso della distanza rettilinea (Manhattan); (ii) Non capisco perché pensano che la regione a pag. 2 contiene esattamente 1 punto. Avevo supposto che fosse il punto in con mediana y coordinata in , e fosse il punto in con mediana y coordinata in , ma non vedo come quanto sopra possa seguire da questo. P2pmPPqmQQ
j_random_hacker,

1
@j_random_hacker la carta risolve il problema solo per la distanza L1 e questa risposta è sbagliata :). E penso che sia la lettera :). l
aelguindy,

Il collegamento è interrotto :(
Keerthana Gopalakrishnan il
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.