Skip to content

benide/GrayCodeIterator.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GrayCodeIterator.jl

Build Status Coverage

GrayCodeIterator.jl provides an iterator for all binary vectors of length $n$ and weight $k$, optionally with a supplied prefix.

julia> for v in GrayCode(4,2)
           println(v)
       end
[0, 0, 1, 1]
[0, 1, 1, 0]
[0, 1, 0, 1]
[1, 1, 0, 0]
[1, 0, 1, 0]
[1, 0, 0, 1]

julia> for v in GrayCode(4,2,[1,0])
           println(v)
       end
[1, 0, 0, 1]
[1, 0, 1, 0]

The vector can be modified in-place to save allocations:

julia> using BenchmarkTools

julia> @btime sum(maximum(v) for v in GrayCode(23,13))
  54.801 ms (1144073 allocations: 261.86 MiB)
1144066

julia> @btime sum(maximum(v) for v in GrayCode(23,13,mutate=true))
  15.782 ms (7 allocations: 1.12 KiB)
1144066

Note that this only saves allocations for Julia 1.8+.

References

The algorithm is based on the following paper:

Bitner, J. R., Ehrlich, G., & Reingold, E. M. (1976). Efficient generation of the binary reflected Gray code and its applications. Communications of the ACM, 19(9), 517-521.

About

Julia iterator for fixed weight binary vectors

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages