Sangat mudah untuk melihat bahwa untuk setiap ada pemetaan 1-1 dari {0,1} ke {0,1} sedemikian rupa sehingga untuk setiap vektor adalah "seimbang", yaitu memiliki jumlah 1s dan 0s yang sama. Apakah mungkin untuk mendefinisikan sehingga diberikan kita dapat menghitung efisien?
Terima kasih.
Jawaban:
Mari kita pertimbangkan bit string x . Definisi:n x
Sekarang perbaiki sebuah string . Pertimbangkan fungsi g ( i ) = b ( f ( x , i ) ) . Pengamatan:x g(i)=b(f(x,i))
Sekarang berarti ada sedemikian rupa sehingga - 1 ≤ g ( i ) ≤ + 1 .i −1≤g(i)≤+1
Karenanya kita dapat membangun string -bit y sebagai berikut: concatenate f ( x , i ) dan pengkodean biner dari indeks i . Nilai absolut dari ketidakseimbangan y adalah O ( log n ) . Selain itu, kita dapat memulihkan x mengingat y ; pemetaan itu adalah penipisan.(n+O(logn)) y f(x,i) i y O(logn) x y
Akhirnya, Anda bisa menambahkan bit tiruan yang mengurangi ketidakseimbangan y dari O ( log n ) menjadi 0 .O(logn) y O(logn) 0
sumber
Gunakan pemetaan yang mempertahankan urutan leksikografis. Untuk menemukan -th length- n vektor seimbang dengan n / 2 's, lakukan secara rekursif: jika k ≤ ( n - 1k n n/2 , kemudian atur bit pertama 0 dan kemudian temukanvektork-th length-(n-1)dengann/21 untuk melengkapibitn-1 yangtersisa. Kalau tidak, atur bit pertama 1 dan temukank-(n-1k≤(n−1n/2) k (n−1) n/2 n−1 -th length-(n-1)vektor dengann/2-11's.k−(n−1n/2) (n−1) n/2−1
sumber