Eu decidi que um bit 1 indica que o item está no subconjunto e que 0 indica que não está. Então, se o meu conjunto for (A, B, C, D), 0000 vai representar o conjunto vazio, 0001 vai representar (D), 0010 vai representar (C) e assim por diante. O último subconjunto é o próprio conjunto, representado por 1111.
O fato de que eu preciso contar até 2n-1 me lembrou do triângulo de Pascal. A soma dos números de cada linha do triângulo é 2n e isso me fez perceber que os números, individualmente, devem representar alguma coisa também.
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
Como cada número do triângulo representa a quantidade de subconjuntos com uma certa quantidade de itens, eles têm que representar também a quantidade de números que têm um determinado número de dígitos 1.
Por exemplo, a quarta linha é "1 3 3 1" e equivale a um número de 3 bits. Com 3 bits, podemos representar os seguintes números:
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7
Temos, então, 1 número só de zeros, 3 com apenas 1 dígito 1, 3 com 2 dígitos 1 e apenas 1 com 3 dígitos 1.
Alternativamente, se eu quiser saber quantos números de 1 byte possuem 3 dígitos 1, posso rapidamente descobrir no triângulo que são 56.
Certamente, esconde-se aí alguma verdade capaz de trazer fama, dinheiro e mulheres.
Nenhum comentário:
Postar um comentário