Diberikan seperangkat poin dan radius . Yaitu kompleksitas menemukan titik dengan jumlah titik lebih tinggi pada jarak lebih kecil dari . Misalnya yang memaksimalkan ?
Algoritma brute force akan memeriksa setiap titik dan menghitung jumlah titik yang jaraknya lebih kecil dari . Itu akan memberikan kompleksitas .
Apakah ada pendekatan yang lebih baik?
ball
dari 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).Jawaban:
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).O ( l o g2( 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%.O ( n ⋅ l o g( n ) )
sumber
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.
sumber