Saya memiliki dua set poin dalam bidang 2 dimensi. Saya ingin menemukan pasangan terdekat dari titik s , t sehingga s ∈ S , t ∈ T , dan jarak Euclidean antara s , t sekecil mungkin. Seberapa efisien hal ini dapat dilakukan? Bisakah itu dilakukan dalam waktu O ( n log n ) , di mana n = | S | + | T | ?
Saya tahu bahwa jika saya diberi satu set , maka itu mungkin untuk menemukan pasangan terdekat dari titik s , s ' ∈ S di O ( n log n ) waktu dengan menggunakan algoritma divide-and-conquer standar . Namun, algoritma itu tampaknya tidak menyamaratakan dengan kasus dua set, karena tidak ada hubungan antara jarak antara dua titik terdekat dalam S atau T vs jarak antara dua titik terdekat di set tersebut.
Saya berpikir untuk menyimpan set di pohon k -d, lalu untuk setiap s ∈ S , menggunakan kueri tetangga terdekat untuk menemukan titik terdekat di T ke s . Namun, waktu berjalan terburuk mungkin seburuk waktu O ( n 2 ) . Ada hasil yang mengatakan bahwa jika titik T didistribusikan secara acak, maka waktu berjalan yang diharapkan untuk setiap permintaan adalah O ( log n ) , jadi kami akan mendapatkan algoritma dengan waktu berjalan yang diharapkan O ( n log n ) jika kami dijamin bahwa poin didistribusikan secara acak - tapi saya sedang mencari algoritma yang akan bekerja untuk kumpulan poin (tidak harus didistribusikan secara acak).
Motivasi: Algoritma yang efisien akan berguna untuk pertanyaan lain ini .