首页 > 解决方案 > 如何根据条件生成 2**40 个可能的二进制数

问题描述

我想生成所有可能的 2**N 二进制数,条件是每个数组必须有 20 个(1)这样的:00000000001111111111111111111110000000000,我找到了生成二进制矩阵的方法,如下所示:

import itertools
l = itertools.product([0, 1], repeat=N)

我尝试使用 Numpy 生成它,但出现内存错误。

那么还有其他方法吗?

标签: python

解决方案


预期的问题规模是不可行的,但这里是一个基于 itetools 的所有 n 位数和 k 个数的生成器:

import itertools

def k_ones(n,k):
    """generates n-bit integers with exactly k ones"""
    for c in itertools.combinations(range(n),k):
        n = 0
        for i in c:
            n |= (1 << i)
        yield n

#test:

for i in k_ones(5,2):
    print(format(i,'05b'))

输出:

00011
00101
01001
10001
00110
01010
10010
01100
10100
11000

推荐阅读