stringtranslate.com

código expansor

En la teoría de la codificación , los códigos expansores forman una clase de códigos de corrección de errores que se construyen a partir de gráficos expansores bipartitos . Junto con los códigos 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 sólo dos elementos, por lo que los códigos expansores pertenecen a la clase de códigos binarios . Además, los códigos de expansión 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 verificación de paridad es la matriz de adyacencia de un gráfico expansor bipartito . Estos códigos tienen 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 gráfico biregular entre un conjunto de nodos , llamados variables , y un conjunto de nodos , llamados restricciones .

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

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

Se ha demostrado que existen gráficos de expansión sin pérdidas no triviales. Además, podemos construirlos explícitamente. [2]

Tasa

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

Distancia

Suponer . Entonces la distancia de un código de expansión es de al menos .

Prueba

Tenga en cuenta que podemos considerar cada palabra de código en como un subconjunto de vértices , diciendo que el vértice si y solo si el índice de la palabra de código es 1. Entonces es una palabra de código si cada vértice es adyacente a un número par de vértices en . (Para ser una palabra en clave , donde está la matriz de verificación de paridad. Luego, cada vértice en corresponde a cada columna de . La multiplicación de la matriz da el resultado deseado). Entonces, si un vértice es adyacente a un solo vértice en , Sabemos inmediatamente que no es una palabra clave. Denotemos a los vecinos en de y denotemos aquellos vecinos de los cuales son únicos, es decir, adyacentes a un único vértice de .

Lema 1

Para cada tamaño , .

Prueba

Trivialmente, ya que implica . sigue ya que el grado de cada vértice es . Por la propiedad de expansión del gráfico, debe haber un conjunto de aristas que vayan a vértices distintos. Los bordes restantes hacen que, como máximo, los vecinos no sean únicos, por lo que .

Corolario

Todo lo suficientemente pequeño tiene un vecino único. Esto sigue desde .

Lema 2

Cada subconjunto tiene un vecino único.

Prueba

El lema 1 prueba el caso , así que supongamos . Deja tal que . Por el Lema 1, sabemos que . Entonces hay un vértice en iff y lo sabemos, por lo que, según la primera parte del Lema 1, lo sabemos . Dado que , y por tanto no está vacío.

Corolario

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

Codificación

El tiempo de codificación de un código expansor está limitado superiormente 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 con el tiempo. [3]

Descodificación

La decodificación de códigos de expansión es posible a tiempo cuando se utiliza el siguiente algoritmo.

Sea el vértice de que corresponde al índice enésimo en las palabras clave de . Sea una palabra recibida, y . Dejar ser y ser . Entonces considere el algoritmo codicioso:


Entrada: palabra recibida .

inicializar y' a ymientras que hay av 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

Primero mostramos 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 de 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 be . El siguiente lema resultará útil.

Lema 3

Si , entonces hay un con .

Prueba

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

Entonces, si aún no hemos llegado a una palabra clave, siempre habrá algún vértice que voltear. A continuación, mostramos que el número de errores nunca puede aumentar más allá de .

Lema 4

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

Prueba

Cuando volteamos un vértice y se intercambian, y como teníamos , esto significa que el número de vértices insatisfechos a la derecha disminuye al menos en uno después de cada volteo. Dado que , el número inicial de vértices insatisfechos es como máximo , por la regularidad del gráfico . Si llegamos a una cadena con errores, entonces, según 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 comenzamos con (la mitad de la distancia de ), siempre encontraremos un vértice para voltear. Cada giro reduce el número de vértices insatisfechos en al menos 1 y, por lo tanto, el algoritmo termina en la mayoría de los pasos y termina en alguna palabra en código, según el Lema 3. (Si no fuera en una palabra en código, habría algún vértice para voltear ). El lema 4 nos muestra que nunca podemos estar más lejos que la palabra clave correcta. Dado que el código tiene distancia (desde ), la palabra clave en la que termina debe ser la palabra clave correcta, ya que el número de cambios de bits es menor que la mitad de la distancia (por lo que no podríamos haber viajado lo suficiente como para alcanzar ninguna otra palabra clave).

Complejidad

Ahora mostramos que el algoritmo puede lograr una decodificación en tiempo lineal. Sea constante y sea el grado máximo de cualquier vértice en . Tenga en cuenta que también es constante para 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 el tiempo para calcular una lista de vértices en los que tenemos .
  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 con más vecinos pares que impares, insertando/eliminando según sea necesario. Por 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 , donde y son constantes.

Ver también

Notas

Este artículo está basado en las notas del curso del Dr. Venkatesan Guruswami. [4]

Referencias

  1. ^ Sipser, M.; Spielman, DA (1996). "Códigos de expansión". Transacciones IEEE sobre teoría de la información . 42 (6): 1710-1722. doi : 10.1109/18.556667.
  2. ^ Capalbo, M.; Reingold, O.; Vadhan, S.; Wigderson, A. (2002). "Conductores de aleatoriedad y expansores sin pérdidas de grado constante". STOC '02 Actas del trigésimo cuarto simposio anual de ACM sobre teoría de la informática . ACM. págs. 659–668. doi :10.1145/509907.510003. ISBN 978-1-58113-495-7. S2CID  1918841.
  3. ^ Spielman, D. (1996). "Códigos de corrección de errores codificables y decodificables en tiempo lineal". Transacciones IEEE sobre teoría de la información . 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 de Carnegie mellon.
    Guruswami, V. (septiembre de 2004). "Columna de invitados: códigos de corrección de errores y gráficos de expansión" . Noticias ACM SIGACT . 35 (3): 25–41. doi :10.1145/1027914.1027924. S2CID  17550280.