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(log⁡n)xF(x)FxF(x)

Gracias.


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-1≤sol(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ón⁡norte))yF(X,yo)yoyO(Iniciar sesión⁡norte)Xy

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


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.