Codificación rápida de vectores balanceados

10

Es fácil ver que para cualquier existe un mapeo 1-1 de {0,1} a {0,1} tal que para cualquier el vector está "equilibrado", es decir, tiene el mismo número de 1s y 0s. ¿Es posible definir tal para que dada podamos calcular eficiente?F n n + O ( log n ) x F ( x ) F x F ( x )nFnn+O(logn)xF(x)FxF(x)

Gracias.

Piotr
fuente
Supongo que por 'eficiente' te refieres a O (n) o por ahí, descartando el argumento de "ensayos aleatorios repetidos".
Suresh Venkat
@Suresh, ¿sería capaz de esbozar el argumento de "ensayos aleatorios repetidos"?
Emil
Una forma de demostrar que el mapeo existe es mediante el método probabilístico: seleccione F al azar, y luego el mapeo funciona con cierta probabilidad. a eso me refería.
Suresh Venkat
1
La pregunta está perfectamente bien definida pero, en mi opinión, el título es engañoso. No llamaría a un mapeo F que satisfaga la condición establecida una "codificación de vectores balanceados" a menos que F sea biyectivo. Es más como una codificación de una cadena de n bits por un vector equilibrado.
Tsuyoshi Ito
"Perfectamente bien definido" hasta interpretaciones posiblemente diferentes de "eficientemente", quiero decir. Pero este no es el punto de mi comentario anterior.
Tsuyoshi Ito

Respuestas:

12

Consideremos las cadenas de bits . Definiciones:xnx

  • x if(x,i) = cadena de bits con los últimos bits complementados.xi
  • x x - xb(x) = "desequilibrio" de : número de 1s en número de 0s en .xx x

Ahora arregla una cadena . Considere la función . Observaciones:g ( i ) = b ( f ( x , i ) )xg(i)=b(f(x,i))

  • sol(0 0)=si(X) .
  • sol(norte)=-sol(0 0) .
  • iEl |sol(yo)-sol(yo+1)El |=2 para todo . Eliminamos un 0 y agregamos un 1 o viceversa.yo

Ahora se deduce que existe un tal que .- 1 g ( i ) + 1yo-1sol(yo)+1

Por lo tanto, podemos construir una cadena de bits siguiente manera: concatenar y la codificación binaria del índice . El valor absoluto del desequilibrio de es . Además, podemos recuperar dado ; El mapeo es biyección.y f ( x , i ) i y O ( log n ) x y(norte+O(Iniciar sesiónnorte))yF(X,yo)yoyO(Iniciar sesiónnorte)Xy

Finalmente, puede agregar bits ficticios que reducen el desequilibrio de de a .y O ( log n ) 0O(Iniciar sesiónnorte)yO(Iniciar sesiónnorte)0 0

Jukka Suomela
fuente
b (x) en la tercera línea debe ser b (y).
Emil
Creo que posiblemente deba agregar otro bit a la cadena x para asegurarse de que tenga una longitud uniforme (de modo que pueda estar seguro de que g (i) es cero para algunos i).
Emil
@Emil: No afirmo que sea ​​cero para algunos ; es suficiente que el valor absoluto de sea ​​"bastante pequeño" para algunos (como mucho logarítmico sería suficiente, pero es fácil demostrar que será como máximo para algunos ). i g ( i ) i 1 isol(yo)yosol(yo)yo1yo
Jukka Suomela
@ Jukka: Ah, sí, ya veo.
Emil
1
Pero sí, tiene razón, hay muchas variantes del mismo enfoque básico. Por ejemplo, como sugirió, primero puede usar un bit de relleno para asegurarse de que sea ​​igual a cero para algunos i ; entonces puede codificar i utilizando los pares de bits 01 o 10 , es decir, 2 log ( n ) bits adicionales; entonces el resultado de la concatenación está estrictamente equilibrado y no necesita agregar nada más. sol(yo)yoyo01102Iniciar sesión(norte)
Jukka Suomela
9

Use el mapeo que preserva el orden lexicográfico. Para encontrar el -ésimo vector equilibrado de longitud n con n / 2 1's, hágalo recursivamente: si k ( n - 1knn/2, luego establezca el primer bit 0 y luego encuentre elk-ésimovector delongitudcon1 para completar losbitsrestantes. De lo contrario, establezca el primer bit 1 y encuentre el-th length-con1's.k(norte-1norte/ /2)kn / 2 n - 1 k - ( n - 1(norte-1)norte/ /2norte-1(n-1)n/2-1k-(norte-1norte/ /2)(norte-1)norte/ /2-1

Zeyu
fuente
1
Y si reutiliza el valor de un coeficiente binomial para calcular el siguiente coeficiente binomial requerido, todo el algoritmo se ejecuta en tiempo O (n).
Tsuyoshi Ito
¡Gracias! Esto tiene sentido. Supongo que el tiempo de ejecución dependerá del modelo computacional. Si puede realizar operaciones con números de n bits en unidad de tiempo, la implementación de Tsuyoshi Ito se ejecutará en tiempo O (n). Por otro lado, si cuenta las operaciones de bit, creo que el tiempo será O (n ^ 2).
Piotr