Es ist leicht zu erkennen, dass für jedes eine 1-1-Abbildung von {0,1} auf {0,1} so dass für jedes der Vektor ist "ausgeglichen", dh es hat die gleiche Anzahl von Einsen und Nullen. Ist es möglich, ein solches so zu definieren , dass wir mit effizient berechnen können ?F n n + O ( log n ) x F ( x ) F x F ( x )
Vielen Dank.
Antworten:
Betrachten wir Bit-Strings . Definitionen:xn x
Korrigieren Sie nun eine Zeichenfolge . Betrachten Sie die Funktion . Beobachtungen:g ( i ) = b ( f ( x , i ) )x g(i)=b(f(x,i))
Nun folgt, dass es ein so dass .- 1 ≤ g ( i ) ≤ + 1i −1≤g(i)≤+1
Daher können wir eine -Bit-Zeichenfolge wie folgt konstruieren : Verketten Sie und die binäre Codierung des Index . Der absolute Wert des Ungleichgewichts von ist . Darüber hinaus können wir mit wiederherstellen ; Das Mapping ist Bijektion.y f ( x , i ) i y O ( log n ) x y(n+O(logn)) y f(x,i) i y O(logn) x y
Schließlich können Sie -Dummy-Bits hinzufügen , die das Ungleichgewicht von von auf reduzieren .O(logn) y O(logn) 0
quelle
Verwenden Sie die Zuordnung, die die lexikografische Reihenfolge beibehält. Um den ten Längen- ausgeglichenen Vektor mit Einsen zu finden , gehen Sie rekursiv vor: Wenn , setzen Sie das erste Bit 0 und suchen Sie dann die te Länge - Vektor mit Einsen, um die verbleibenden Bits zu vervollständigen . Andernfalls setzen Sie das erste Bit 1 und finden Sie den -ten Längen- Vektor mit 1.k n n/2 k(n-1)n/2n-1k-(n-1k≤(n−1n/2) k (n−1) n/2 n−1 (n-1)n/2-1k−(n−1n/2) (n−1) n/2−1
quelle