Está en la página 1de 12

Aplicaciones de la teorı́a de grupos, anillos y cuerpos:

Teorı́a de la Codificación
Como un ejemplo de aplicación de la teorı́a de las estructuras algebraicas vamos a ver en
esta sección un aspecto de la teorı́a de la codificación: los códigos lineales.

Introducción
Cuando se trasmite un mensaje lo primero que se hace es codificarlo, es decir, convertirlo
en una secuencia de ceros y unos, agrupados en palabras de una misma longitud. El que lo
recibe tiene que descodificarlo y, para ello, conviene que tenga mecanismos para detectar
y, si es posible, corregir los posibles errores que haya podido haber en la trasmisión.
Denotamos por V n al conjunto de las 2n palabras de longitud n. Por ejemplo, V 2 =
{00, 01, 10, 11} y V 3 = {000, 001, 010, 011, 100, 101, 110, 111}.

Definición 1. Llamaremos código binario de longitud n a cualquier subconjunto de V n .

El siguiente ejemplo ilustra muy bien lo que vamos a ver en este capı́tulo.

Ejemplo 2. Supongamos que queremos mandar un mensaje que tiene cuatro posibilidades:
arriba, abajo, izquierda y derecha. Podemos emplear alguno de estos tres códigos para
codificarlo:
arriba abajo izquierda derecha
C1 00 01 10 11
C2 000 110 101 011
C3 000000 111000 001110 110011

El código C1 , que es de longitud 2, es muy económico, porque emplea el mı́nimo número


de dı́gitos necesario, pero tiene el inconveniente de que no tiene ninguna capacidad de
detección (y mucho menos de corrección) de errores. Si se recibe la palabra 10 no se puede
saber si la trasmisión ha sido correcta, o la palabra trasmitida era 00 y se ha producido
un error en el primer dı́gito, o era la palabra 11 con un error en el segundo.
El segundo código, C2 , de longitud 3, es menos económico pero es mejor en el sentido de
que si se produce un error en un dı́gito, el receptor lo sabe porque recibe una palabra que
no es del código, pero no puede corregirlo. Por ejemplo, si se recibe 001, se sabe que hay
un error porque esta palabra no está en el código, pero no se puede saber si es 000 con un
error en el tercer dı́gito, 011 con un error en el segundo o 101 con un error en el primero,
y por tanto no se puede corregir.
El último de los códigos, C3 , de longitud 6, es el menos económico, porque para cuatro
mensajes emplea seis dı́gitos, pero tiene la propiedad de que, además de detectar errores
en un dı́gito, los corrige. Por ejemplo, un error en el cuarto dı́gito de 001110 da 001010.
El que recibe el mensaje sabe que hay un error y puede corregirlo porque la palabra más
cercana es 001110.

Se trata entonces de buscar códigos que, sin emplear un número grande de dı́gitos, tengan
buenas propiedades de detección y corrección de errores.

1
Distancia en un código binario
Denotamos por a, b, c, . . . a las palabras del conjunto V n .
Definición 3. La distancia de Hamming d(a, b) entre las palabras a, b ∈ V n es el número
de bits en que difieren.
Ejemplo 4. d(100, 110) = 1, d(0010101, 1110111) = 3.
Esta distancia, como cualquier otra distancia definida en términos matemáticos, cumple
estas tres propiedades:

(i) d(a, b) ≥ 0; d(a, b) = 0 ⇔ a = b


(ii) d(a, b) = d(b, a)
(iii) d(a, b) + d(b, c) ≥ d(a, c)

Definición 5. La distancia mı́nima de un código binario C ⊆ V n es la menor de las


distancias entre las palabras del código:
δ = min{d(a, b) | a, b ∈ C, a 6= b}
Ejemplo 6. Las distancias mı́nimas de los códigos C1 , C2 y C3 del ejemplo 2 son, res-
pectivamente, 1, 2 y 3.
Este parámetro δ de un código binario sirve para determinar la capacidad de detección y
corrección de errores.

• En cuanto a la detección: si δ es la distancia mı́nima, el código puede detectar al


