【问题标题】:Program corresponding to Complete Boolean Lattice *Q_n*完全布尔格*Q_n*对应的程序
【发布时间】:2020-05-15 17:40:49
【问题描述】:

我是数学系的一年级学生,我还没有编程课。

我正在做一个项目,为了简化我的计算,最好实现一个程序来计算一个对应于完整布尔格 Q_n 的矩阵,这是一组 n 个整数1 到 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 {1,2,3,4} 中的 ,​​2} 等等。

我的想法是首先创建相应大小的全零矩阵,然后我不知道如何进行。请帮我出主意。

【问题讨论】:

    标签: python matrix subset adjacency-matrix boolean-algebra


    【解决方案1】:

    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]
    

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多