Ich arbeite an einem Baumsuchalgorithmus, wo ich Bipartitionen von Elementen verwenden, die über ein Bitset dargestellt werden, d.h. das Bitset 1000101
repräsentiert die Bipartition {0,2,6} {1,3,4,5}
.Permutation für meist ausgeglichene Bipartitionen
Im Moment ich durchlaufen alle Zweitheilungen einfach durch eine bitset Inkrementieren, dh durch alle Zweitheilungen des Satzes {0,1,2,3}
, die ich von 0001
(einschließlich) bis 1000
(exklusiv)
Da mein Algorithmus gehen zu iterieren manchmal erlaubt mir, schnell zu versagen, wenn ich eine passende Zweiteilung gefunden habe, ich möchte sie so umordnen, dass ich zuerst ausgeglichenere Zweiteilungen ansehe.
So wollte ich fragen, ob jemand eine Permutation der Zahlen von 1 bis 2^k weiß, wo min (#set Bits, #unset Bits) mehr oder weniger nur abnimmt, die noch effizient berechnet werden kann .
Da dies eine Heuristik ist, suche ich nicht nach genauen Ergebnissen, nur um meinen Algorithmus etwas zu beschleunigen.
Gibt es eine bestimmte Geschwindigkeit, die Sie suchen? Das Finden der nächsten Partition mit der gleichen Anzahl von gesetzten Bits ist eine Operation der Ordnung "k". Sie könnten das verwenden, um alle 'k // 2'-Partitionen zu durchlaufen, dann' k // 2-1' usw. Ist das schnell genug? –
Je nachdem, was Sie versuchen, kann ein * Gray-Code * hilfreich sein (https://en.wikipedia.org/wiki/Gray_code). Der Abschnitt über * monotone Gray-Codes * scheint relevant zu sein. –
@RoryDaulton Vielen Dank, Ihr Kommentar hat mich definitiv in die richtige Richtung geführt. –