Permutationen der Binärzahl durch Vertauschen von zwei Bits (nicht lexikographisch)

Ich suche einen Algorithmus, der alle Permutationen eines Bitstrings gegebener Länge berechnet n) und Anzahl der gesetzten Bits k). Zum Beispiel, währendn=4 undk=2 Der Algorithmus soll ausgeben:

1100
1010
1001
0011
0101
0110

Mir ist Gospers Hack bekannt, der die erforderlichen Permutationen in lexikografischer Reihenfolge generiert. Aber ich muss sie so generieren, dass sich zwei aufeinanderfolgende Permutationen in nur zwei (oder zumindest einer konstanten Anzahl von) Bitpositionen unterscheiden (wie im obigen Beispiel). Ein weiterer Versuch, das zu tun, wäre fantastisch, aber auch eine algorithmische Beschreibung würde mir sehr helfen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage