2009-08-22 3 views
6

nのエントリがあり、それぞれがまたはの値を取るとします。つまり、2^nの可能な組み合わせがあります。エントリの数は、からまで変わる可能性があります。可能なすべての組み合わせを作成するための効率的なアルゴリズムとは何ですか?

何千ものIFに頼らずに、一連の数字(、つまり、n = 2:00、01、10、11)としてそれぞれの組み合わせを作成するにはどうすればよいですか?

+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

数学的組み合わせの第mの辞書学的要素の生成。 LINK

そして、あなたはDON KNUTHことによって、これを見なければならない。(すべての可能な組み合わせを生成NOTE:C#コードをもそこに提供されています。)

0

各エントリに指定できる値は唯一またはすることができた場合1、あなたはちょうど0と1の組み合わせが必要なのですが、Nickによって上に示唆されているように自然な整数(バイナリ形式)を2 ^(n-1)あなたが文字列をしたい場合は0のパディング...

3

ちょうどint型を使用します。

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

悲しいことに私は少しPythonを理解していない、私は主にJavaを使用します。しかし、私はそれを試してみるつもりです。ありがとう。 – Hans

0

または使用itertools:項目は、この場合の4つの要素のタプルであること

import itertools 

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

注意。

関連する問題