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.a1…amb1…bmmai+b1i=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+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
∏i∈S0p(vi=0)∏i∈S1p(vi=1)==∏1≤i≤np(vi=0)∏i∈S1p(vi=1)p(vi=0)∏1≤i≤np(vi=0)exp(∑i∈S1logp(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.∑i∈S1logp(vi=1)−logp(vi=0)n