Tôi có hai tập hợp của các điểm trong mặt phẳng 2 chiều. Tôi muốn tìm cặp điểm gần nhất sao cho , và khoảng cách Euclide giữa càng nhỏ càng tốt. Làm thế nào hiệu quả có thể được thực hiện? Nó có thể được thực hiện trong thời gian , trong đó?s , t s ∈ S t ∈ T s , t O ( n log n ) n = | S | + | T |
Tôi biết rằng nếu tôi được cung cấp một tập hợp , thì có thể tìm thấy cặp điểm gần nhất trong bằng thuật toán chia và chinh phục tiêu chuẩn . Tuy nhiên, thuật toán đó dường như không khái quát cho trường hợp của hai tập hợp, bởi vì không có mối liên hệ nào giữa khoảng cách giữa hai điểm gần nhất trong hoặc so với khoảng cách giữa hai điểm gần nhất trên các tập hợp đó.s , s ' ∈ S O ( n log n ) S T
Tôi đã nghĩ đến việc lưu trữ tập hợp trong cây -d, sau đó cho mỗi , sử dụng truy vấn lân cận gần nhất để tìm điểm gần nhất trong đến . Tuy nhiên, thời gian chạy trường hợp xấu nhất có thể tệ như thời gian . Có kết quả nói rằng nếu các điểm của được phân phối ngẫu nhiên, thì thời gian chạy dự kiến cho mỗi truy vấn là , vì vậy chúng tôi sẽ có được thuật toán với thời gian chạy dự kiến nếu chúng tôi được đảm bảo rằng các điểm được phân phối ngẫu nhiên - nhưng tôi đang tìm kiếm một thuật toán sẽ hoạt động cho bất kỳ tập hợp điểm nào (không nhất thiết phải được phân phối ngẫu nhiên).k s ∈ S T s O ( n 2 ) T O ( log n ) O ( n log n )
Động lực: Một thuật toán hiệu quả sẽ hữu ích cho câu hỏi khác này .