menos δ − 1 errores, porque puede haber δ − 1 dı́gitos que cambien en una palabra
sin que haya confusión con otra palabra del código. En cambio, una palabra con δ
errores se puede convertir en otra palabra del código, en cuyo caso no se detectarı́an
los errores.
• Por lo que se refiere a la corrección, señalemos primero que esta se hará según el
principio del vecino más próximo: supondremos que la palabra trasmitida es la más
cercana a la que se ha recibido.
Si δ = 1, 2, 3, 4, 5, 6, 7 . . ., se pueden corregir 0, 0, 1, 1, 2, 2, 3 . . . errores. En general,
el número máximo de errores que corrige un código de distancia mı́nima δ es b δ−1 2
c.

Ejemplo 7. Con respecto a los códigos C1 , C2 y C3 del ejemplo 2:


C1 δ = 1 no corrige ni detecta ningún error
C2 δ = 2 detecta un error, pero no lo corrige
C3 δ = 3 detecta dos errores y corrige uno

Ejercicio 8. Halla la distancia mı́nima del código C = {00000, 00100, 11000, 10011} de
V 5 . Determina su capacidad de detección y corrección de errores.
Ejercicio 9. Halla la distancia mı́nima del código C ⊂ V 6 formado por las palabras
000000, 111111 y las que tienen tres ceros y tres unos. Determina su capacidad de detec-
ción y corrección de errores. ¿Cuántas palabras tiene este código?

2
Estructura algebraica de V n
En el conjunto V n formado por las palabras de ceros y unos de longitud n, podemos
definir una operación +. La suma de dos palabras a + b es la palabra cuyos bits se
obtienen sumando los correspondientes bits de a y b módulo 2.

Ejemplo 10. 1001001 + 0111011 = 1110010

La operación + da a V n estructura de grupo:

(g1) Es una clausura: a, b ∈ V n ⇒ a + b ∈ V n .

(g2) Es asociativa: a + (b + c = (a + b) + c).

(g3) El elemento neutro es la palabra formada por ceros: 0 = 0 . . . 0 ∈ V n .

(g4) La palabra simétrica de a es ella misma, porque a + a = 0.

Además tiene la propiedad conmutativa: a + b = b + a.


Ası́ pues, (V n , +) es un grupo conmutativo de orden 2n . Como todos los elementos, salvo
la palabra 0 que tiene orden 1, tienen orden 2, este grupo es isomorfo a C2n .

Códigos lineales
Definición 11. Decimos que un código C ⊆ V n es lineal si la suma de dos palabras del
código es otra palabra del código.

Es decir, la operación suma es una clausura en C. Además, la asociatividad y la conmu-


tatividad también se verifican, ası́ como la existencia de elementos simétricos; finalmente,
en cualquier código lineal está la palabra 0.
Por tanto, C, + es un grupo conmutativo (se dice que es un subgrupo de V n ). Como sus
palabras, salvo 0, tienen orden 2, su orden es 2k , k = 0, 1, . . . , n. Es decir, el número de
palabras de un código lineal es una potencia de 2.

Definición 12. El entero k, el exponente de 2 en el número de palabras de un código


lineal, se denomina dimensión del código.

Ejemplo 13. De los códigos del ejemplo 2 podemos afirmar lo siguiente:

• C1 es lineal (de hecho, C1 = V 2 ) y n = k = 2.

• C2 también es lineal y k = 2.

• El código C3 no es lineal porque, por ejemplo, 111000 + 001110 = 110110 ∈


/ C3 .

Ası́ pues, un código lineal tiene tres parámetros importantes:

n longitud las palabras de C tienen n bits


k dimensión C tiene 2k palabras
δ distancia mı́nima C detecta δ − 1 errores y corrige b δ−1
2
c

