Pasangan poin terdekat antara dua set, dalam 2D

11

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 | ?S,Ts,tsStTs,tO(nlogn)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.Ss,sSHAI(ncatatann)ST

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 )TksSTsHAI(n2)THAI(catatann)HAI(ncatatann) 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 .

DW
sumber

Jawaban:

10

Ya, ini bisa menjadi waktu. Membangun diagram Voronoi untuk T . Kemudian, untuk setiap titik s S , cari sel mana dari diagram Voronoi yang terkandung di dalamnya. Pusat sel itu adalah titik t T yang paling dekat dengan s .HAI(ncatatann)TsStTs

Anda dapat membuat diagram Voronoi dalam waktu , dan setiap kueri (menemukan sel yang berisi s ) dapat dilakukan dalam waktu O ( log n ) , sehingga total waktu berjalan adalah waktu O ( n log n ) .HAI(ncatatann)sHAI(catatann)HAI(ncatatann)

DW
sumber
Bagus, jauh lebih sederhana dari apa yang bisa saya hasilkan :).
aelguindy
Pendekatan yang bagus! Tautan akan membantu, terutama untuk sisi permintaan. Saya dapat menemukan halaman Wikipedia yang menunjukkan bahwa masalah lokasi titik umum dapat diselesaikan dalam waktu , tetapi apakah ada cara yang lebih baik untuk kasus khusus sel Voronoi? Pencarian saya hanya menghasilkan jawaban ini , yang melakukannya dengan cara O ( n ) . HAI(catatann)HAI(n)
j_random_hacker
Kompleksitas masalah Lokasi Titik biasanya diberikan dalam hal jumlah total simpul (di sini Diagram Voronoi). Angka ini kemungkinan lebih besar dari jumlah titik di dan bahkan n = | S | + | T | . Saya tidak yakin jika jumlah simpul dibatasi oleh O ( n ) , bukan? Tn=|S|+|T|HAI(n)
Albjenow
1
@Albjenow, saya tidak yakin apakah ini membahas masalah Anda, tapi ya, dalam 2 dimensi, saya percaya jumlah simpul dalam diagram Voronoi pada poin adalah O ( n ) (Saya ingat ini 6 n atau sesuatu seperti itu). nHAI(n)6n
DW
Tampaknya benar pada pertanyaan ini di math.stackexchange.
Albjenow
5

Saya memperluas komentar saya menjadi jawaban, karena saya menemukan jawaban yang tidak memuaskan. Ini hanya memecahkan masalah untuk -distance. Jawaban ini pada dasarnya salah.L.1

Makalah ini memecahkan masalah menemukan pasangan titik terdekat dalam dimensi untuk kasus ketika set dipisahkan oleh hyperplane di O ( n log d - 1 n ) .dHAI(ncatatand-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 ) .HAI(ncatatann)HAI(ncatatan2n)

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,TS-δzTδzzδzδz

aelguindy
sumber
+1, tetapi beberapa hal tentang makalah itu (yang baru saja saya baca): (i) mereka hanya mengklaim dapat memecahkan masalah untuk kasus jarak bujursangkar (Manhattan); (ii) Saya tidak mengerti mengapa mereka berpikir bahwa daerah pada hal. 2 persis mengandung 1 poin. Saya berasumsi bahwa p m adalah titik di P dengan median y co-ord di P , dan q m adalah titik di Q dengan median y co-ord di Q , tapi saya tidak melihat bagaimana di atas bisa mengikuti dari ini . P2pmPPqmQQ
j_random_hacker
1
@ j_random_hacker kertas hanya memecahkan masalah untuk jarak L1 dan jawaban ini salah :). Dan saya pikir itu huruf :). l
aelguindy
Tautan rusak :(
Keerthana Gopalakrishnan