Kotak sejajar sumbu terkecil yang berisi titik


11

Input: Satu set poin dalam , dan integer .R 3 k nnR3kn

Output: Kotak pembatas sumbu-rata volume terkecil yang berisi setidaknya dari poin ini.nkn

Saya ingin tahu apakah ada algoritma yang dikenal untuk masalah ini. Yang terbaik yang bisa saya pikirkan adalah waktu , secara longgar sebagai berikut: kekuatan kasar atas semua batas atas dan bawah yang mungkin untuk dua dari tiga dimensi; untuk masing-masing kemungkinan , kita dapat menyelesaikan versi dimensi dari masalah dalam waktu menggunakan algoritma jendela geser.O ( n 4 ) 1 O ( n )O(n5)O(n4)1O(n)


Tidak bisakah kita menghitung tabel ukuran untuk jumlah poin p dengan p . x < x , p . y < y , hlm . z < z ? Menghitung jumlah poin dan volume dapat dilakukan dengan jumlah operasi const, dan kita dapat menggunakan pemrograman dinamis dengan tabel ukuran k n 3 dan harus bisa mendapatkan algoritma O ( k n 3 ) . n3pp.x<x,p.y<y,p.z<zkn3O(kn3)
Kaveh

Baik. Dalam hal ini, bahwa , Anda tidak dapat benar-benar berharap untuk melakukan yang lebih baik daripada n 5 . Karena, ada n 6 kotak berbeda, dan dengan rata-rata argumen (pada nilai acak k) ada n 5 kotak yang berisi tepat titik k. Kecuali jika Anda entah bagaimana dapat menggunakan volume thingy untuk memperkecil ruang pencarian, tetapi entah bagaimana itu tampak optimis ...k=Θ(n)n5n6n5
Sariel Har-Peled

BTW, dalam kasus Anda, Anda bisa mendapatkan kotak yang berisi poin, dan itu lebih kecil dari kotak optimal yang mengandung poin k di O ( ( ( n / k ) / ϵ 2 log n ) O ( 1 ) ) waktu. Untuk k = Θ ( n ) ini pada dasarnya adalah waktu polylog., ..(1ϵ)kkO(((n/k)/ϵ2logn)O(1))k=Θ(n)
Sariel Har-Peled

Jawaban:


11

Untuk poin ada O ( n 3 ) kotak kosong, lihat pengantar makalah ini http://www.cs.uwm.edu/faculty/ad/maximal.pdf . Seseorang dapat menghitung kotak-kotak ini secara kasar kali ini (lihat intro untuk referensi).nO(n3)

Untuk masalah Anda, ambil sampel titik secara acak, di mana setiap titik diambil dengan tingkat kepekaan . Sampel acak semacam itu memiliki ukuran (dengan harapan) n / k [dan demi kontradiksi anggaplah demikian]. Ada O ( ( n / k ) 3 ) kotak kosong yang memiliki poin dari R di sisinya, di atas. Untuk setiap kotak seperti itu, gunakan rentang ortogonal yang mencari struktur data untuk menghitung berapa banyak poin yang dikandungnya. Ulangi proses ini O ( k 6 log n )1/kn/kO((n/k)3)RO(k6logn)waktu. Dengan probabilitas tinggi, salah satu kotak yang Anda coba adalah kotak yang diinginkan.

Secara keseluruhan, waktu menjalankan ini adalah .O((n/k)3k6polylogn)=O(n3k3logO(1)n)

Untuk melihat mengapa ini bekerja, pertimbangkan kotak yang optimal. Ini memiliki 6 poin P pada batasnya. Probabilitas bahwa sampel acak memilih enam poin ini, dan tidak ada satu pun poin di dalam kotak setidaknya . Jadi, jika Anda mengulangi prosesO((1/p)logn)kali, dengan probabilitas tinggi salah satu sampel acak akan menginduksi kotak yang diinginkan sebagai kotak kosong.1k6(11/k)k61/k6=pO((1/p)logn)

Karena ketat untuk jumlah kotak kosong (lihat intro kertas di atas untuk referensi yang relevan), tampaknya tidak mungkin bahwa algoritma yang lebih cepat secara signifikan dimungkinkan.Θ(n3)

[Dalam referensi yang saya berikan, mereka menyebutkan bahwa [17] menyediakan algoritma yang menyebutkan semua kotak kosong maksimal di antara titik dalam 3d dalam waktu , yang merupakan kotak hitam yang Anda butuhkan untuk yang di atas.]O(n3log2n)


Terima kasih - ini brilian! Detail yang benar-benar harus saya sebutkan (maaf!) ​​Adalah bahwa untuk tujuan saya, jadi O ( n 3 k 3 ) hanya sekitar sama baiknya dengan O ( n 6 ) . Namun, masih ada banyak ide keren di sini yang mungkin berguna untuk versi k yang besar ...k=Θ(n)O(n3k3)O(n6)k
GMB
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.