3
De ellos depende la utilidad de un código. Interesa, por una parte, que k no sea mucho
menor que n para que el número de bits que se tiene que emplear no sea muy grande. Por
otra parte, cuanto mayor sea δ, mejor, porque la capacidad de detección y corrección de
errores es mayor. Pero, lógicamente, cuando k aumenta, δ disminuye, y viceversa.
Ejemplo 14. Vamos a estudiar el código C ⊂ V 4 formado por las palabras que tienen
un número par de unos. Hay una palabra con cuatro unos y una con ninguno. Con dos
4
unos hay 2 = 6, que son las formas de escoger los sitios que ocupan los dos unos, sin
considerar el orden y sin repeticiones.
El código es, pues, el conjunto C = {0000, 0011, 0101, 0110, 1001, 1010, 1100, 1111}. Sus
parámetros son n = 4, k = 3, porque tiene 23 elementos, y δ = 2, con lo que detecta un
error y no corrige ninguno.
Se puede comprobar que es un código lineal porque la suma de dos palabras cualesquiera
es otra palabra del código.
Ejercicio 15. Halla las palabras del menor código lineal C que contiene las palabras
00011, 11000 y 01100. Determina sus parámetros n, k y δ.
Ejercicio 16. (generalización del ejemplo 14) Demuestra que las palabras de V n que
tienen un número par de unos forman un código lineal. Halla el parámetro k de este
código, en función de n. ¿Cuál es su capacidad de detección y corrección de errores?

La distancia mı́nima en los códigos lineales


Vamos a ver en esta sección una forma sencilla de calcular la distancia mı́nima en un
código lineal.
Definición 17. Llamamos peso de una palabra a de un código C al número de unos que
tiene. Lo denotaremos por ω(a).
El peso de una palabra a se puede ver también como la distancia de a a 0: ω(a) = d(a, 0).
La distancia entre dos palabras a y b de un código lineal no cambia si les sumamos una
misma palabra. Por tanto, tenemos:

d(a, b) = d(a − b, b − b) = d(a − b, 0) = ω(a − b)


La distancia mı́nima será, entonces, el peso mı́nimo de las palabras no nulas del código.

Construcción de códigos lineales


Sea x = x1 x2 . . . xn una palabra de V n que, como vector columna, denotaremos por xt , y
H una matriz binaria de n columnas.
El conjunto C = {x ∈ V n | Hxt = 0t } es un código lineal, porque la suma de dos palabras
de C es otra palabra de C:

a, b ∈ C ⇒ H(a + b)t = Hat + Hbt = 0t ⇒ a + b ∈ C


Por tanto, para construir un código lineal de longitud n basta tomar una matriz binaria
de n columnas y hallar las soluciones de la ecuación matricial Hxt = 0t .

4
 
1 1 0
Ejemplo 18. Si H = , la ecuación matricial es
0 1 1
 
  x1  
1 1 0   0
x2 =
0 1 1 0
x3

que equivale al sistema de ecuaciones



x1 + x2 = 0
x2 + x3 = 0
cuyas soluciones en Z2 son x1 = x2 = x3 = 0 y x1 = x2 = x3 = 1, con lo que el código es
{000, 111}.

Definición 19. La matriz H es la matriz de comprobación de la paridad del código, o,


simplemente, la matriz de paridad.

Para que la resolución de la ecuación Hxt = 0t , o del sistema de ecuaciones lineales


equivalente, el caso más sencillo es cuando la matriz está en la forma estándar :

1 0 · · · 0 h11 h12 · · · h1,n−r


 
 0 1 · · · 0 h21 h22 · · · h2,n−r 
 .. .. 
 . . 
0 0 · · · 1 hr1 hr2 ··· hr,n−r

Es decir, las primeras r columnas forman la matriz identidad I. En este caso, podemos
tomar las variables dependientes x1 , . . ., xr , que se pueden expresar directamente en
función de las independientes xr+1 , xr+2 , . . ., xn :

 x1 = h11 xr+1 + h12 xr+2 + . . . + h1,n−r xn

x2 = h21 xr+1 + h22 xr+2 + . . . + h2,n−r xn


 ...
xr = hr1 xr+1 + hr2 xr+2 + . . . + hr,n−r xn

