Complete Boolean Lattice对应的程序 *Q_n*
Program corresponding to Complete Boolean Lattice *Q_n*
我是数学系的一年级学生,我还没有编程 class。
我正在做一个项目,为了简化我的计算,最好实现一个程序来计算对应于完整布尔格的矩阵 Q_n ,它是一组从 1 到 n 的 n 个整数及其所有可能的子集。
例如,当 n=4 时,矩阵如下:
1;0;0;0;1;1;1;0;0;0;1;1;1;0;1
0;1;0;0;1;0;0;1;1;0;1;1;0;1;1
0;0;1;0;0;1;0;1;0;1;1;0;1;1;1
0;0;0;1;0;0;1;0;1;1;0;1;1;1;1
其中第一列对应于 {1,2,3,4} 的子集 {1},第二列对应于 {1,2,3,4} 的子集 {2},例如第 5 列对应于子集{1,2} 共 {1,2,3,4} 等等。
我的想法是首先创建相应大小的全零矩阵然后我不知道如何进行。请帮我出出主意。
itertools 模块让这一切变得简单。这是一种方法:
import itertools
def subset_matrix(n):
A = [[0]*pow(2,n) for _ in range(n)]
j = 0
for k in range(n+1):
for c in itertools.combinations(range(n),k):
for i in c:
A[i][j] = 1
j += 1
return A
#for example:
A = subset_matrix(4)
for row in A:
print(row)
输出:
[0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1]
[0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1]
[0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]
[0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1]
我是数学系的一年级学生,我还没有编程 class。
我正在做一个项目,为了简化我的计算,最好实现一个程序来计算对应于完整布尔格的矩阵 Q_n ,它是一组从 1 到 n 的 n 个整数及其所有可能的子集。
例如,当 n=4 时,矩阵如下:
1;0;0;0;1;1;1;0;0;0;1;1;1;0;1
0;1;0;0;1;0;0;1;1;0;1;1;0;1;1
0;0;1;0;0;1;0;1;0;1;1;0;1;1;1
0;0;0;1;0;0;1;0;1;1;0;1;1;1;1
其中第一列对应于 {1,2,3,4} 的子集 {1},第二列对应于 {1,2,3,4} 的子集 {2},例如第 5 列对应于子集{1,2} 共 {1,2,3,4} 等等。
我的想法是首先创建相应大小的全零矩阵然后我不知道如何进行。请帮我出出主意。
itertools 模块让这一切变得简单。这是一种方法:
import itertools
def subset_matrix(n):
A = [[0]*pow(2,n) for _ in range(n)]
j = 0
for k in range(n+1):
for c in itertools.combinations(range(n),k):
for i in c:
A[i][j] = 1
j += 1
return A
#for example:
A = subset_matrix(4)
for row in A:
print(row)
输出:
[0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1]
[0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1]
[0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]
[0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1]