Перестановка двоичного числа путем замены двух битов (не лексикографически)
Я ищу алгоритм, который вычисляет все перестановки цепочки битов заданной длины (n
) и количество установленных бит (k
). Например покаn=4
а такжеk=2
алгоритм должен вывести:
1100
1010
1001
0011
0101
0110
Я знаю о взломе Госпера, который генерирует необходимые перестановки в лексикографическом порядке. Но мне нужно, чтобы они генерировались таким образом, чтобы две последовательные перестановки отличались только двумя (или, по крайней мере, постоянным количеством) битовых положений (как в приведенном выше примере). Еще один битхак, который мог бы сделать это, был бы потрясающим, но также мне могло бы помочь алгоритмическое описание.