Lección 3 de 11
Códigos lineales: un código que es un subespacio
Qué es un código lineal, por qué basta mirar el peso mínimo para conocer la distancia y cómo se ve todo en el código de Hamming [7,4,3].
Borrador: pendiente de que lo revise el autor. Esta página no aparece en Google.
Al terminar sabrás:
- Reconocer si un código es lineal
- Calcular la dimensión k y el número de palabras q^k
- Hallar la distancia mínima como peso mínimo no nulo
- Leer los parámetros [n,k,d] de un código
Si sabes multiplicar matrices, resolver un sistema de ecuaciones lineales y operar con polinomios (sumar, multiplicar, dividir), puedes seguirlo. Lo demás (aritmética módulo 2, subespacios, cuerpos finitos) se explica sobre la marcha.
En la lección anterior construimos los alfabetos buenos: los cuerpos finitos, donde se puede sumar, restar, multiplicar y dividir. Ahora los usamos. Un código de bloque, tal como lo vimos en la primera lección, es una lista de palabras. Si la lista tiene millones de palabras, ¿cómo la guardas? ¿Cómo calculas su distancia mínima sin comparar todas las parejas? Los códigos lineales contestan a las dos preguntas a la vez: toda la lista cabe en unas pocas filas de números.
La idea
Imagina un código con palabras, algo más de un millón. Para hallar su distancia mínima habría que comparar cada palabra con todas las demás: del orden de medio billón de parejas. Y para codificar haría falta una tabla enorme que dijera qué palabra corresponde a cada mensaje.
Los códigos lineales evitan todo eso con una condición muy sencilla: si sumas dos palabras del código, el resultado sigue siendo una palabra del código. Lo mismo si multiplicas una palabra por un escalar. Los matemáticos dicen que el código es un subespacio vectorial.
Esa estructura tiene dos premios. Primero, el código se describe con unas pocas palabras «ladrillo» (una base) y todas las demás salen de combinarlas. Segundo, desde cualquier palabra el código se ve igual: si le restas a todas las palabras una palabra del código, obtienes el mismo conjunto. Por eso la distancia mínima se calcula mirando solo desde la palabra cero.
Repaso Repaso: subespacio, base y dimensión
Recuerda que es el conjunto de todas las filas de símbolos del cuerpo . Se suma posición a posición (en , con ) y se multiplica por un escalar del cuerpo.
Un subespacio es un subconjunto que contiene al vector cero y es cerrado: la suma de dos vectores suyos y cualquier múltiplo escalar de uno suyo siguen dentro.
Una base es una lista de vectores del subespacio tal que ninguno es combinación de los otros (son linealmente independientes) y que entre todos generan el subespacio: cada vector del subespacio es, de una única manera, una combinación . El número de vectores de una base es la dimensión, y no depende de la base que elijas.
Consecuencia que usaremos: si hay vectores en la base y cada coeficiente puede tomar valores, el subespacio tiene exactamente vectores.
Definición
Sea un cuerpo finito. Un código lineal de longitud sobre es un subespacio vectorial de . Dicho con palabras de andar por casa:
- la palabra cero está en ;
- si , entonces ;
- si y , entonces .
En el caso binario, , multiplicar por un escalar solo puede dar o , así que basta comprobar que la suma de dos palabras del código es del código.
La dimensión del código es la dimensión de ese subespacio. Como una base tiene vectores y cada coeficiente toma valores,
El peso de una palabra es el número de posiciones distintas de cero. Se tiene : los símbolos en que dos palabras difieren son exactamente los símbolos no nulos de su diferencia.
Un código lineal de longitud , dimensión y distancia mínima se llama código (o si el cuerpo se sobreentiende). Observa los corchetes: la notación de la primera lección hablaba de un código cualquiera con palabras; en un lineal, . La tasa es : la fracción de cada palabra que lleva información.
La distancia mínima es el peso mínimo no nulo
En un código cualquiera, la distancia mínima exige comparar todas las parejas. En un código lineal basta esto:
La razón cabe en una línea: si e son palabras distintas del código, es una palabra del código no nula y ; recíprocamente, cada palabra no nula cumple , con también del código. Así que el conjunto de distancias entre parejas y el conjunto de pesos de palabras no nulas son el mismo.
Pasamos de comparar del orden de parejas a mirar pesos. Y en la lección siguiente veremos que ni siquiera hace falta listar las palabras.
Ejemplo resuelto
Tomamos el código de Hamming binario, nuestro ejemplo hilo. Sus palabras son todas las combinaciones de las cuatro filas de
(En la próxima lección veremos por qué esta matriz «fabrica» el código; de momento, solo nos interesan las filas.)
Paso 1: dimensión y número de palabras. Hay filas independientes (las cuatro primeras columnas forman la matriz identidad: cada fila es la única con un 1 en su columna, así que ninguna es combinación de las otras). Entonces palabras, de longitud .
Paso 2: cerrado por la suma. Sumamos las dos primeras filas, módulo 2:
Es otra palabra del código, porque es la suma de las filas 1 y 2 de . De hecho, la suma de dos palabras cualesquiera sigue siendo combinación de las filas, es decir, palabra del código. En cambio, no está en el código. Como las cuatro primeras columnas de son la identidad, los cuatro primeros símbolos de una combinación son sus coeficientes. Una combinación que empiece por solo puede ser la fila 1, que es .
Paso 3: lista de pesos. Las 16 palabras son las combinaciones , con uno de los 16 mensajes de 4 bits. Puedes verlas todas aquí:
Repaso Las 16 palabras del código de Hamming
Cada palabra es la suma de las filas de que indica el mensaje (por ejemplo, suma las filas 1, 3 y 4).
| mensaje | palabra | peso | mensaje | palabra | peso |
|---|---|---|---|---|---|
| 0000 | 0000000 | 0 | 1000 | 1000110 | 3 |
| 0001 | 0001111 | 4 | 1001 | 1001001 | 3 |
| 0010 | 0010011 | 3 | 1010 | 1010101 | 4 |
| 0011 | 0011100 | 3 | 1011 | 1011010 | 4 |
| 0100 | 0100101 | 3 | 1100 | 1100011 | 4 |
| 0101 | 0101010 | 3 | 1101 | 1101100 | 4 |
| 0110 | 0110110 | 4 | 1110 | 1110000 | 3 |
| 0111 | 0111001 | 4 | 1111 | 1111111 | 7 |
Contando los pesos:
| peso | 0 | 3 | 4 | 7 |
|---|---|---|---|---|
| número de palabras | 1 | 7 | 7 | 1 |
(1 + 7 + 7 + 1 = 16, como debe ser.) Por ejemplo, la suma del paso 2, , tiene peso 4.
Paso 4: distancia mínima. El peso mínimo no nulo es 3, así que sin comparar las parejas. Los parámetros son , y como , el código corrige un error. Su tasa es : de cada 7 símbolos, 4 son información y 3 son la redundancia que permite corregir.
Ejercicios
Ejercicio 1
Decide si son lineales (sobre ):
a)
b)
Ver la solución
a) Contiene la palabra cero. Sumamos las parejas de palabras no nulas: , y , todas en . Luego es lineal. Tiene palabras, así que . Sus pesos no nulos son 2, 2 y 2, luego : es un código (el código de paridad de la primera lección).
b) Contiene el cero, pero no está en . No es cerrado por la suma, así que no es lineal. (Que sea potencia de 2 no basta para ser lineal.)
Ejercicio 2
Sea el código binario de longitud 5 generado por las palabras y . Escribe todas sus palabras, y halla , , y la tasa.
Ver la solución
Las combinaciones posibles de las dos palabras (cada coeficiente es 0 o 1) son:
Hay palabras: y . Los pesos no nulos son , y , así que . Es un código , con tasa , y corrige un error.
Ejercicio 3
Sobre (suma módulo 3) considera el código generado por y .
a) ¿Cuántas palabras tiene?
b) Escribe las 9 palabras.
c) Calcula .
Ver la solución
a) Hay vectores independientes y , así que .
b) Las palabras son con , haciendo las cuentas módulo 3:
| palabra | |
|---|---|
Por ejemplo, : . Y : .
c) Las ocho palabras no nulas tienen peso 3. Luego y es un código . (Se conoce como el tetracódigo, y lo volveremos a ver.)
En resumen
- Un código lineal es un subespacio de : contiene al cero y es cerrado por suma y por múltiplos escalares.
- Si tiene dimensión , tiene palabras, y se describe con ; la tasa es .
- En un código lineal, la distancia mínima es el peso mínimo de una palabra no nula.
- El código de Hamming tiene 16 palabras con pesos (una), (siete), (siete) y (una).
Siguiente lección: Matriz generatriz y matriz de paridad
Para profundizar
- V. Guruswami, A. Rudra y M. Sudan, Essential Coding Theory (2023).
- W. C. Huffman y V. Pless, Fundamentals of Error-Correcting Codes (2003).