Pertimbangkan vektor dimensional v di mana v i ∈ { 0 , 1 } . Untuk setiap i kita tahu p i = P ( v i = 1 ) dan mari kita asumsikan v i independen. Dengan menggunakan probabilitas ini, apakah ada cara yang efisien untuk beralih pada vektor biner n dimensi agar dari yang paling mungkin menjadi yang paling kecil kemungkinannya (dengan pilihan acak untuk ikatan) menggunakan sublinear ruang dalam ukuran output?
Ambil contoh . Vektor yang paling mungkin adalah ( 1 , 0 , 1 ) dan yang paling kecil kemungkinannya adalah { 0 , 1 , 0 } .
Untuk sangat kecil, kita dapat memberi label pada masing-masing vektor 2 n dengan probabilitasnya dan menyortirnya saja tetapi ini tentu saja masih tidak menggunakan ruang sublinear.
Varian dekat dari pertanyaan ini sebelumnya ditanyakan di /cs/24123/how-to-iterate-over-vectors-in-order-of-probability .
sumber
Jawaban:
Berikut ini memberikan algoritma yang menggunakan sekitar waktu dan 2 n / 2 ruang.2n 2n/2
Pertama, mari kita lihat masalah menyortir jumlah semua himpunan bagian dari item.n
Pertimbangkan subproblem ini: Anda memiliki dua daftar diurutkan dari panjang , dan Anda ingin membuat daftar diurutkan dari jumlah berpasangan nomor dalam daftar. Anda ingin melakukan ini dalam waktu kira-kira O ( m 2 ) (ukuran output), tetapi ruang sublinear. Kita bisa mencapai ruang O ( m ) . Kami menyimpan antrian prioritas, dan menarik jumlah dari antrian prioritas dalam urutan yang meningkat.m O(m2) O(m)
Biarkan daftar menjadi dan b 1 ... b m , diurutkan dalam urutan yang meningkat. Kami mengambil jumlah m a i + b 1 , i = 1 ... m , dan menempatkannya dalam antrian prioritas.a1…am b1…bm m ai+b1 i=1…m
Sekarang, ketika kita tarik jumlah sisa terkecil keluar dari antrian prioritas, jika j < m kita kemudian menempatkan jumlah tersebut a i + b j + 1 ke dalam antrian prioritas. Ruang didominasi oleh antrian prioritas, yang selalu mengandung paling m jumlah. Dan waktunya adalah O ( m 2 log m ) , karena kami menggunakan O ( log m ) untuk setiap operasi antrian prioritas. Ini menunjukkan bahwa kita dapat melakukan submasalah dalam O ( m 2ai+bj j<m ai+bj+1 m O(m2logm) O(logm) waktu dan O ( m ) ruang.O(m2logm) O(m)
Sekarang, untuk mengurutkan jumlah dari semua himpunan bagian dari angka, kita hanya menggunakan subroutine ini di mana daftar yang saya adalah himpunan jumlah himpunan bagian dari paruh pertama item, dan daftar b i adalah himpunan jumlah subset dari bagian kedua item. Kami dapat menemukan daftar ini secara rekursif dengan algoritma yang sama.n ai bi
Kami sekarang akan mempertimbangkan masalah aslinya. Misalkan adalah himpunan koordinat yang 0 , dan S 1 menjadi himpunan koordinat yang 1 . Kemudian ∏ i ∈ S 0 p ( v i = 0 ) ∏ i ∈ S 1 p ( v i = 1 )S0 0 S1 1
Sorting angka-angka ini adalah sama dengan menyortir nomor , jadi kami telah mengurangi masalah untuk menyortir jumlah himpunan bagian dari n item.∑i∈S1logp(vi=1)−logp(vi=0) n
sumber
(Kita juga harus menjaga ikatan yang mungkin, tetapi ini tidak sulit.)
sumber
Sunting: Jawaban ini salah. Lihat komentar untuk detailnya. ~ gandaliter
Sebut fungsi rekursif ini pada daftar yang diurutkan dan vektor kosong.
sumber