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ù?
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.
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).O ( n log n )
Motivation: Un algorithme efficace serait utile pour cette autre question .
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.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 )d O(nlogd−1n)
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,T S −δz T δz z δz δz
la source