stringtranslate.com

Código de expansión

En teoría de codificación , los códigos expansores forman una clase de códigos de corrección de errores que se construyen a partir de grafos expansores bipartitos . Junto con los códigos de Justesen , los códigos expansores son de particular interés ya que tienen una tasa positiva constante, una distancia relativa positiva constante y un tamaño de alfabeto constante . De hecho, el alfabeto contiene solo dos elementos, por lo que los códigos expansores pertenecen a la clase de códigos binarios . Además, los códigos expansores pueden codificarse y decodificarse en un tiempo proporcional a la longitud del bloque del código.

Códigos de expansión

En teoría de codificación , un código expansor es un código de bloque lineal cuya matriz de comprobación de paridad es la matriz de adyacencia de un gráfico expansor bipartito . Estos códigos tienen una buena distancia relativa , donde y son propiedades del gráfico expansor como se define más adelante, velocidad y decodificabilidad ( existen algoritmos de tiempo de ejecución).

Definición

Sea un grafo birregular entre un conjunto de nodos , llamados variables , y un conjunto de nodos , llamados restricciones .

Sea una función diseñada de modo que, para cada restricción , las variables vecinas sean .

Sea un código corrector de errores de longitud de bloque . El código expansor es el código de longitud de bloque cuyas palabras de código son las palabras tales que, para , es una palabra de código de . [1]

Se ha demostrado que existen grafos expansores sin pérdidas no triviales. Además, podemos construirlos explícitamente. [2]

Tasa

La tasa de es su dimensión dividida por la longitud de su bloque. En este caso, la matriz de comprobación de paridad tiene un tamaño de , y por lo tanto tiene una tasa de al menos .

Distancia

Supongamos que . Entonces la distancia de un código expansor es al menos .

Prueba

Nótese que podemos considerar cada palabra de código en como un subconjunto de vértices , diciendo que vértice si y solo si el índice n de la palabra de código es 1. Entonces es una palabra de código si y solo si cada vértice es adyacente a un número par de vértices en . (Para ser una palabra de código, , donde es la matriz de verificación de paridad. Entonces, cada vértice en corresponde a cada columna de . La multiplicación de matrices sobre entonces da el resultado deseado). Entonces, si un vértice es adyacente a un solo vértice en , sabemos inmediatamente que no es una palabra de código. Sea n los vecinos en de , y n aquellos vecinos de que son únicos, es decir, adyacentes a un solo vértice de .

Lema 1

Para cada tamaño , .

Prueba

Trivialmente, , ya que implica . se deduce que el grado de cada vértice en es . Por la propiedad de expansión del grafo, debe haber un conjunto de aristas que vayan a vértices distintos. Las aristas restantes forman, como máximo, vecinos no únicos, por lo que .

Corolario

Cada número suficientemente pequeño tiene un vecino único. Esto se deduce de que .

Lema 2

Cada subconjunto tiene un vecino único.

Prueba

El Lema 1 demuestra el caso , así que supongamos . Sea tal que . Por el Lema 1, sabemos que . Entonces un vértice está en si y solo si , y sabemos que , así que por la primera parte del Lema 1, sabemos . Dado que , , y por lo tanto no está vacío.

Corolario

Nótese que si a tiene al menos 1 vecino único, es decir , entonces la palabra correspondiente a no puede ser una palabra de código, ya que no se multiplicará por el vector de todos ceros mediante la matriz de verificación de paridad. Por el argumento anterior, . Como es lineal, concluimos que tiene una distancia de al menos .

Codificación

El tiempo de codificación de un código expansor está limitado en su parte superior por el de un código lineal general ( mediante la multiplicación de matrices). Un resultado de Spielman muestra que la codificación es posible en el tiempo. [3]

Descodificación

La decodificación de códigos expansores es posible a tiempo utilizando el siguiente algoritmo.

Sea el vértice de que corresponde al índice n en las palabras de código de . Sea una palabra recibida, y . Sea , y sea . Consideremos entonces el algoritmo voraz:


Entrada: palabra recibida .

inicializar y' a ymientras haya un v en R adyacente a un número impar de vértices en V(y') si existe una i tal que o(i) > e(i) voltear la entrada i en y' demás fallar

Salida: error o palabra clave modificada .


Prueba

Mostramos primero la corrección del algoritmo y luego examinamos su tiempo de ejecución.

Exactitud

Debemos demostrar que el algoritmo termina con la palabra clave correcta cuando la palabra clave recibida está dentro de la mitad de la distancia del código con respecto a la palabra clave original. Sea el conjunto de variables corruptas , , y el conjunto de vértices insatisfechos (adyacentes a un número impar de vértices) en sea . El siguiente lema resultará útil.

