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 .
Saya memperluas komentar saya menjadi jawaban, karena saya menemukan jawaban yang tidak memuaskan.Ini hanya memecahkan masalah untuk -distance. Jawaban ini pada dasarnya salah.Makalah ini memecahkan masalah menemukan pasangan titik terdekat dalam dimensi untuk kasus ketika set dipisahkan oleh hyperplane di O ( n log d - 1 n ) .d O ( n logd- 1n )
Untuk dua dimensi, ini menyelesaikan kasus dalam jawaban yang Anda referensi sebagai motivasi utama Anda untuk pertanyaan Anda di . Ini juga dapat digunakan untuk menyelesaikan kasus umum masalah 2D di O ( n log 2 n ) .O ( n logn ) O ( n log2n )
Diberikan dua set titik dalam 2D, sematkan dalam ruang 3D, gantikan set S oleh beberapa - δ z dan atur T oleh δ z ke arah z . Pilihan δ z dapat dibuat untuk tidak mempengaruhi pilihan pasangan titik terdekat dengan mengambil δ z menjadi lebih kecil dari ketelitian titik input Anda (dan menggandakan bit presisi untuk setiap koordinat input). Gunakan algoritma 3D dari kertas yang dikutip.S, T S - δz T δz z δz δz
sumber