Это просто (N choose N/2)
; вы выбираете, какие биты равны 0, остальные - 1.
Если у вас есть 10 битов, и вы хотите 5 нулей и 5 единиц, есть возможности (10 choose 5) = 252
.
Смотри также:
Как уже указывалось, это число является биномиальным коэффициентом (n k)
. Когда k
равен n/2
, это когда этот коэффициент является наибольшим; Я уверен, что вы знаете, что существует множество возможностей, поэтому вам нужен самый быстрый алгоритм их генерации.
Вместо микрооптимизации этого генератора, чтобы сделать его максимально быстрым, я бы сначала исчерпал все другие варианты: вы уверены, что не можете добиться большего успеха, чем использовать все возможности? Это грубое решение не масштабируется.
Попробуйте найти лучший алгоритм, если это возможно.