El número de soluciones es 2k , y podemos ver que k es el número de variables independi-


entes, que viene dado por el número de columnas menos el número de filas.
 
1 0 0 0 1 1
Ejemplo 20. Con la matriz H =  0 1 0 1 1 1 , la solución viene dada por
0 0 1 1 0 1

 x1 = x5 + x6
x2 = x4 + x5 + x6
x3 = x4 + x6

Dando valores a las variables independientes resulta el código

C = {000000, 111001, 110010, 001011, 011100, 100101, 101110, 010111}

Su dimensión es 3, que es el número de columnas de la matriz menos el número de filas.

5
Si las primeras columnas no forman la matriz identidad, pero hay columnas en la matriz
que, después de una reordenación la formarı́an, la resolución serı́a análoga. Deberı́amos
considerar como variables dependientes las que corresponden a estas columnas que for-
marı́an I, y despejar cada una de ellas de la ecuación en que esté.
 
1 0 1 0 1
Ejemplo 21. En la matriz H =  1 1 1 0 0  vemos que las columnas segunda,
1 0 0 1 0
cuarta y quinta, reordenadas, formarı́an I. Podemos tomar entonces x2 , x4 y x5 como
variables dependientes, y, despejándolas de las ecuaciones segunda, tercera y primera,
respectivamente, el sistema se podrı́a expresar ası́:

 x2 = x1 + x3
x4 = x1
x5 = x1 + x3

Si no hay columnas que pudieran formar la matriz identidad, podrı́amos hacer trasforma-
ciones en la matriz hasta conseguir que las haya.
     
1 1 0 1 1 1 0
Ejemplo 22. En H = 1 0 1 0 1 nos faltan las columnas 0 y 1 . Para
    
0 1 1 0 1 0 0
conseguirlas podemos seguir, por ejemplo, estos pasos:
     
1 1 0 1 1 1 1 0 1 1 0 0 0 1 1
1 0 1 0 1 → 1 0 1 0 1 → 1 0 1 0 1
0 1 1 0 1 1 1 0 0 0 0 1 1 0 1

En el primero hemos sumado a la tercera fila la segunda, y en el segundo hemos sumado


a la primera la tercera.
Las variables dependientes son x2 , x3 y x4 , y el sistema,

 x2 = x1
x3 = x1 + x5
x4 = x5

Corrección de errores en códigos lineales


Se puede comprobar que si la matriz de paridad de un código lineal no tiene una columna
formada toda ella por ceros, no hay palabras de peso 1. Y si no hay columnas iguales, no
hay palabras de peso dos.
Es decir, si se cumplen estas dos condiciones, el peso de las palabras del código es, como
mı́nimo 3: δ ≥ 3 y por tanto el código corrige al menos un error.
Vamos a ver cómo se corrige un error en un código lineal que tiene δ ≥ 3.
Podemos poner que una palabra a con un error en el dı́gito i es a0 = a + ei , donde ei es la
palabra formada toda por ceros salvo un uno en el lugar i. Cuando aplicamos H a esta
palabra resulta
t
Ha0 = H(at + ei t ) = Hat + Hei t = 0t + C i

6
donde C i representa la columna i de la matriz. Ası́ pues, si al aplicar H a una palabra
que tiene un error el resultado es la columna i de la matriz, podemos decir que el error
se ha producido en el dı́gito i, y podemos corregirlo simplemente lo cambiamos.

Ejemplo 23. En el código del ejemplo 20 vamos a suponer que se recibe la palabra 000011,
que es una palabra del código que tiene un error. Multiplicando por H resulta
 
0
 0  
1 0 0 0 1 1  0
 0
0 1 0 1 1 1  = 0
0
0 0 1 1 0 1  1
 1
1
que es la tercera columna de la matriz, lo que indica que el error está en el tercer bit. Lo
cambiamos y queda la palabra 001011.

Códigos de Hamming
Definición 24. Un código de Hamming es un código lineal cuya matriz de paridad no
tiene columnas de ceros ni columnas iguales y además, teniendo en cuenta estas limita-
ciones, consta del máximo número de columnas posible.

