Розглянемо бітні рядки . Визначення:xnx
- x if(x,i) = бітовий рядок з доповненими останніми бітами .xi
- x x - xb(x) = "дисбаланс" : число 1s у число 0s у .xx −x
Тепер виправте рядок . Розглянемо функцію . Спостереження:g ( i ) = b ( f ( x , i ) )xg(i)=b(f(x,i))
- g(0)=b(x) .
- g(n)=−g(0) .
- i|g(i)−g(i+1)|=2 для всіх . Ми або видаляємо один 0 і додаємо 1, або навпаки.i
Тепер випливає, що існує такий, що .- 1 ≤ g ( i ) ≤ + 1i−1≤g(i)≤+1
Отже, ми можемо побудувати біт-рядок таким чином: об'єднати і двійкове кодування індексу . Абсолютне значення дисбалансу дорівнює . Більше того, ми можемо відновити заданий ; відображення бієкція.y f ( x , i ) i y O ( log n ) x y(n+O(logn))yf(x,i)iyO(logn)xy
Нарешті, ви можете додати макетні біти які зменшують дисбаланс з до .y O ( log n ) 0O(logn)yO(logn)0