Aşağıda yaklaşık zaman ve boşluk kullanan bir algoritma verilmiştir .2 n / 22n2n/2
İlk olarak, öğenin tüm alt kümelerinin toplamlarını sıralama sorununa bakalım .n
Bu alt sorunu düşünün: uzunluğunda iki sıralı listeniz var ve listelerdeki sayıların çift toplamlarının sıralı bir listesini oluşturmak istiyorsunuz. Bunu kabaca zamanda (çıktı boyutu), ancak alt doğrusal boşlukta yapmak istersiniz. boşluğu elde edebiliriz . Öncelik sırasını koruyoruz ve toplamları artan sırayla öncelik sırasından çıkarıyoruz.O ( m, 2 ), O ( m )mO(m2)O(m)
Listeleri olalım ve , artan sırada sıralanır. Biz almak toplamlar , ve öncelik sıraya koydu.b 1 … b m m a i + b 1 i = 1 … ma1…amb1…bmmai+b1i=1…m
Şimdi, kalan en küçük toplam öncelik kuyruğundan , ise toplam toplamını öncelik kuyruğuna . Alan, her zaman en fazla toplamı içeren öncelik kuyruğu tarafından yönetilir . Ve her öncelik sırası işlemi için kullandığımız için zaman . Bu, alt problemi zamanı ve uzayında yapabileceğimizi gösterir . j < m a i + b j + 1 m O ( m 2 log m ) O ( log m ) O ( m 2 log m ) O ( m )ai+bjj<mai+bj+1mO(m2logm)O(logm)O(m2logm)O(m)
Şimdi, tüm alt kümelerinin toplamları sıralamak listesi nereye biz sadece bu altrutinini kullanarak, sayılar öğelerin ilk yarısının alt kümelerinin toplamları setidir ve liste alt kümelerine toplamının kümesidir öğelerin ikinci yarısı. Bu listeleri aynı algoritma ile özyineli olarak bulabiliriz.a i b inaibi
Şimdi orijinal sorunu ele alacağız. Let koordinatlarının kümesi , ve koordinatlarının kümesi . Sonra
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)).
Bu sayıları sıralamak sayılarını sıralamakla aynıdır , bu nedenle alt kümelerinin toplamlarını sıralama sorununu . öğeler.∑i∈S1logp(vi=1)−logp(vi=0)n