En los siguientes ejemplos vamos a ver los casos mas sencillos: n = 2 y n = 3.

Ejemplo 25. Si la matriz  tiene dos


 filas, podemos poner tres columnas como máximo,
0 1 1
que ordenamos ası́: H = . Las columnas las hemos puesto en el orden 01, 10
1 0 1
y 11, que son la representación binaria de 1, 2 y 3, por una razón que veremos al final de
este apartado.
El código es el del ejemplo 18: {000, 111}. Sus parámetros son n = 3, k = 1 y δ = 3.

Ejemplo 26. Con tres filas tenemos siete columnas no nulas, diferentes. Si las ordenamos
siguiendo el criterio del ejemplo anterior resulta la matriz
 
0 0 0 1 1 1 1
H = 0 1 1 0 0 1 1
1 0 1 0 1 0 1

Para hallar las palabras del código tomamos como variables dependientes x1 , x2 y x4 ,
porque sus columnas correspondientes están formadas por dos ceros y un uno, lo que
facilita la resolución del sistema.

 x4 = x5 + x6 + x7
x2 = x3 + x6 + x7
x1 = x3 + x5 + x7

Para hallar las palabras del código damos valores a las variables independientes y hallamos
los valores que toman las variables dependientes.

7
x3 x5 x6 x7 x1 x2 x4 x
0 0 0 0 0 0 0 0000000
0 0 0 1 1 1 1 1101001
0 0 1 0 0 1 1 0101010
0 0 1 1 1 0 0 1000011
0 1 0 0 1 0 1 1001100
0 1 0 1 0 1 0 0100101
0 1 1 0 1 1 0 1100110
0 1 1 1 0 0 1 0001111
1 0 0 0 1 1 0 1110000
1 0 0 1 0 0 1 0011001
1 0 1 0 1 0 1 1011010
1 0 1 1 0 1 0 0110011
1 1 0 0 0 1 1 0111100
1 1 0 1 1 0 0 1010101
1 1 1 0 0 0 0 0010110
1 1 1 1 1 1 1 1111111

Los parámetros de este código son n = 7, k = 4 y δ = 3

La razón de colocar las columnas de la matriz en este orden es que esto facilita la mecánica
de corrección de errores. Hemos dicho que si se produce un error en una palabra, al
multiplicarla por la matriz resulta la columna correspondiente al lugar donde está el
error. Pero en estos códigos de Hamming para buscar el sitio en que está una columna no
hay más que pasarla a decimal.

Ejemplo 27. En el código del ejemplo 26 la palabra 1100010 tiene un error. Para buscarlo
la multiplicamos por H:
 
1
1
    
0 0 0 1 1 1 1  0
 1
0 1 1 0 0 1 10 = 0
 
1 0 1 0 1 0 1  0
 1
1
0
El resultado es 101 que, pasado a decimal, es 5, con lo que el error está en el quinto bit.

En general, si la dimensión de la matriz de un código de Hamming es r × n (r filas y n


columnas), sus parámetros son:

• La longitud es el número de columnas n.

• La dimensión es k = n − r, que es el número de variables independientes.

• La distancia mı́nima es siempre δ = 3, porque se puede demostrar que la palabra


1110 . . . 0 está en cualquier código de Hamming.

8
Códigos cı́clicos
Vamos a representar una palabra a ∈ V n como a = a0 a1 . . . an−1 . A la palabra â =
an−1 a0 a1 . . . an−2 la llamaremos primer desplazamiento de a. El segundo desplazamiento
serı́a an−2 an−1 a0 a1 . . . an−3 , y ası́ sucesivamente.

Ejemplo 28. La palabra a = 11001 ∈ V 5 tiene cinco desplazamientos diferentes, que son
11100 = â, 01110, 00111, 10011 y 11001 = a.

Ejemplo 29. Decimos que un código lineal es cı́clico si los desplazamientos de cualquier
palabra del código son también palabras del código.

Ejemplo 30.

• {000, 110, 101, 011} es un código cı́clico.

