Diberikan dua set dan masing-masing berisi titik terpisah dalam pesawat, hitung jarak terpendek antara titik di dan titik di , yaitu, .
Saya tidak yakin apakah saya benar, tetapi masalah ini sangat mirip dengan masalah yang dapat diselesaikan dengan pemrograman linear dalam geometri komputasi. Namun, pengurangan LP tidak langsung. Masalah saya juga terlihat berkaitan dengan menemukan pengaturan tertipis antara dua set titik yang jelas dapat diselesaikan oleh LP dalam dalam ruang 2 dimensi.
Jawaban:
Saya punya solusi yang mungkin tampak sedikit berbelit-belit, tetapi harus lebih efisien daripada pencarian brute-force naif :O(n2)
Sisanya dalam pseudo-code untuk membuatnya lebih jelas:
Artinya, dengan pra-menyortir titik sepanjang , Anda dapat menyaring pasangan yang tidak akan pernah berada dalam satu sama lain sejak bersama akan selalu.v d bk−aj v ≤∥bk−aj∥
Dalam kasus yang lebih buruk, ini masih , tetapi jika dan dipisahkan dengan baik, itu harus jauh lebih cepat dari itu, tetapi tidak lebih baik dari , yang diperlukan untuk penyortiran.O(n2) A B O(nlogn)
Memperbarui
Solusi ini sama sekali tidak ditarik keluar dari topi. Ini adalah kasus khusus dari apa yang saya gunakan dalam simulasi partikel untuk menemukan semua pasangan partikel yang berinteraksi dengan penandaan spasial. Pekerjaan saya sendiri menjelaskan masalah yang lebih umum ada di sini .
Adapun saran untuk menggunakan algoritma line-sweep yang dimodifikasi, meskipun secara intuitif sederhana, saya tidak yakin bahwa ini ada di ketika set-set yang terpisah dipertimbangkan. Hal yang sama berlaku untuk algoritma acak Rabin.O(nlogn)
Tampaknya tidak ada banyak literatur yang berurusan dengan masalah pasangan terdekat dalam set terpisah, tetapi saya telah menemukan ini , yang tidak membuat klaim berada di bawah , dan ini , yang tampaknya tidak untuk membuat klaim tentang apa pun.O(n2)
Algoritme di atas dapat dilihat sebagai varian dari sapuan bidang yang disarankan di makalah pertama (Shan, Zhang dan Salzberg), namun alih-alih menggunakan sumbu dan tanpa penyortiran, sumbu antara set digunakan dan set dilintasi dalam urutan menurun / naik.x
sumber
Anda dapat mengadaptasi algoritma linesweep "pasangan terdekat" yaitu .O(nlogn)
Satu-satunya perubahan yang harus Anda lakukan adalah mengabaikan pasangan yang termasuk dalam set yang sama.
Sunting: Ini sebenarnya tidak sederhana (atau bahkan mungkin) seperti yang saya jelaskan. Lihat komentar untuk diskusi.
sumber
Gagasan dalam masalah seperti ini adalah untuk membuat struktur yang dipesan dari salah satu set yang memungkinkan permintaan efisien Tetangga Tetangga. Makalah klasik yang menyajikan struktur kueri O (log n) untuk dimensi arbitrer adalah:
Shamo dan Hoey pada solusi Voronoi
Sejumlah partisi ruang lain berdasarkan ide-ide dari tesselations Delauney telah dibuat sejak itu, dan ini menerjemahkan ke berbagai deskripsi sapuan ruang bagian juga. Perhatikan bahwa metode Voronoi juga akan jatuh di bawah deskripsi divide-and-menaklukkan umum karena partisi pesawat itu yang membuat langkah konstruksi O (n log n).
Jadi, solusi dasar untuk masalah ini adalah:
Seperti yang dapat dilihat pada kerumitan setiap langkah, kompleksitas totalnya adalah O (n log n). Untuk pembaca modern yang tidak melihat makalah klasik, ini tercakup dalam banyak buku algoritma, misalnya "Manual Desain Algoritma" oleh Skiena.
sumber
Batas bawah untuk masalah ini adalah bawah model pohon keputusan aljabar. Saya akan memberikan sketsa kasar buktinya di sini.O(n∗logn)
Kami akan mengurangi contoh masalah perbedaan Elemen E ke C.
Kita tahu bahwa batas bawah pada runtime untuk menentukan masalah Perbedaan elemen adalah . Oleh karena itu, dengan mengurangi batas bawah juga berlaku untuk masalah kita.O(n∗logn)
sumber