Cara mengulangi vektor dalam urutan probabilitas dalam ruang kecil


12

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? nvvi{0,1}ipi=P(vi=1)vin

Ambil contoh . Vektor yang paling mungkin adalah ( 1 , 0 , 1 ) dan yang paling kecil kemungkinannya adalah { 0 , 1 , 0 } . p={0.8,0.3,0.6}(1,0,1){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.n2n

Varian dekat dari pertanyaan ini sebelumnya ditanyakan di /cs/24123/how-to-iterate-over-vectors-in-order-of-probability .


Apakah ada alasan Anda tidak mengajukan pertanyaan tindak lanjut di sana juga? Apakah masalah utama di sini adalah salah satunya melakukan ini di ruang bawah tanah?
Suresh Venkat

@ SureshVenkat Ya masalahnya sepenuhnya tentang ruang sublinear (dalam ukuran output). Saya bertanya di sini karena saya pikir pertanyaannya mungkin sangat sulit.
Lembik

Memecahkan ini dalam ruang dan waktu tampaknya membutuhkan teknik yang mirip dengan SUBSET-SUM (dengan cepat mengetahui jumlah himpunan bagian yang hampir membatalkan jumlah yang berbeda). Dengan demikian, tidak mungkin memiliki solusi cepat. poly(n)
Geoffrey Irving

@ GeoffreyIrving Apakah Anda pikir intuisi ini dapat dibuat lebih formal?
Lembik

Jawaban:


9

Berikut ini memberikan algoritma yang menggunakan sekitar waktu dan 2 n / 2 ruang.2n2n/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.mO(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.a1amb1bmmai+b1i=1m

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+bjj<mai+bj+1mO(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.naibi

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 )S00S11

iS0p(vi=0)iS1p(vi=1)=1inp(vi=0)iS1p(vi=1)p(vi=0)=1inp(vi=0)exp(iS1logp(vi=1)p(vi=0)).

Sorting angka-angka ini adalah sama dengan menyortir nomor , jadi kami telah mengurangi masalah untuk menyortir jumlah himpunan bagian dari n item.iS1logp(vi=1)logp(vi=0)n


Apakah ada pengurangan yang masuk akal yang akan membuat solusi ruang / waktu poli menjadi tidak masuk akal?
Lembik

2nn2n

Terima kasih. Saya tidak bermaksud waktu poli tentu saja tetapi sesuatu yang linear dalam ukuran output dan ruang poli.
Lembik

4

O(n)

  1. x{0,1}nO(n)r(x)xxp(x)>p(x)x{0,1}nxp(x)>p(x)r(x)x
  2. kxr(x)=kO(n)x{0,1}nxr(x)xr(x)=k
  3. k02n1kxr(x)=k

(Kita juga harus menjaga ikatan yang mungkin, tetapi ini tidak sulit.)


Terima kasih. Namun itu adalah algoritma yang cukup lambat :)
Lembik

0

Sunting: Jawaban ini salah. Lihat komentar untuk detailnya. ~ gandaliter

O(2n)O(n)

  1. (i,pi)|0.5pi|

  2. vvi1pi>0.50vviv

  3. Sebut fungsi rekursif ini pada daftar yang diurutkan dan vektor kosong.

010.5

O(2n)O(n)nO(2n)O(n)O(2n)langkah waktu. Oleh karena itu algoritma ini adalah kompleksitas terburuk yang optimal.


Θ(2n)

Terima kasih. Saya jelas tidak cukup membacanya! Saya sudah mengedit jawaban saya.
gandaliter

3
v1=12n1v1=1pi=0.5

Anda benar, ini tidak berhasil. Maaf!
gandaliter
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.