• {000, 100, 010, 001} no es cı́clico porque no es lineal.

• {000, 110, 100, 010} es un código lineal que no es cı́clico.

• {0 . . . 0}, {0 . . . 0, 1 . . . 1} y V n son códigos cı́clicos de parámetro k = 0, 1 y n res-


pectivamente.

Los códigos cı́clicos están relacionados con la teorı́a de las estructuras algebraicas, con-
cretamente con los anillos de polinomios, como vamos a ver a continuación.
Vamos a representar la palabra a = a0 a1 . . . an−1 como el polinomio a(x) = a0 + a1 x +
. . . + an−1 xn−1 . Ası́, el conjunto V n será como el conjunto de polinomios de grado menor
que n, que representaremos por V n [x].
El primer desplazamiento de a(x) es â(x) = an−1 + a0 x + a1 x2 + . . . + an−2 xn . Sumamos
y restamos an−1 xn para obtener lo siguiente:

â)x = = an−1 + a0 x + a1 x2 + . . . + an−2 xn−1


= x(a0 + a1 x + . . . + an−1 xn ) − an−1 (xn − 1)
= xa(x) − an−1 (xn − 1)

Esto lo podemos interpretar diciendo que hacer un desplazamiento en la â(x) es como


multiplicar el polinomio a(x) por x módulo xn − 1.
Consideramos ahora el conjunto Z2 [x]/(xn − 1), es decir, V n [x], con la suma habitual de
polinomios y el producto módulo xn − 1. Como este polinomio no es irreducible, porque
tiene una raı́z x = 1, no es un cuerpo, sino un anillo.
Definimos ahora un concepto importante de la teorı́a de anillos, estrechamente relacionado
con los códigos cı́clicos.

Definición 31. Decimos que un subconjunto I de un anillo A es un ideal si cumple estas


dos condiciones:

• i1 , i2 ∈ I ⇒ i1 + i2 ∈ I

• r ∈ A, i ∈ I ⇒ ri ∈ I

9
Si lo interpretamos en términos de códigos, tomamos A = V n [x] y C ⊆ V n [x], vemos que
la primera condición equivale a decir que C es lineal: la suma de dos palabras del código
es otra palabra del código. Y la segunda condición, si tomamos r = x y i = a(x) ∈ C,
nos dice que xa(x) está también en C. O, en otras palabras, que C es cı́clico.
Ası́ pues, los códigos cı́clicos son los ideales del anillo V n [x]. De la teorı́a de anillos vamos a
extraer una serie de resultados, sin demostración, que nos permitirán construir los códigos
cı́clicos. Estos son los pasos que vamos a seguir:

• Los ideales de V n [x], o los códigos cı́clicos, están siempre generados por un poli-
nomio.

• De los generadores que puede tener un código cı́clico, hay uno, único, de grado
mı́nimo, denominado generador canónico.

• Los generadores canónicos son los divisores de xn − 1.

En primer lugar, diremos que los ideales de V n [x] tienen siempre un generador. En
nuestro caso, esto quiere decir que todo código cı́clico C es de la forma C =< g(x) >, con
g(x) ∈ V n [x]. El ideal generado por g(x) es el conjunto de sus múltiplos:

< g(x) >= {g(x)a(x) | a(x) ∈ V n [x]}

Ejemplo 32. En V 3 [x] vamos a hallar el ideal generado por el polinomio g(x) = x +
x2 . Para ello hacemos una tabla con los productos de g(x) multiplicado por todos los
polinomios de V 3 [x].

a(x) a(x)(x + x2 )
0 0 000
1 x + x2 011
x 1 + x2 101
1+x 1+x 110
x2 1+x 110
1 + x2 1 + x2 101
x + x2 x + x2 011
1 + x + x2 0 000

El código es {000, 011, 101, 110}; sus parámetros son n = 3, k = 2 y δ = 2.


