Para
n=0 -> somabits=0
n=1 -> somabits=1
n=2 -> somabits=4
n=3 -> somabits=11
n=4 -> soma_bits=26
Deste modo, podemos achar a equação de soma_ bits(n) em função de soma_bits(n-1). Deste modo:
somabits(0)=0
somabits(1) = (2 * 0) + 1 = 2*somabits(0) + 1
somabits(2) = (2 * 1) + 2 = 2*somabits(1) + 2
somabits(3) = (2 * 4) + 3 = 2*somabits(2) + 3
somabits(4) = (2 * 11) + 4 = 2*somabits(3) + 4
somabits(n) = 2*somabits(n-1) + n
Assim, para achar a soma de bits no Python:
def soma_bits(n):
if (n==1):
return 1
else:
return (2*soma_bits(n-1)+n)
Alguns exemplos:
soma_bits(3)
Out: 11
soma_bits(7)
Out: 247
Agora para criar a tabela, primeiro definimos uma função que retorna todas as combinações binárias possíveis para um determinando n, eliminando a primeira linha de (0,0,0....n). Assim:
import itertools
import numpy as np
#matriz(2^n - 1 linhas e n colunas) que retorna a permutação de n
def bin_perm(n):
lista=0
lista=np.array(list(itertools.product([0, 1], repeat=n)))
lista=np.delete(lista, (0), axis=0)
return lista
Obtendo o resultado para n=4:
bin_perm(4)
Out:
array([[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 0, 1, 1],
[0, 1, 0, 0],
[0, 1, 0, 1],
[0, 1, 1, 0],
[0, 1, 1, 1],
[1, 0, 0, 0],
[1, 0, 0, 1],
[1, 0, 1, 0],
[1, 0, 1, 1],
[1, 1, 0, 0],
[1, 1, 0, 1],
[1, 1, 1, 0],
[1, 1, 1, 1]])
Em seguida, use o resultado acima para criar a tabela desejado com a ajuda do plotly:
import plotly
import plotly.plotly as py
from plotly.offline import init_notebook_mode
import plotly.figure_factory as ff
plotly.offline.init_notebook_mode(connected=True)
table_data = [["Coluna 1", "Coluna 2","Coluna 3", "Coluna 4"],
[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 0, 1, 1],
[0, 1, 0, 0],
[0, 1, 0, 1],
[0, 1, 1, 0],
[0, 1, 1, 1],
[1, 0, 0, 0],
[1, 0, 0, 1],
[1, 0, 1, 0],
[1, 0, 1, 1],
[1, 1, 0, 0],
[1, 1, 0, 1],
[1, 1, 1, 0],
[1, 1, 1, 1]]
figure = ff.create_table(table_data)
plotly.offline.plot(figure)
E a imagem gerada é:
