2009-08-22 21 views
6

Nehmen wir an, es gibt n Anzahl der Einträge, von denen jeder den Wert oder nehmen kann. Das heißt, es gibt 2^n mögliche Kombinationen dieser Einträge. Die Anzahl der Einträge kann von bis variieren.Was ist ein effizienter Algorithmus zum Erstellen aller möglichen Kombinationen?

Wie können Sie jede mögliche Kombination als eine Folge von Zahlen erstellen (, d. H. für n = 2: 00, 01, 10, 11), ohne auf tausend IFs zurückgreifen?

+2

Haben Sie die Antworten auf: http://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n – Shog9

Antwort

15

Sie können dies erreichen, indem Sie einfach die Zahlen 0..2^n-1 in binärer Form drucken.

+0

Danke, habe nicht daran gedacht . Manchmal liegt die Antwort direkt vor deiner Nase, aber du siehst es nicht. – Hans

1

Erzeugung des m-ten lexikografischen Elements einer mathematischen Kombination. . LINK

Und Sie müssen diese durch DON KNUTH sehen (. Alle möglichen Kombinationen generieren HINWEIS: C# -Code auch dort zur Verfügung stellen.)

0

Wenn möglich Werte für die einzelnen Einträge nur oder sein kann 1, und Sie wollen nur 0 und 1 Kombination, warum verwenden Sie nicht die natürlichen Ganzzahlen (in binärer Form) bis zu 2^(n-1) ... wie oben von Nick vorgeschlagen .. und formatieren Sie diese mit ' 0 'Padding, wenn Sie String wollen ...

3

Macht auch nur verwenden Ints:

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

Verrücktes Dezimalzahl in Binär-Konvertierung von this answer angehoben.

Ausgang:

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

Leider verstehe ich ein wenig Python nicht, ich benutze hauptsächlich Java. Aber ich werde versuchen, es zu versuchen. Vielen Dank. – Hans

0

Oder verwenden itertools:

import itertools 

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

Beachten Sie, dass das Element ein Tupel von 4 Elementen in diesem Fall ist.

Verwandte Themen