如何遍历从所有可能的b位数组中选择n个b位数组的所有方法?
How to iterate over all ways of choosing n b-bit arrays from all possible b-bit arrays?
有 2^b
个 b 位数组。有“2^b
choose n
”不同的方式来选择n
b位数组。我想遍历所有“2^b
选择 n
” 选择 n
b 位数组的不同方式。显然,如果 b
和 n
都很小,这在现实的时间范围内才有可能。
我怎么能在 Julia 中做到这一点?
您可以使用 Combinatorics.jl 中的 combinations
来生成各种组合。而且,根据您要查找的内容,您可以使用 string
或 bitstring
将整数转换为二进制表示形式:
julia> string(123, base=2)
"1111011"
julia> bitstring(123)
"0000000000000000000000000000000000000000000000000000000001111011"
为简洁起见,我将坚持string
。这是 b = 3
和 n = 2
的完整计算示例:
julia> using Combinatorics
julia> r = 0:2^3-1
0:7
julia> b = string.(r, base=2)
8-element Array{String,1}:
"0"
"1"
"10"
"11"
"100"
"101"
"110"
"111"
julia> combs = combinations(b, 2);
julia> foreach(println, combs)
["0", "1"]
["0", "10"]
["0", "11"]
["0", "100"]
["0", "101"]
["0", "110"]
["0", "111"]
["1", "10"]
["1", "11"]
["1", "100"]
["1", "101"]
["1", "110"]
["1", "111"]
["10", "11"]
["10", "100"]
["10", "101"]
["10", "110"]
["10", "111"]
["11", "100"]
["11", "101"]
["11", "110"]
["11", "111"]
["100", "101"]
["100", "110"]
["100", "111"]
["101", "110"]
["101", "111"]
["110", "111"]
有 2^b
个 b 位数组。有“2^b
choose n
”不同的方式来选择n
b位数组。我想遍历所有“2^b
选择 n
” 选择 n
b 位数组的不同方式。显然,如果 b
和 n
都很小,这在现实的时间范围内才有可能。
我怎么能在 Julia 中做到这一点?
您可以使用 Combinatorics.jl 中的 combinations
来生成各种组合。而且,根据您要查找的内容,您可以使用 string
或 bitstring
将整数转换为二进制表示形式:
julia> string(123, base=2)
"1111011"
julia> bitstring(123)
"0000000000000000000000000000000000000000000000000000000001111011"
为简洁起见,我将坚持string
。这是 b = 3
和 n = 2
的完整计算示例:
julia> using Combinatorics
julia> r = 0:2^3-1
0:7
julia> b = string.(r, base=2)
8-element Array{String,1}:
"0"
"1"
"10"
"11"
"100"
"101"
"110"
"111"
julia> combs = combinations(b, 2);
julia> foreach(println, combs)
["0", "1"]
["0", "10"]
["0", "11"]
["0", "100"]
["0", "101"]
["0", "110"]
["0", "111"]
["1", "10"]
["1", "11"]
["1", "100"]
["1", "101"]
["1", "110"]
["1", "111"]
["10", "11"]
["10", "100"]
["10", "101"]
["10", "110"]
["10", "111"]
["11", "100"]
["11", "101"]
["11", "110"]
["11", "111"]
["100", "101"]
["100", "110"]
["100", "111"]
["101", "110"]
["101", "111"]
["110", "111"]