निम्नलिखित एक एल्गोरिथ्म देता है जो लगभग समय और 2 n / 2 स्थान का उपयोग करता है।2n2n/2
सबसे पहले, के सभी उप-समूहों की रकम छँटाई की समस्या पर के लुक जाने आइटम नहीं है।n
इस उपप्रकार पर विचार करें: आपके पास लंबाई की दो क्रमबद्ध सूचियाँ हैं , और आप सूचियों में संख्याओं के जोड़दार योगों की एक क्रमबद्ध सूची बनाना चाहेंगे। आप इसे लगभग O ( m 2 ) समय (आउटपुट आकार) में करना चाहते हैं, लेकिन सबलाइन स्पेस। हम O ( m ) स्पेस प्राप्त कर सकते हैं । हम एक प्राथमिकता कतार रखते हैं, और बढ़ते क्रम में प्राथमिकता कतार से रकम खींचते हैं।mO(m2)ओ ( एम )
बता दें कि सूचियां और b 1 … b m हैं , जो बढ़ते क्रम में क्रमबद्ध हैं। हम मी sums को i + b 1 , i = 1 ... m लेते हैं, और उन्हें प्राथमिकता कतार में रखते हैं।ए1… एमख1… बममएमैं+ बी1i=1…m
अब, जब हम छोटी से छोटी शेष राशि खींच प्राथमिकता कतार से बाहर, अगर j < मीटर हम तो राशि डाल एक मैं + ख j + 1 प्राथमिकता कतार में। अंतरिक्ष में प्राथमिकता कतार का वर्चस्व है, जिसमें हमेशा सबसे अधिक एम शामिल हैं । और समय ओ ( एम 2 लॉग एम ) है , क्योंकि हम प्रत्येक प्राथमिकता कतार संचालन के लिए ओ ( लॉग एम ) का उपयोग करते हैं। इससे पता चलता है कि हम O ( m 2) में उपप्रकार कर सकते हैंai+bjj<mai+bj+1mO(m2logm)O(logm) समय और ओ ( एम ) अंतरिक्ष।O(m2logm)O(m)
अब, संख्याओं के सभी सबसेट के योगों को छांटने के लिए , हम बस इस उप-रेखा का उपयोग करते हैं, जहाँ सूची i एक आइटमों के पहले आधे हिस्से के योगों का समूह है, और सूची b i , सबसेट के योगों का समूह है मदों की दूसरी छमाही के। हम इन सूचियों को एक ही एल्गोरिदम के साथ पुनरावर्ती पा सकते हैं।naibi
अब हम मूल समस्या पर विचार करेंगे। को निर्देशांक का सेट होने दें जो 0 हैं , और S 1 निर्देशांक का सेट है जो 1 हैं । तब
Π मैं ∈ एस 0 पी ( v मैं = 0 ) Π मैं ∈ एस 1 पी ( v मैं = 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)).
इन नंबरों छंटाई छँटाई नंबरों के समान है , तो हम के सबसेट की रकम छँटाई करने के लिए समस्या को कम कर दिया n आइटम नहीं है।∑i∈S1logp(vi=1)−logp(vi=0)n