Ejercicio 33. En el ejemplo anterior, demuestra que los polinomios 1+x2 y 1+x generan
el mismo código.
Ejercicio 34. Halla el código de longitud 3 generado por 1 + x + x2 .
Además, de los varios generadores que pueda tener un código cı́clico existe uno único de
grado mı́nimo, que llamaremos generador canónico de C.
Ejemplo 35. En el ejemplo 32 el generador de menor grado, el generador canónico, es
1 + x, que es el único generador de grado 1. En cambio, hay dos generadores de grado 2,
que son x + x2 y 1 + x2 .
Finalmente, diremos que los generadores canónicos de los ideales de V n [x] son los divisores
de xn − 1.

10
Ejemplo 36. Los divisores de x4 − 1 = (x + 1)4 son 1, x + 1, (x + 1)2 , (x + 1)3 y (x + 1)4 .
Lo que quiere decir que hay cinco códigos cı́clicos de longitud 4.
Ejercicio 37. Los cinco códigos cı́clicos de longitud 4 son

{0000}
{0000, 1111}
{0000, 0101, 1010, 1111}
{0000, 0011, 0110, 1100, 1001, 0101, 1010, 1111}
V4

Determina cuál es el generador de cada uno de ellos.

Construcción de códigos cı́clicos


Para construir un código cı́clico partimos de un polinomio g(x) ∈ V n [x] divisor de xn − 1,
que será el generador canónico.
n −1
Hallamos el polinomio h(x) = xg(x) . Este polinomio es h(x) = h0 + h1 (x) + . . . + hk xk .
Con sus coeficientes formamos la matriz de paridad del código cı́clico generado por g(x).

hk . . . h1 h0 0 ... 0
 
 0 hk . . . h1 h0 0 . . . 0 
H=
 .. .. .. 
 . . . 

 0 ... 0 h ... h h 0 
k 1 0
0 ... 0 hk ... h1 h0
Como h(x) tiene grado k, hay k + 1 coeficientes y por tanto hay que añadir n − k − 1
ceros en la primera fila, para que haya n columnas en la matriz. Después en cada fila hay
que ir desplazando el bloque de dı́gitos de h(x) hasta que llege al final. En total habrá
n − k filas y la dimensión del código será k.
Ejemplo 38. La descomposición de x7 − 1 es (1 + x)(1 + x + x3 )(1 + x2 + x3 ), por lo
tanto x7 − 1 tiene 8 divisores, que son

1
1+x
1 + x + x3
1 + x2 + x3
(1 + x)(1 + x + x3 ) = 1 + x2 + x3 + x4
(1 + x)(1 + x2 + x3 ) = 1 + x + x2 + x4
(1 + x + x3 )(1 + x2 + x3 ) = 1 + x + x2 + x3 + x4 + x5 + x6
(1 + x)(1 + x + x3 )(1 + x2 + x3 ) = xn − 1

Cada uno de ellos es el generador canónico de un código cı́clico, con lo que podemos decir
que hay ocho códigos cı́clicos de longitud 7.

11
Por ejemplo, si tomamos el divisor g(x) = (1 + x)(1 + x + x3 ), el polinomio h(x) es
(1 + x2 + x3 ). Tomamos sus coeficientes en orden inverso para colocarlos en la matriz:
1101. Entonces la matriz de paridad del código C generado por g(x) es
 
1 1 0 1 0 0 0
0 1 1 0 1 0 0
H= 0 0 1 1 0 1 0

0 0 0 1 1 0 1

Resolvemos el sistema de ecuaciones




 x1 + x2 + x4 =0
x2 + x3 + x5 =0


 x3 + x4 + x6 =0
x4 + x5 + x7 =0

y resulta el código

C = {0000000, 1001011, 0010111, 1011100, 1100101, 0101110, 1110010, 0111001}

Sus parámetros son n = 7, k = 3 y δ = 4.

Ejercicio 39. Determina las palabras del código de longitud 7 generado por el polinomio
1 + x + x3 .

Ejercicio 40. Factoriza el polinomio x6 − 1 ∈ Z2 [x] y halla todos los códigos cı́clicos de
longitud 6.

12

También podría gustarte