2009-08-22 17 views
6

के वहाँ मान लीजिए n प्रविष्टियों, जिनमें से प्रत्येक की या मूल्य ले जा सकते हैं की राशि। इसका मतलब है कि 2^n उन प्रविष्टियों के संभावित संयोजन हैं। प्रविष्टियों की संख्या से से भिन्न हो सकती है।सभी संभावित संयोजन बनाने के लिए एक कुशल एल्गोरिदम क्या है?

एन = 2: 00, 01, 10, 11 के लिए संख्याओं के अनुक्रम के रूप में आप प्रत्येक संभव संयोजन को कैसे बना सकते हैं (i.e.), हजारों आईएफ का उपयोग किए बिना?

+2

क्या आपने इसका जवाब देखा है: http://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n – Shog9

उत्तर

15

आप बाइनरी फॉर्म में 0..2^n-1 नंबरों को प्रिंट करके प्राप्त कर सकते हैं।

+0

धन्यवाद, उस बारे में नहीं सोचा । कभी-कभी जवाब आपकी नाक के ठीक सामने होता है फिर भी आप इसे नहीं देखते हैं। – Hans

1

गणितीय संयोजन के एमएच लेक्सिकोोग्राफिक तत्व उत्पन्न करना। । LINK

और तुम DON KNUTH द्वारा इस देखना होगा (। सभी संभव संयोजनों जनरेट कर रहा है नोट: सी # कोड भी प्रदान किया जाता है।)

0

प्रत्येक प्रविष्टियों के लिए संभावित मान केवल या हो सकता है तो 1, और आप केवल 0 और 1 संयोजन चाहते हैं, आप प्राकृतिक पूर्णांक (बाइनरी रूप में) 2^(एन -1) तक क्यों नहीं उपयोग करते हैं ... जैसा कि निक द्वारा ऊपर सुझाया गया है ... और उन लोगों को प्रारूपित करें जिन्हें ' 0 'पैडिंग यदि आप स्ट्रिंग चाहते हैं ...

3

भी ठीक हो सकता है बस इनट्स का उपयोग करें:

n = 5 
for x in range(2**n): 
    print ''.join(str((x>>i)&1) for i in xrange(n-1,-1,-1)) 

this answer से बाइनरी रूपांतरण के लिए पागल दशमलव।

आउटपुट:

00000 
00001 
00010 
00011 
00100 
00101 
00110 
00111 
01000 
01001 
01010 
01011 
01100 
01101 
01110 
01111 
10000 
10001 
10010 
10011 
10100 
10101 
10110 
10111 
11000 
11001 
11010 
11011 
11100 
11101 
11110 
11111 
+0

अफसोस की बात है कि मैं थोड़ा सा पायथन नहीं समझता, मैं मुख्य रूप से जावा का उपयोग करता हूं। लेकिन मैं इसे एक शॉट देने की कोशिश करूंगा। धन्यवाद। – Hans

0

या का उपयोग itertools:

import itertools 

for item in itertools.product((1, 0), repeat=4): 
    print item 

नोट है कि आइटम इस मामले में 4 तत्वों का एक टपल है।

संबंधित मुद्दे