gücü kümesinden önemsiz örten eşleme vardır X = {A, B, C, D, E, F, G, H, I} 0 ile 2 arasındaki sayı kümesine. | X | = 2^9:
çap harita (taban 2) 000000000 için
{A} 100000000 eşleştiren (taban 2)
{B} 010000000 eşleştiren (taban 2)
{ C} 001000000 (taban 2)
... eşleştiren
{I} 000000001 eşleştiren (baz 2)
{A, B} 110,000,000 (2 tabanı)
{A, C} 101000000 eşleştiren (taban 2)
... eşleştiren
{A, B, C, D, E, Eğer önlemek Bu şekilde
Set powerset = new Set();
for(int i between 0 and 2^9)
{
Set subset = new Set();
for each enabled bit in i add the corresponding letter to subset
add subset to powerset
}
: F, G, H, I} Bu (yalancı kod) gibi set gücü oluşturmak için bu gözlemi kullanabilirsiniz
111111111 (taban 2) eşleştiren herhangi bir özyineleme (ve neye ihtiyacın olduğuna bağlı olarak) Bunun için, birçok veri yapısını tahsis etmeden powerset'i "üretebilir" - örneğin, yalnızca güç setini yazdırmanız gerekiyorsa).
http://rosettacode.org/wiki/Power_set#Non-recursive_version – tur1ng
@ tur1ng Ah serin bu. Derlemeyi ve neler olduğunu görmeyi deneyeceğim. – zaf
Algoritmanızda bir hata olmadığından emin misiniz? Daha küçük girdiler için işe yarıyor mu? Sormamın nedeni 2^9 = 512 'ABCDEFGHI' alt kümesi olması ve 1GB'lık belleğin kullanılması, * yanlış bir şey yapmanız gerektiği anlamına gelir. –