【发布时间】:2022-11-11 01:22:03
【问题描述】:
是否有一种有效的方法来生成具有给定数量的“真”值的所有可能的布尔数组?
现在我正在增加一个数字并检查它的二进制表示是否具有给定数量的 1(如果是,则添加该数组)。但是对于较大的给定,这变得非常缓慢。
这是我正在寻找的输入输出类型:
(length: 4, trues: 2) -> [[1,1,0,0],[1,0,1,0],[0,1,1,0],[1,0,0,1],[0,1,0,1],[0,0,1,1]]
问题是在小于 O(2^N) 的时间内完成,因此它们按照小端二进制表示的顺序排列。
如果它有帮助,长度将是编译时的固定数字(目前是 64)。我把它写成输入是因为我可能不得不将它增加到 128,但它在运行时不会改变。
【问题讨论】:
-
如果在运行时可以配置真值的数量,则需要生成向量,而不是数组。
-
@user4815162342 谢谢,我知道该函数会生成一个 Vec<[bool]> (当前是一个 Vec<[bool;64]>),但为了简单起见,没有在伪代码中指定。我编辑了问题以澄清哪些输入在运行时会发生变化。
-
您是否尝试过 itertools crate 中的
permutations()或combinations()?我试过something like this,但它返回的排列比你的例子多得多。
标签: optimization rust combinations