Kompleksitas untuk menemukan bola yang memaksimalkan jumlah poin di dalamnya


10

Diberikan seperangkat poin dan radius . Yaitu kompleksitas menemukan titik dengan jumlah titik lebih tinggi pada jarak lebih kecil dari . Misalnya yang memaksimalkan ?x1,...,xnR2rrsaya=1n1x-xsayar

Algoritma brute force akan memeriksa setiap titik dan menghitung jumlah titik yang jaraknya lebih kecil dari r . Itu akan memberikan kompleksitas HAI(n2) .

Apakah ada pendekatan yang lebih baik?


Sudahkah Anda melihat pohon-pohon pemisah ruang quad dan biner? Saya akan mengantisipasi bahwa mereka mungkin memberikan algoritma yang lebih efisien dalam prakteknya, meskipun saya tidak tahu apa waktu berjalan asimptotik terburuk.
DW

(Pusat dari balldari judul harus dari himpunan?) Satu ide mungkin untuk memperkirakan apakah jari-jari kecil dibandingkan dengan jarak rata-rata ke tetangga terdekat atau pada urutan diameter (dan mempertimbangkan pendekatan untuk ekstrem ini (Pesawat menyapu untuk kecil ) dan ruang yang luas di antara). r
greybeard

Pusat bola harus tetapi jika ada algoritma yang lebih baik tanpa syarat saya juga tertarik. xsaya
Manuel

Sepertinya algoritma yang lebih cepat daripada untuk Ball Count Counting Problem tidak diketahui. Namun, jika Anda bisa menerima jawaban yang tidak tepat maka Anda dapat memperkirakan disk dengan seperangkat kotak dengan orientasi yang berbeda. Untuk setiap orientasi, Anda harus membuat Range Tree ( en.wikipedia.org/wiki/Range_tree ), yang memungkinkan Anda menghitung semua titik di dalam kotak dalam waktu (k - sejumlah poin yang dihasilkan). O ( l o g 2 ( n ) + k )HAI(n)HAI(lHaig2(n)+k)
HEKTO

@ HEKTO Apakah Anda menyarankan membangun struktur biaya untuk meminta jika suatu titik terletak pada persegi panjang dengan biaya ? Lalu pergi ke semua poin untuk menghitung berapa banyak poin lain terletak di bola yang diperkirakan? Ini bisa berhasil, tetapi kemudian, apa yang akan menjadi memori yang diperlukan untuk struktur data seperti itu? apakah lebih rendah dari ? O ( l o g 2 ( n ) + k ) O ( n 2 ) )HAI(ncatatan(n))HAI(lHaig2(n)+k)HAI(n2))
Manuel

Jawaban:


5

Sepertinya algoritma sublinear untuk Ball Range Counting Problem belum diketahui untuk saat ini.

Namun, jika Anda bisa menerima jawaban yang tidak tepat maka Anda dapat memperkirakan disk dengan seperangkat kotak dengan orientasi yang berbeda. Untuk setiap orientasi Anda harus membangun Range Tree , yang memungkinkan Anda untuk menghitung semua titik di dalam kotak dalam waktu (k - sejumlah poin yang dihasilkan).HAI(lHaig2(n)+k)

Setiap rentang pohon akan membutuhkan memori , semakin baik perkiraan Anda ingin semakin banyak orientasi yang harus Anda gunakan. Misalnya, dua orientasi akan memberi Anda segi delapan , yang mendekati disk dengan kesalahan area kurang dari 6%.HAI(nlHaig(n))


3

Jawabannya tidak begitu sederhana, ada studi lanjutan dari pertanyaan ini dalam teori kompleksitas; tampaknya dipelajari misalnya sebagai masalah berikut, yang difokuskan pada pertanyaan "penghitungan rentang bola" yang cepat. Ya, batas teoretis yang ditingkatkan dimungkinkan, tetapi ini tampaknya merupakan algoritma abstrak yang belum diterapkan oleh siapa pun. Jika Anda menginginkan implementasi aktual, itu adalah pertanyaan yang berbeda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.