Перестановка двоичного числа путем замены двух битов (не лексикографически)

Я ищу алгоритм, который вычисляет все перестановки цепочки битов заданной длины (n) и количество установленных бит (k). Например покаn=4 а такжеk=2 алгоритм должен вывести:

1100
1010
1001
0011
0101
0110

Я знаю о взломе Госпера, который генерирует необходимые перестановки в лексикографическом порядке. Но мне нужно, чтобы они генерировались таким образом, чтобы две последовательные перестановки отличались только двумя (или, по крайней мере, постоянным количеством) битовых положений (как в приведенном выше примере). Еще один битхак, который мог бы сделать это, был бы потрясающим, но также мне могло бы помочь алгоритмическое описание.

Ответы на вопрос(2)

Ваш ответ на вопрос