Lema 3

Si , entonces hay un con .

Prueba

Por el Lema 1, sabemos que . Por lo tanto, un vértice promedio tiene al menos vecinos únicos (recuerde que los vecinos únicos no se satisfacen y, por lo tanto, contribuyen a ), ya que , y, por lo tanto, hay un vértice con .

Por lo tanto, si aún no hemos llegado a una palabra clave, siempre habrá algún vértice que voltear. A continuación, demostramos que la cantidad de errores nunca puede aumentar más allá de .

Lema 4

Si empezamos con , entonces nunca llegaremos a ningún punto del algoritmo.

Prueba

Cuando cambiamos un vértice , y se intercambian, y como teníamos , esto significa que el número de vértices insatisfechos a la derecha disminuye en al menos uno después de cada cambio. Como , el número inicial de vértices insatisfechos es como máximo , por la -regularidad del grafo . Si llegamos a una cadena con errores, entonces por el Lema 1, habría al menos vecinos únicos, lo que significa que habría al menos vértices insatisfechos, una contradicción.

Los lemas 3 y 4 nos muestran que si empezamos con (la mitad de la distancia de ), entonces siempre encontraremos un vértice para voltear. Cada volteo reduce el número de vértices no satisfechos en al menos 1, y por lo tanto el algoritmo termina en como máximo pasos, y termina en alguna palabra de código, por el Lema 3. (Si no fuera en una palabra de código, habría algún vértice para voltear). El Lema 4 nos muestra que nunca podemos estar más lejos que lejos de la palabra de código correcta. Dado que el código tiene distancia (ya que ), la palabra de código en la que termina debe ser la palabra de código correcta, ya que el número de volteos de bits es menor que la mitad de la distancia (por lo que no podríamos haber viajado lo suficientemente lejos para alcanzar cualquier otra palabra de código).

Complejidad

Ahora demostramos que el algoritmo puede lograr una decodificación de tiempo lineal. Sea constante y sea el grado máximo de cualquier vértice en . Nótese que también es constante para las construcciones conocidas.

  1. Preprocesamiento: lleva tiempo calcular si cada vértice tiene un número par o impar de vecinos.
  2. Preprocesamiento 2: Nos tomamos tiempo para calcular una lista de vértices en los que tienen .
  3. Cada iteración: simplemente eliminamos el primer elemento de la lista. Para actualizar la lista de vértices pares/impares en , solo necesitamos actualizar las entradas, insertando/eliminando según sea necesario. Luego, actualizamos las entradas en la lista de vértices en con más vecinos impares que pares, insertando/eliminando según sea necesario. Por lo tanto, cada iteración lleva tiempo.
  4. Como se argumentó anteriormente, el número total de iteraciones es como máximo .

Esto da un tiempo de ejecución total de tiempo, donde y son constantes.

Véase también

Notas

Este artículo se basa en las notas del curso del Dr. Venkatesan Guruswami. [4]

Referencias

  1. ^ Sipser, M.; Spielman, DA (1996). "Códigos expansores". IEEE Transactions on Information Theory . 42 (6): 1710–1722. doi :10.1109/18.556667.
  2. ^ Capalbo, M.; Reingold, O.; Vadhan, S.; Wigderson, A. (2002). "Conductores aleatorios y expansores sin pérdidas de grado constante". STOC '02 Actas del trigésimo cuarto simposio anual de la ACM sobre teoría de la computación . ACM. págs. 659–668. doi :10.1145/509907.510003. ISBN . 978-1-58113-495-7.S2CID1918841  .​
  3. ^ Spielman, D. (1996). "Códigos correctores de errores codificables y decodificables en tiempo lineal". IEEE Transactions on Information Theory . 42 (6): 1723–31. CiteSeerX 10.1.1.47.2736 . doi :10.1109/18.556668. 
  4. ^ Guruswami, V. (15 de noviembre de 2006). "Conferencia 13: Códigos expansores" (PDF) . CSE 533: Corrección de errores . Universidad de Washington.
    Guruswami, V. (marzo de 2010). "Notas 8: Códigos expansores y su decodificación" (PDF) . Introducción a la teoría de la codificación . Universidad Carnegie Mellon.
    Guruswami, V. (septiembre de 2004). "Columna invitada: códigos de corrección de errores y gráficos expansores" . ACM SIGACT News . 35 (3): 25–41. doi :10.1145/1027914.1027924. S2CID  17550280.