Paire de points la plus proche entre deux ensembles, en 2D


11

J'ai deux ensembles de points dans le plan bidimensionnel. Je veux trouver la paire de points la plus proche telle que , , et la distance euclidienne entre est aussi petite que possible. Comment cela peut-il être fait efficacement? Peut-on le faire en temps , où?S,Ts,tsStTs,tO(nlogn)n=|S|+|T|

Je sais que si on me donne un seul ensemble , il est possible de trouver la paire de points in la plus proche en utilisant un algorithme standard de division et de conquête . Cependant, cet algorithme ne semble pas généraliser au cas de deux ensembles, car il n'y a pas de lien entre la distance entre les deux points les plus proches dans ou rapport à la distance entre les deux points les plus proches à travers ces ensembles.Ss,sSO(nlogn)ST

J'ai pensé à stocker l'ensemble dans un arbre -d, puis pour chaque , à l'aide d'une requête de voisin le plus proche pour trouver le point le plus proche de à . Cependant, le temps d'exécution le plus défavorable peut être aussi mauvais que le temps . Il y a des résultats indiquant que si les points de sont distribués de manière aléatoire, alors le temps d'exécution prévu pour chaque requête est , donc nous obtiendrions un algorithme avec le temps d'exécution prévu si nous ont été garantis que les points sont distribués au hasard - mais je cherche un algorithme qui fonctionnera pour toute collection de points (pas nécessairement distribués au hasard).TksSTsO(n2)TO ( n log n )O(logn)O(nlogn)

Motivation: Un algorithme efficace serait utile pour cette autre question .

Réponses:


10

Oui, cela peut être . Construire un diagramme Voronoi pour . Ensuite, pour chaque point , trouvez dans quelle cellule du diagramme de Voronoï il est contenu. Le centre de cette cellule est le point qui est le plus proche de .T s S t T sO(nlogn)TsStTs

Vous pouvez créer un diagramme de Voronoi en temps et chaque requête (trouver la cellule contenant ) peut être effectuée en temps , de sorte que la durée totale d'exécution est temps.s O ( log n ) O ( n log n )O(nlogn)sO(logn)O(nlogn)


Sympa, beaucoup plus simple que ce que j'ai pu imaginer :).
aelguindy

Belle approche! Les liens seraient utiles, en particulier pour le côté requête des choses. Je pourrais trouver une page Wikipédia montrant que le problème général de localisation des points peut être résolu en temps , mais existe-t-il une meilleure façon pour le cas spécial des cellules Voronoi? Ma recherche n'a révélé que cette réponse , ce qui le fait à la manière . O ( n )O(logn)O(n)
j_random_hacker

La complexité du problème de localisation des points est généralement donnée en termes de nombre total de sommets (ici du diagramme de Voronoi). Ce nombre est probablement supérieur au nombre de points dans et même. Je ne sais pas si le nombre de sommets est limité par , n'est-ce pas? n = | S | + | T | O ( n )Tn=|S|+|T|O(n)
Albjenow

1
@Albjenow, je ne sais pas si cela répond à votre préoccupation, mais oui, en 2 dimensions, je crois que le nombre de sommets dans un diagramme de Voronoi sur points est (il me semble que c'est ou quelque chose comme ca). O ( n ) 6 nnO(n)6n
DW

Cela semble correct à partir de cette question sur math.stackexchange.
Albjenow

5

J'élargis mon commentaire en réponse, car j'ai trouvé une réponse semi-satisfaisante. Cela ne résout que le problème de la distance . Cette réponse est fondamentalement fausse.L1

Cet article résout le problème de trouver la paire de points la plus proche en dimensions pour le cas où les ensembles sont séparés par un hyperplan en .O ( n log d - 1 n )dO(nlogd1n)

Pour deux dimensions, cela résout le cas dans la réponse que vous référencez comme votre motivation principale pour votre question en . Il peut également être utilisé pour résoudre le cas général du problème 2D en .O ( n log 2 n )O(nlogn)O(nlog2n)

Étant donné deux ensembles de points en 2D, incorporez-les dans l'espace 3D, en déplaçant l'ensemble de certains et définissez de dans la direction . Le choix de peut être fait pour ne pas affecter le choix de la paire de points la plus proche en prenant pour être plus petit que la précision de vos points d'entrée (et en doublant les bits de précision pour chaque coordonnée d'entrée). Utilisez l'algorithme 3D du document cité.S - δ z T δ z z δ z δ zS,TSδzTδzzδzδz


+1, mais deux ou trois choses à propos de ce document (que je viens de commencer à lire): (i) ils prétendent seulement résoudre le problème du cas de distance rectiligne (Manhattan); (ii) Je ne comprends pas pourquoi ils pensent que la région à la p. 2 contient exactement 1 point. J'avais supposé que est le point dans avec une coordonnée médiane y dans , et est le point dans avec une coordonnée médiane y dans , mais je ne vois pas comment cela pourrait en découler. p m P P q m Q QP2pmPPqmQQ
j_random_hacker

1
@j_random_hacker le document ne résout que le problème de la distance L1 et cette réponse est fausse :). Et je pense que c'est la lettre :). l
aelguindy

Lien rompu :(
Keerthana Gopalakrishnan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.