2009-08-22 18 views
6

Her biri veya değerini alabilecek olan n nolu giriş miktarının olduğunu varsayalım. Bu, 2^n bu girişlerin olası kombinasyonları anlamına gelir. Giriş sayısı 'dan 'a kadar değişebilir.Tüm olası kombinasyonları oluşturmak için verimli bir algoritma nedir?

Bin IF'ye başvurmadan, olası her kombinasyonu sayı dizisi olarak (yani n = 2: 00, 01, 10, 11 için) nasıl oluşturabilirsiniz?

+2

Yanıtları gördünüz mü: http://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n – Shog9

cevap

15

Bunu, yalnızca 0..2^n-1 numaralarını ikili biçimde yazdırarak yapabilirsiniz.

+0

Teşekkürler. . Bazen cevap burnunuzun tam önündedir, ama görmüyorsunuz. – Hans

1

Matematiksel Bileşenlerin Milyodik Geometrik Öğesinin Oluşturulması. . LINK

Ve DON KNUTH bu görmek gerekir (. Tüm olası kombinasyonları oluşturuluyor NOT: C# kodu da orada sağlamak olduğunu.)

0

her girişler için olası değerler sadece veya olabiliyorsa 1, ve sadece 0 ve 1 kombinasyonunu istiyorsunuz, niçin doğal tamsayıları (ikili formda) 2^(n-1) ... 'a kadar yukarıda belirtildiği gibi kullanmayınız ... 0 'dize isterseniz dolgu ...

3

this answer kaldırıldığı ikili dönüşüme

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

Çılgın ondalık: sadece int'leri kullanın.

Çıktı:

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

Ne yazık ki biraz Python anlamıyorum, esas olarak Java kullanıyorum. Ama ona bir şans vermeye çalışacağım. Teşekkürler. – Hans

0

Veya kullanmak itertools: öğe bu durumda 4 element tuple olduğunu

import itertools 

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

Not.

İlgili konular