Подсчет всех двоичных чисел с равными 1 и 0 - PullRequest
3 голосов
/ 14 апреля 2010

Я реализую двоичное представление алгоритма двунаправленного разбиения на равных сторонах, и мне интересно, как лучше перебрать все комбинации из N битов, которые имеют равные (N / 2) 1 и 0. Я пытаюсь найти самый быстрый способ, а не самый легкий для кодирования. Спасибо.

1 Ответ

2 голосов
/ 14 апреля 2010

Это просто (N choose N/2); вы выбираете, какие биты равны 0, остальные - 1.

Если у вас есть 10 битов, и вы хотите 5 нулей и 5 единиц, есть возможности (10 choose 5) = 252.


Смотри также:


Как уже указывалось, это число является биномиальным коэффициентом (n k). Когда k равен n/2, это когда этот коэффициент является наибольшим; Я уверен, что вы знаете, что существует множество возможностей, поэтому вам нужен самый быстрый алгоритм их генерации.

Вместо микрооптимизации этого генератора, чтобы сделать его максимально быстрым, я бы сначала исчерпал все другие варианты: вы уверены, что не можете добиться большего успеха, чем использовать все возможности? Это грубое решение не масштабируется.

Попробуйте найти лучший алгоритм, если это возможно.

...