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?

Manuel
sumber
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))

HEKTO
sumber
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.

vzn
sumber