Sunteți pe pagina 1din 155

1

+ +1.5em -1.2em +1em

Introducci
on a la teora
de c
odigos y de la
informaci
on
Jos
e Galaviz Casas
Departamento de Matem
aticas
Facultad de Ciencias
UNAM

Indice
Prefacio

1 Preliminares
1.1
Aritmetica modular y un poco de
1.2
Polinomios . . . . . . . . . . . . .
1.3
Cadenas de smbolos . . . . . . .
1.4
C
odigos . . . . . . . . . . . . . .
1.5
Anotaciones finales . . . . . . . .
Ejercicios . . . . . . . . . . . . .

teora de n
umeros
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

1
1
12
16
21
33
33

2 Codificaci
on eficiente

2.1
Arbol
de decodificacion . . . . . . . . .
2.2
Codificaci
on de Shannon-Fano . . . . . .
2.3
Codificaci
on de Huffman . . . . . . . . .
2.4
Longitud promedio de un codigo . . . .
2.5
La eficiencia del esquema de codificacion
Ejercicios . . . . . . . . . . . . . . . . .

. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
de Huffman
. . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

35
35
37
39
43
45
52

3 Informaci
on
y entropa
3.1
Cantidad de informacion . . . .
3.2
Entropa de informacion . . . .
3.3
Propiedades de la entropa . . .
3.4
Extensiones de una fuente . . .
3.5
El primer teorema de Shannon
Ejercicios . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

55
55
58
60
63
66
70

.
.
.
.
.

73
74
81
82
89
91

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

4 Codificaci
on para detectar y corregir errores
4.1
Regla de decision y canal de comunicacion . . . . . . .
4.2
Decodificaci
on al vecino mas cercano . . . . . . . . . .
4.3
Distancia mnima, capacidad de deteccion y correccion
4.4
C
odigos maximales . . . . . . . . . . . . . . . . . . . .
4.5
Probabilidad de error al decodificar . . . . . . . . . . .
III

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

INDICE

IV
4.6
4.7
4.8
4.9
4.10
4.11

C
odigos de Hamming: idea e implementacion
Esferas y c
odigos perfectos . . . . . . . . . . .
Equivalencia de codigos . . . . . . . . . . . .
Tasa de transmision y de correccion . . . . .
El teorema de la codificacion con ruido . . . .
C
odigos de Golay: idea e implementacion . .
Ejercicios . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

92
96
99
100
102
104
106

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

109
109
111
113
116
118
120
126
127

6 C
odigos cclicos
6.1
Definici
on, asociacion con polinomios . . . . .
6.2
Polinomio generador . . . . . . . . . . . . . .
6.3
Matriz generadora . . . . . . . . . . . . . . .
6.4
Polinomios irreducibles y factorizacion . . . .
6.5
Polinomio y matriz de verificacion de paridad
6.6
Codificaci
on y decodificacion . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

131
131
133
136
138
141
143
146

5 C
odigos lineales
5.1
Definici
on, caractersticas . . . . . . . . .
5.2
La matriz generadora . . . . . . . . . . . .
5.3
Correcci
on de errores . . . . . . . . . . . .
5.4
Probabilidad de decodificar correctamente
5.5
Complemento ortogonal, codigo dual . . .
5.6
Decodificaci
on de sndrome . . . . . . . .
5.7
C
odigos de Hamming y Golay revisados .
Ejercicios . . . . . . . . . . . . . . . . . .

Bibliografa

.
.
.
.
.
.
.
.

147

+Prefacio
Se buscan j
ovenes delgados y vigorosos, no mayores de 18 a
nos, deben ser jinetes
expertos dispuestos a arriesgar la vida diariamente. Preferentemente huerfanos. Era
el atemorizante texto que se poda leer en los carteles de reclutamiento de la recien
fundada compa
na Pony Express en 1860. Los jovenes candidatos deban comprometerse
a atravesar dos tercios de la anchura de Norteamerica (3 200 km), en 10 das a lomo
de caballo, haciendo entregas entre St. Joseph, Missouri y Sacramento, California.
La garanta de entrega de la correspondencia era tan endeble como la pervivencia del
mensajero: la creciente de un ro, un trastabilleo de las agobiadas herraduras, una bala
o los rigores de la Sierra Nevada podan segar la vida del jinete y entregar al olvido su
epistolar cargamento.
Al a
no siguiente la compa
na Western Union completo la lnea telegrafica que hizo
obsoleta la Pony Express. La entrega confiable, sin embargo, a
un dependa de la figura
del mensajero, ahora personificado por muchachos de 12 a
nos que recorran las calles en
bicicleta. La historia, una de las formas de la irona, quiso que uno de esos muchachos,
de nombre Claude Shannon, nos entregara lo que hoy conocemos como teora de la
informaci
on. Lo que ha hecho posible, en buena medida, que hoy podamos escribir
un mensaje de correo electronico y estar confiados en que sera ledo, tal cual, por su
destinatario; lo que nos ha hecho posible observar la superficie de Marte, los anillos de
Saturno o un partido de f
utbol soccer en Sudafrica.
En julio y octubre de 1948, en el Bell Systems Technical Journal apareci
o el artculo
titulado A Mathematical theory of communication, en el que Claude Shannon formul
o
los fundamentos de la teora de la informacion. El artculo versa, por una parte, de la
manera de codificar los datos producidos por una fuente de informacion para representarlos eficientemente, suponiendo una confiabilidad absoluta en la recuperaci
on exacta
de lo que la fuente ha producido. Trata, por otra parte, de la manera de codificar los datos que, luego de ser producidos por una fuente, viajan a traves de un canal imperfecto,
en el que los pueden alterarse imprevisiblemente. El primer tratamiento da lugar a lo
que conocemos como codificacion de fuente (source coding), el segundo a la codificaci
on
de canal (chanel coding).
Es acerca de esto que trata la presente obra, la codificacion eficiente y la codificaci
on
para detectar y corregir errores. El objetivo es presentar los fundamentos de la teora
de c
odigos en el marco conceptual que ofrece la teora de la informacion.
Se supone del lector un conocimiento elemental de algebra lineal, de combinatoria y
de probabilidad. El captulo inicial, sin embargo, esta dedicado a presentar brevemente
algunos de los conocimientos preliminares necesarios para abordar el contenido esencial
del libro: un poco de teora de n
umeros, de combinatoria relacionada con cadenas de
smbolos y de operaciones con polinomios.
V

VI

Prefacio

El captulo 2 est
a dedicado a la codificacion eficiente de datos. Se introducen los
conceptos relacionados con la codificacion y con los codigos enfocados en la eficiencia
de la representaci
on.
En el captulo 3 se presenta el marco teorico y conceptual de la teora de la informaci
on. Se introducen los mecanismos para cuantificar la informacion contenida en
los smbolos individuales y para evaluar el promedio de la misma, lo que constituye el
concepto de entropa de informacion.
El captulo 4 introduce la transmision de datos sujeta a errores. Se analiza la naturaleza estadstica de los mismos y se establecen los requisitos que la codificaci
on debe
poseer para detectarlos o corregirlos.
En el captulo 5 se presentan tambien codigos orientados a detectar y corregir errores,
pero con una estructura algebraica mas robusta, a saber, la de espacio vectorial, lo que
simplifica notablemente las operaciones.
El captulo 6 trata de los codigos cclicos, que constituyen un paso mas en la evoluci
on
de los c
odigos detectores y correctores de errores, pensando como polinomios a las
palabras del c
odigo.
El texto est
a pensado para estudiantes de la segunda mitad de una carrera a nivel licenciatura en ciencias exactas o de ingeniera, preferentemente vinculadas con la
computaci
on.
Debo agradecer a mi institucion, la Facultad de Ciencias de la UNAM, en particular
al Departamento de Matematicas de la misma, por las facilidades concedidas para la
realizaci
on de la obra y al apoyo economico institucional que a traves del proyecto
papime PE100205 brindo la Universidad.
Agradezco tambien a los muchos estudiantes de Ciencias de la Computaci
on y algunos de Matem
aticas quienes conocieron las versiones preliminares del texto y cuya
retroalimentaci
on resulto fundamental. Agradezco tambien a mis colegas de la facultad
que han contribuido con la forma y el fondo del libro, particularmente a la Dra. Elisa
Viso, quien estuvo a cargo de la supervision del proyecto institucional mencionado y
adem
as construy
o el formato en el que se presenta la obra.

Jose Galaviz Casas


Ciudad Universitaria, diciembre de 2010

Preliminares

1.1 +Aritmetica modular y un poco de teora de numeros


En general en toda la teora de codigos se suele trabajar en conjuntos cuyo alfabeto es
bastante restringido. En las aplicaciones tecnologicas en dispositivos de almacenamiento
o transmisi
on de datos, por ejemplo, el alfabeto de smbolos posibles es el conjunto
{0, 1}, los dgitos binarios, que en adelante llamaremos bits. En la teora de c
odigos y
en criptografa suele trabajarse sobre el conjunto de todos los enteros menores que un
cierto n
umero primo. En general se trata de subconjuntos de los enteros con una cierta
estructura, lo que conocemos como las clases residuales modulo alg
un n
umero entero.
As que ser
a necesario recordar algo de nuestros conocimientos de aritmetica modular.
Lo primero que debemos recordar es el algoritmo de la division.
n] Dados a, b Z, con b 6= 0, existen dos enteros
Teorema 1.1 [Algoritmo de la divisio
u
nicos q y r tales que a = bq + r con 0 r <| b |. A q se le llama el cociente y a r el
residuo.

Definici
on 1.1 Decimos que a es congruente con b modulo m, o en notacion:
a b (mod m)
cuando se obtiene el mismo residuo al dividir a entre m y b entre m.
Es posible formular definiciones alternativas de a b (mod m).
1

Preliminares

a b es divisible por m (i.e. es m


ultiplo de m), en notacion m | (a b). Por el
algoritmo de la division podemos escribir:
a = c1 m + r1
b = c2 m + r2
(1.1)
de donde:
a b = c1 m + r1 c2 m r2 = (c1 c2 )m + (r1 r2 )

(1.2)

como r1 = r2 :
a b = (c1 c2 )m = c3 m

(1.3)

de donde concluimos que m | (a b).


Existe k Z tal que a = km + b. Esto es claro si reescribimos 1.3 como:
a = (c1 c2 )m + b

EJEMPLO 1.1
73

(mod 2) porque 3 = 2 1 + 1 y 7 = 2 3 + 1.

5 49
96 4

(mod 6) porque 49 = 6 8 + 1 y 5 = 6 (1) + 1.


(mod 23) porque 4 = 23 0 + 4 y 96 = 23 4 + 4.

131 100

(mod 7) porque 100 = 7 (15) + 5 y 131 = 7 18 + 5.

Si m es un entero positivo Zm denota el conjunto de los enteros modulo m, es decir:


Zm = {0, . . . , m 1}, el conjunto de todos los posibles residuos que resultan de dividir
un entero cualquiera por m.
De esto resulta algo interesante, si fijamos m, el tama
no del modulo, y luego establecemos que un entero cualquiera esta en relacion con todos los enteros congruentes
con el m
odulo m, con esto construimos una relacion de equivalencia. Formalmente, una
relaci
on:
Reflexiva. Un entero cualquiera a esta en relacion con el mismo. O sea a a (mod m).

1.1 Aritmetica modular y un poco de teora de n


umeros

Simetrica. Si a est
a relacionado con b, entonces b esta relacionado con a. Es decir a b
(mod m) es equivalente a b a (mod m).
Transitiva. Si a est
a relacionado con b y b esta relacionado con c, entonces a est
a relacionado
con c. Esto es a b (mod m) y b c (mod m) implica que a c (mod m).
Como el lector recordara, toda relacion de equivalencia induce una partici
on en el
conjunto sobre el que se define, en nuestro caso, los enteros. En efecto, una vez que
se ha fijado m, el tama
no del modulo, los posibles residuos que se obtienen de dividir
por m son los enteros no negativos menores que m, as que cualquier entero, estar
a
finalmente en relacion con uno y solo uno de estos posibles residuos. El conjunto de
todos los enteros, a traves de la relacion de congruencia modulo m, es partido en m
diferentes subconjuntos o clases de equivalencia. Cada una de estas clases podemos
pensarla representada por el entero mas peque
no en ella, es decir, uno de los m
residuos posibles, por lo que a estas clases suele llamarseles clases residuales m
odulo m.

EJEMPLO 1.2

x 61

(mod 7)

significa que x = 5 porque 61 = 7 8 + 5

Podemos tambien darle una estructura mas interesante a Zm definiendo operaciones


en el. Por ejemplo la suma y el producto modulo m.

Definici
on 1.2 Sean x, y Z. La suma de x y y en Zm es el residuo que resulta de dividir
x + y Z entre m. Analogamente el producto de x y y en Zm es el residuo que resulta
de dividir x y Z entre m.
N
otese que con esta definicion Zm es un conjunto cerrado bajo la suma y el producto
m
odulo m.

EJEMPLO 1.3
En Z9 :
7+5=3
porque 7 + 5 = 12 = 9 1 + 3, analogamente: 5 4 = 2 porque 5 4 = 20 = 9 2 + 2

Preliminares

Definici
on 1.3 A la terna hZm , +, i es a lo que, en adelante, llamaremos los enteros modulo
m. Generalmente, abusando de la notacion, lo denotaremos simplemente como Zm .
Es bien conocido, por todos los dedicados a la computacion el conjunto de los enteros
m
odulo dos. La tabla de sumar en Z2 es:
+

y la de multiplicar:

N
otese que 42 = 0 en Z8 , pero 4 y 2 son ambos, distintos de cero. Sera deseable que
cuando un producto sea cero al menos uno de los operandos sea cero. Que necesitamos
para que esto ocurra?
Supongamos que a, b Zm y que a b = 0 Zm , es decir:
ab0

(mod m)

(1.4)

o dicho de otra forma m | (a b). Nosotros quisieramos que alguna de las siguientes
condiciones fuera verdadera:
1. a = 0
lo que significa que a 0

(mod m) y por tanto m | a.

2. b = 0
lo que an
alogamente significa que: m | b
As que, en sntesis, quisieramos que m | (a b) implique que m divide a uno de los
factores, al menos. Esto significa, como demostraremos, que m es un n
umero primo.

Teorema 1.2 Sean a, b Zp . a b = 0 en Zp implica que a = 0 o b = 0 si y solo si p es primo.


Demostraci
on:
Notemos que la estructura del teorema es A B C donde A es a b = 0, B es
a = 0 o b = 0 y C es la afirmacion de que p es primo.

1.1 Aritmetica modular y un poco de teora de n


umeros

Suponemos A y C, pretendemos concluir B.


Suponemos que a b = 0 en Zp . Esto significa que (a b) 0 (mod p) y por tanto
p | (a b). Dado que p es primo entonces ocurre alguna de las dos cosas siguientes:
p | a, lo que significa que a 0

(mod p), es decir, a = 0 en Zp

p | b lo que analogamente significa que b = 0 en Zp


Demostrar A B C es equivalente a demostrar C (A B). Es decir,
supondremos que p no es primo y que no es cierto que si el producto de a y b es
cero, a o b son cero.
Si p no es primo entonces es posible dividirlo por alg
un n
umero que no es ni el
mismo ni la unidad, es decir, lo podemos escribir como:
p=ab

(1.5)

donde a, b Z y tanto a como b son distintos de p y de 1, y deben ser menores


que p entonces 2 a, b p 1. As que son, de hecho elementos de Zp distintos
de cero y por 1.5 tales que:
ab0

(mod p)

As que: ab = 0 en Zp .

En
algebra, a un conjunto cerrado bajo una operacion definida en el, que sea asociativa se le denomina semigrupo. Si un semigrupo posee elemento identidad se denomina
monoide y si adem
as cada elemento tiene inverso bajo la operacion definida, se denomina grupo. Si la operacion es conmutativa el grupo es abeliano. Nuestros Zm son
un grupo abeliano con la operacion + y con el producto () son un semigrupo, esto en
lenguaje algebraico es un anillo. Pero lo mejor viene cuando m es un n
umero primo, en
ese caso Zm es un campo.

Definici
on 1.4 Un campo es un conjunto no vaco F con dos operaciones binarias: adicion
(+) y producto (), que cumplen con las siguientes propiedades:
Sean a, b y c elementos cualesquiera de F
1. Asociatividad
a + (b + c) = (a + b) + c
a (b c) = (a b) c
2. Conmutatividad
a+b=b+a
ab=ba

Preliminares

3. Distributividad
a (b + c) = a b + a c
4. Existe un elemento distinguido, denotado como 0 tal que:
0+a=a+0=a
5. Existe un elemento distinguido, denotado como 1 tal que:
1a=a1=a
6. Existe un inverso aditivo, denotado con a y un inverso multiplicativo, denotado
con a1 tales que:
a + (a) = (a) + a = 0
a (a1 ) = (a1 ) a = 1

Teorema 1.3 Zp es un campo si y solo si p es primo.


No vamos a demostrar todas las propiedades. Pero s la que tiene particular relevancia para nuestros propositos.

Teorema 1.4 En Zp todos los elementos distintos de cero tienen un inverso multiplicativo si
y s
olo si p es primo.
Demostraci
on:
La demostraci
on en este sentido la haremos negando la tesis y demostrando la negaci
on de la hip
otesis. Es decir: si p no es primo entonces no todos los elementos
de Zp tienen inverso.
Si p no es primo significa que es divisible entre alg
un n
umero distinto de 1 y de
p mismo. Es decir, podemos escribir p = ab con a y b enteros distintos de cero y
menores a p. Pero entonces a, b Zp y como el producto de ellos es p entonces
a b = 0 en Zp .
Ahora bien, si a tuviera inverso a1 entonces tendramos:
b = a1 (a b) = a1 0 = 0
pero habamos dicho que b era distinto de cero, as que esto es una contradicci
on.
Por tanto a no tiene inverso, existe un elemento en Zp sin inverso.

1.1 Aritmetica modular y un poco de teora de n


umeros

Supongamos ahora que p es primo, debemos deducir que todos los elementos de Zp
tienen inverso.
Sea a un elemento cualquiera de Zp . Consideremos ahora todos los productos de
la forma a b donde b Zp . Si hubiera un par de elementos b, b0 Zp distintos
entre s pero que dieran el mismo producto al multiplicarse por a tendramos que
b 6= b0 y a b = a b0 , es decir
(a b) c (mod p)
y
(a b0 ) c (mod p)
Es decir, al dividir a b entre p se obtiene el mismo resduo que al dividir a b0
entre p. Entonces:
ab = kp + c
ab0 = k 0 p + c
Si el residuo es el mismo y el divisor tambien, el algoritmo de la divisi
on nos dice
que los cocientes son los mismos. Esto es: k = k 0 .
Entonces b debe ser tambien igual a b0 lo que contradice nuestra hip
otesis. As
que no puede haber dos productos iguales. Para toda b Zp el producto a b es
un elemento distinto de Zp . As que en total hay p productos distintos, todos ellos
en Zp , entonces el conjunto de todos los posibles productos es exactamente todo
Zp y debe haber alg
un producto que sea igual a 1. Es decir, existe alguna b Zp
tal que a b = 1, luego a, un elemento cualquiera de Zp , tiene inverso.

Lo que acabamos de demostrar es un caso particular de una situacion mas general que
demostraremos m
as adelante, a saber: en un conjunto Zm un elemento a tiene inverso
multiplicativo si a es primo relativo com m. En el caso que acabamos de demostrar,
como m es primo entonces cualquier elemento en Zm resultara primo relativo con el, as
que todos los elementos de Zm tendran inverso.
Tambien es prudente se
nalar que estos campos finitos no son los u
nicos. En general
m
existe un campo finito de tama
no p para todo primo p y todo entero positivo m. A
estos campos se les suele llamar Campos de Galois y se denotan con GF(q) (Galois
Field ), donde q = pm . Los Zp son un caso particular de campo de Galois en los que
q = p1 . Estos campos constituyen una de las areas de trabajo fundamentales en la teora
de c
odigos y en criptografa.1

Adem
as, dada una pareja p, m, el campo de Galois de orden (tama
no) pm es u
nico salvo el nombre
de sus elementos y la manera de denotar las operaciones, es decir, son u
nicos salvo isomorfismo.

Preliminares

EJEMPLO 1.4
En Z11 6 + 5 = 0, as que el inverso aditivo de 6 es 5, en notacion:
6 = 5
Adem
as en Z11 6 2 = 1, as que
61 = 2
Por supuesto, dado que 2 es primo Z2 es un campo, un campo curioso: cada elemento
es su propio inverso aditivo: sumar es lo mismo que restar.

Recordemos ahora un par de conceptos elementales: el de mnimo com


un m
ultiplo
y m
aximo com
un divisor.

Definici
on 1.5 Dados dos numeros enteros cualesquiera a y b, el Maximo Comun Divisor de
a y b, denotado mcd(a, b), es el entero mas grande que los divide a ambos. El mnimo
com
un m
ultiplo de a y b, denotado mcm(a, b), es el entero mas peque
no que resulta
divisible por ambos.
Con base en el concepto de mcd(a, b) se define lo siguiente.

Definici
on 1.6 Dos numeros enteros a y b son primos relativos si mcd(a, b) = 1.
Ya sabemos que a b (mod m) significa que m | (a b). Recordemos tambien el
siguiente hecho evidente.

Teorema 1.5 Sean a, b y c en Z. Si a | b y b | c entonces a | c.


Demostraci
on:
Como a | b entonces es posible escribir b = ax para alg
un x Z. Ademas b | c entonces
c = by para alg
un y Z. Sea z = xy Z. Entonces c = axy = az por lo que a | c. 
Como dijimos, el teorema 1.4 es un caso particular de uno mas general que estamos
en condiciones de mostrar ahora.
Encontrar el inverso de un n
umero a Zm consiste en hallar x Zm tal que ax = 1
tomando el producto modulo m. Es decir:
ax 1

(mod m)

(1.6)

1.1 Aritmetica modular y un poco de teora de n


umeros

Esta ecuaci
on tiene solucion, y es u
nica, si y solo si a y m son primos relativos, es
decir, mcd(a, m) = 1. Es facil demostrarlo.

Teorema 1.6 Un elemento a de Zm posee inverso multiplicativo si y solo si mcd(a, m) = 1.


Demostraci
on:
Supongamos que:
1. mcd(a, m) = d > 1.
2. Existe b Zm tal que ab 1

(mod m).

1 significa que:
d|a

(1.7)

d|m

(1.8)

con d > 1.
Por otra parte 2 significa que:
m | (ab 1)

(1.9)

As que por 1.8 y 1.9 y usando el teorema 1.5 tenemos que:


d | (ab 1)

(1.10)

y por 1.7:
d | ab

(1.11)

As que para que se cumplan simultaneamente 1.10 y 1.11 debe ocurrir que:
d|1

(1.12)

lo que, por supuesto, es imposible.


El regreso es tambien facil y sera evidente luego de revisar, mas adelante, el algoritmo
de Euclides extendido.

El algoritmo m
as antiguo de que se tenga memoria es, justamente, el formulado por
Euclides para encontrar el maximo com
un divisor de dos n
umeros. El algoritmo 1.1 es
la versi
on recursiva.
Observemos un ejemplo de ejecucion de este algoritmo. En la tabla 1.1 se muestran los valores de a y b en las llamadas recursivas que se efect
uan para encontrar el
mcd(97, 77), que por cierto son primos relativos y por tanto mcd(97, 77) = 1.

10

Preliminares

Algoritmo 1.1 Versi


on recursiva del algoritmo de Euclides para obtener el maximo com
un divisor
de dos n
umeros a y b.
MCD(a, b)
1 if b = 0 then
2
return a
3 else
4
return M CD(b, a (mod b))
5 endif

llamada
0
1
2
3
4
5
6

a
97
77
20
17
3
2
1

b
77
20
17
3
2
1
0

cociente
1
3
1
5
1
2

Tabla 1.1: Valores de a y b, argumentos del algoritmo de Euclides en las llamadas


recursivas sucesivas para encontrar mcd(97, 77).

1.1 Aritmetica modular y un poco de teora de n


umeros

11

Por la manera en que se efect


ua la llamada en la lnea 4 del algoritmo 1.1 vemos que
en la tabla 1.1 tenemos en la llamada i como valor de a (llamemosle ai en adelante) el
valor que tena b en la llamada anterior (llamemosle bi1 ). Por otra parte el argumento
que ocupar
a el valor de b en la llamada que ocurre en la lnea 4 es a mod b, el residuo
que resulta de dividir a por b. As que podemos escribir ai = qi bi + bi+1 , es decir,
el siguiente valor de b sera el residuo de dividir la a actual entre la b actual. Pero el
valor actual de a es en realidad el que tena b en la llamada anterior como habamos
observado, as que:
bi1 = qi bi + bi+1

(1.13)

En esencia la ecuacion 1.13 dice que cualquier residuo (los valores de b) resultado del
proceso, puede escribirse como combinacion lineal de sus dos predecesores, s
olo tenemos
que reescribir la ecuacion como bi+1 = qi bi + bi1 . Pero si esto es posible entonces
podemos irnos hacia atras escribiendo cada residuo de la expresion como combinaci
on
lineal de sus predecesores hasta llegar a los mismsimos a y b. Como el u
ltimo residuo es
mcd(a, b) esto quiere decir que el maximo com
un divisor de dos n
umeros puede escribirse
como combinaci
on lineal de ellos. En particular si los dos n
umeros a y b eran primos
relativos entonces:
1 = a + b

(1.14)

Ahora bien, si estamos en Zb quien es ? la expresion 1.14 dice que a 1 (mod b)


as que resulta ser el inverso multiplicativo de a en Zb .
Al algoritmo de Euclides modificado para obtener la combinacion lineal que expresa
el mcd se le suele llamar el algoritmo de Euclides extendido y en particular es u
til para
calcular inversos multiplicativos como hemos visto.
Ahora es posible echar un nuevo vistazo al teorema 1.6 y pensar en la demostraci
on
de regreso. Un tratamiento bonito de esto puede hallarse en [2].
Otros dos resultados que nos seran u
tiles son los siguientes.

Teorema 1.7 [Teorema de Fermat] Sea p un numero primo y a un entero. Si mcd(p, a) = 1


(p y a son primos relativos) entonces:
ap1 1

(mod p)

Otra manera de enunciarlo, restringiendo el conjunto de posibles valores de a es:


Si p es primo entonces ap1 1 (mod p) para toda a en Zp
Donde Zn denota el subconjunto de elementos en Zn relativamente primos con n.
Por ejemplo Z15 = {1, 2, 4, 7, 8, 11, 13, 14}. Como en el teorema p es primo entonces de
hecho Zp = Zp .

12

Preliminares

Teorema 1.8 Si n1 , n2 , . . . , nk son primos relativos por parejas y n = n1 n2 . . . nk entonces,


para cualesquiera enteros x y a y toda i {1, 2, . . . , k} ocurre:
xa

(mod ni )

si y s
olo si:
x a (mod n)
Este teorema es una consecuencia del conocido teorema chino del residuo.
No podemos terminar esta seccion sin enunciar el teorema mas importante.
tica] Cualquier entero n tal que
Teorema 1.9 [Teorema fundamental de la artitme
| n |> 1 se puede expresar como el producto de n
umeros primos. La expresion es u
nica
salvo el orden en que los factores son listados y sus signos.

1.2 +Polinomios
Seguramente el lector recuerda, de sus cursos mas elementales, el concepto de polinomio.

Definici
on 1.7 Un polinomio en x es una expresion de la forma:
an xn + an1 xn1 + . . . + a1 x + a0
en la que los exponentes de la variable x son enteros no negativos y los coeficientes
ai R.
Al coeficiente distinto de cero, asociado con la mayor potencia de x se le suele llamar
el coeficiente principal y si es 1, se dice que el polinomio es m
onico. A la potencia mayor
de x con coeficiente distinto de cero se le denomina el grado del polinomio.
En el conjunto de polinomios tenemos definidas operaciones como la suma y el
producto. La primera de estas operaciones es asociativa y conmutativa y cada elemento
del conjunto de polinomios posee un inverso aditivo, as que, de acuerdo con lo que
habamos mencionado antes, el conjunto de polinomios es un grupo abeliano con la
suma.
Con el producto, dado que este es asociativo, el conjunto de polinomios es, al menos
un semigrupo. Resulta entonces que con la suma y el producto, el conjunto de polinomios
es un anillo. Adem
as posee un par de caractersticas especiales, existe un elemento
neutro con el producto y este al igual que la suma, tambien es conmutativo, as que esto
le concede dos calificativos adicionales al anillo: anillo conmutativo con unidad.

13

1.2 Polinomios

Debido a nuestro interes particular en este texto, nos restringiremos al estudio de


polinomios con coeficientes enteros.

EJEMPLO 1.5
Sean p(x) = 2x4 3x2 y q(x) = 6x4 + 2x3 + x2 + 2.
p(x) + q(x) = 8x4 + 2x3 2x2 + 2
y

p(x)q(x) = 12x8 + 4x7 + 2x6 + 4x4 18x6 6x5 3x4 6x2


= 12x8 + 4x7 16x6 6x5 + x4 6x2

En los cursos elementales de algebra nos ense


naron a factorizar, es decir, expresar
polinomios como producto de otros mas simples.

EJEMPLO 1.6
Sea p(x) = 16x2 + 16x + 4, entonces:
p(x) = (4x + 2)2
Si q(x) = x2 + x 12, entonces:
q(x) = (x + 4)(x 3)

El objetivo era obtener los factores mas simples posibles, es decir, aquellos que ya
no pudieran, a su vez, factorizarse. A estos polinomios los llamamos irreducibles y
adquieren un papel analogo al que tienen los n
umeros primos en la aritmetica.
lgebra] Para todo polonomio p(x) de grado
Teorema 1.10 [Teorema fundamental del a
n > 0 existen exactamente n races {c1 , c2 , . . . , cn } (no necesariamente distintas), tales
que:
p(x) = a(x c1 )(x c2 ) . . . (x cn )
donde a es el coeficiente principal de p.

14

Preliminares

El teorema fundamental del algebra es, esencialmente, una reescritura del de la


aritmetica pero con los polinomios irreducibles x ci haciendo las veces de los factores
primos.
Ser
a de nuestro interes, mas adelante, considerar el conjunto de todos los polinomios
que pueden generarse a partir de un polinomio irreducible dado, multiplicandolo por los
distintos monomios disponibles de un conjunto.

EJEMPLO 1.7
Sea p(x) = x + 1, entonces los polinomios que pueden generarse a partir de p con el
conjunto {1, x, x2 , x3 } son: x + 1, x2 + x, x3 + x2 y x4 + x3 .

Tambien nos va a interesar hacer aritmetica modular, pero con polinomios. Es


decir, obtener expresiones del tipo p(x) = q(x)d(x) + r(x) de la que podemos decir que
q es el cociente que resulta de dividir p entre d y r es el residuo o bien: p(x) r(x)
(mod d(x)). Por analoga con lo que ocurre en el algoritmo de la division, el grado del
polinomio residuo debe ser menor que el del polinomio divisor. Necesitaremos recordar
c
omo se lleva a cabo la division entre polinomios. Lo haremos a traves de ejemplos:

EJEMPLO 1.8
La divisi
on de 9x3 + 3x2 + 6x + 3 entre 3x2 + 6 se puede obtener de la siguiente forma:
3x + 1
3x2

9x3

+ 6)

9x3

3x2

+ 6x + 3
18x

3x2 12x + 3
3x2
6
12x 3
de donde: 9x3 + 3x2 + 6x + 3 = (3x2 + 6)(3x + 1) (12x + 3). Es decir, el polinomio
cociente es: 3x + 1 y el residuo es: 12x 3.

15

1.2 Polinomios

EJEMPLO 1.9
M
as tarde estaremos particularmente interesados en el producto de polinomios m
odulo
n
n
otro polinomio de la forma x + 1 o x 1. Por ejemplo:
(x3 + x + 6)(2x + 3) = 2x4 + 3x3 + 2x2 + 15x + 18
Para obtener el residuo de este producto, modulo x3 + 1:
2x + 3
x3

2x4

+ 1)

3x3

2x2

2x4

+ 15x + 18
2x

3x3 + 2x2 + 13x + 18


3x3
3
2x2 + 13x + 15
As que: (x3 + x + 6)(2x + 3) = 2x2 + 13x + 15

(mod x3 + 1).

Cuando los coeficientes estan en al campo finito Z2 , hacer lo anterior es todava un


poco m
as f
acil, dado que siempre puede reemplazarse xn por 1, los coeficientes pares
se convierten en cero y 1 = +1. En adelante denotaremos con Pn (Zp ) al conjunto de
polinomios de grado estrictamente menor a n, con coeficientes en Zp y con Rn (Zp ) al
mismo conjunto con las operaciones suma, producto y producto por escalar realizadas
m
odulo xn 1.

EJEMPLO 1.10
En P5 (Z2 ) (lo que significa que las operaciones se llevan a cabo modulo x5 1).
(x4 + x2 + 1)(x2 + 1) = x6 + 2x4 + 2x2 + 1
= x5 x + 1
= x+1
Lo que abrevia el procedimiento usual, anulando luego los coeficientes pares:
x
x5

x6

1)

2x4

2x2

2x2

x6

+1
+x

2x4

+x

16

Preliminares

1.3 +Cadenas de smbolos


Codificar significa, esencialmente expresar cosas escritas con ciertos smbolos mediante
el uso de otros smbolos. As que la siguiente definicion sentara las bases de todo lo que
nos ocupar
a m
as adelante.

Definici
on 1.8 A un conjunto finito S = {s1 , s2 , . . . , sn } de n smbolos distintos le denominaremos un alfabeto. A una secuencia finita de elementos de S se le denomina una cadena
sobre S. Al n
umero de elementos en S le llamaremos el tama
no de S.
Hay que notar que la semantica nada tiene que ver con los smbolos o las cadenas.
No nos interesa el significado de las cosas expresadas en un alfabeto, solo nos interesan
las palabras mismas.
Dado que una cadena es finita podemos hablar de su longitud. La longitud de una
cadena x = x1 x2 . . . xk es el n
umero de smbolos que la constituyen y la denotaremos
con lon (x) = k.
La concatenaci
on o yuxtaposicion de dos cadenas x, y es la cadena z obtenida de
poner y inmediatamente a continuacion de x. En ese caso diremos que x y y son,
respectivamente, prefijo y sufijo de z.
Por supuesto, en caso de que z = xy tenemos lon (z) = lon (x) + lon (y).
Con S denotaremos el conjunto de todas las posibles cadenas sobre un alfabeto S,
incluyendo la cadena vaca .
Con S n denotaremos el conjunto de todas las cadenas de longitud n sobre S y con
Sn el conjunto de todas las cadenas de longitud n o menor sobre S.
Con 0 denotaremos la cadena constituida exclusivamente de ceros cuando nuestro
alfabeto tenga al cero, por supuesto.
Con | A | denotaremos la cardinalidad o el tama
no del conjunto A.

Teorema 1.11 Sea S un alfabeto de tamano k > 1.


1. | S n |= k n
2. | Sn |=

kn+1 1
k1

Demostraci
on:
Para demostrar el primer inciso basta notar que, dado que se trata de cadenas de
longitud n entonces hay, en cada cadena, k maneras de escoger el smbolo a poner en la
primera posici
on, cada vez que se elige esta hay k opciones para la siguiente, etcetera.

17

1.3 Cadenas de smbolos

Para demostrar el segundo inciso usaremos el primero. El n


umero de cadenas de
longitud n y menor es:
| Sn |=| S 0 | + | S 1 | + . . . + | S n |
esto es:

k n+1 1
k1
El c
alculo de la suma parcial es facil de comprobar, solo debemos restar a la suma
original el producto de k veces ella misma.

| Sn |= 1 + k + k 2 + . . . + k n =

Teorema 1.12
1. En Zn2 el n
umero de cadenas que tienen exactamente k ceros es:


n
k
2. En Znr el n
umero de cadenas que tienen exactamente k ceros es:


n
(r 1)nk
k

Demostraci
on:
Esencialmente, de los n lugares disponibles en la cadena debemos elegir d
onde poner
los k ceros, esto es, elegir un subconjunto de k posiciones de las n posibles, de all:


n
k
Para el segundo inciso, ya que se eligieron los k lugares donde van los ceros, hay
que elegir ahora que smbolos poner en los restantes n k lugares. Por supuesto ya no
podemos poner ceros, as que para todos los lugares podemos elegir solo de entre r 1
smbolos.

Hay que notar que en el teorema anterior tenemos la posibilidad de elegir las posiciones de la cadena donde van los ceros, de all el factor de las combinaciones de k en n.
Si estos lugares estuvieran fijos, es decir, si quisieramos saber cuantas cadenas hay que
tengan k ceros en posiciones fijas el resultado es, por supuesto, diferente. En este caso
ya no es posible elegir donde poner los ceros y si solo puede haber una posibilidad. Si
queremos saber cu
antas cadenas hay que tengan al menos k ceros en ciertas posiciones

18

Preliminares

fijas, entonces debemos contar cuantas opciones hay para las restantes n k posiciones.
En cada una de ellas podemos poner 0 o 1, as que el resultado es 2nk .

EJEMPLO 1.11
En Z12
umero de cadenas que tienen exactamente tres ceros y dos unos es:
4 , el n

 
12
9
27
3
2
primero elegimos tres de las 12 posiciones donde poner cero, luego 2 de las 9 restantes
donde poner 1, el resto de las posiciones (7) las rellenamos con 2 o 3.

En general el n
umero de cadenas en Zkn (cadenas de longitud k en Zn ) que contienen
r ceros y t unos es:

 
kr
k
(n 2)(krt)
t
r
En Z12
umero de cadenas con, al menos 10 ceros es:
4 , el n






12
12
12
3+
32 +
12
11
10
Generalizando, el n
umero de cadenas en Zkn con, al menos, r ceros es:

 

 
k
k
k
kr1
kr
(n 1)
+ ... +
(n 1)
+
k
r+1
r
Ahora que tenemos un concepto de cadena de smbolos en un alfabeto, resulta conveniente definir una nocion de distancia que nos permita expresar que tan diferentes
son dos cadenas entre s, que tan alejadas estan. Para ello utilizaremos la distancia de
Hamming.

Definici
on 1.9 La distancia de Hamming entre dos cadenas cualesquiera x, y S n , denotada
con d (x, y), es el n
umero de posiciones en las que x difiere de y.

EJEMPLO 1.12
La distancia entre 0343201 y 0322101 en Z75 es 3 dado que las cadenas coinciden en sus
dos primeros y en sus dos u
ltimos smbolos y difieren en los 3 centrales.

19

1.3 Cadenas de smbolos

La distancia de Hamming resulta ser realmente una buena nocion de distancia o


metrica desde el punto de vista formal del termino. Es decir, si x, y, z son elementos
cualesquiera de S n la distancia de Hamming cumple con las siguientes propiedades:
1. Positiva definida.
d (x, y) 0
y d (x, y) = 0 si y solo si x = y.
2. Simetrica.
d (x, y) = d (y, x)
3. Desigualdad del triangulo.
d (x, z) d (x, y) + d (y, z)
No demostraremos las dos primeras propiedades, pero s la tercera, la m
as interesante.

Teorema 1.13 Si x, y y z son tres cadenas cualesquiera en S n y d denota la distancia de


Hamming, entonces se satisface:
d (x, z) d (x, y) + d (y, z)
Demostraci
on:
Las posiciones en las que x difiere de y se pueden dividir en dos conjuntos ajenos:
1. Las r posiciones en las que x difiere de y y y no difiere de z.
2. Las u posiciones en las que x difiere de y y y difiere de z.
As que d (x, y) = r + u con u 0.
Por otra parte las posiciones en las que y difiere de z se pueden dividir tambien en
dos conjuntos ajenos:
1. Las t posiciones en las que y difiere de z y x no difiere de y.
2. Las u posiciones mencionadas con anterioridad, en las que y difiere de z y x difiere
de y.
As que d (y, z) = t + u.
En el caso binario, cuando S n = Zn2 , las posiciones en las que x difiere de z est
an
constituidas por las mencionadas en los incisos (1). Es decir:
d (x, z) = r + t r + t + 2u = d (x, y) + d (y, z)

20

Preliminares

dado que u 0.
En un caso m
as general en el que el alfabeto no es binario, el hecho de que x difiera
de y y que y difiera de z no necesariamente significa que x coincida con z. As que
las posiciones en las que x difiere de z estan constituidas por las de los incisos (1) y
posiblemente por algunas de las restantes u posiciones. Digamos que difieren en w de
esas u con w u.
d (x, z) = r + t + w r + t + u r + t + 2u = d (x, y) + d (y, z)
Dado que 0 w u.

En caso de trabajar sobre un alfabeto binario, para fines practicos de implementaci
on, es conveniente pensar la distancia de Hamming entre dos cadenas como el n
umero
de unos contenidos en el resultado de aplicar la operacion de disyuncion exclusiva (a
la que tambien podemos llamar suma m
odulo dos) entre las dos cadenas, la operaci
on
bit a bit conocida como or exclusivo o xor. La tabla de verdad para esta operaci
on,
denotada con , es la siguiente:
x

xy

Notar
a el lector que el xor vale 1 cuando ambos operandos son diferentes y 0 en
otro caso. As que el xor nos marca las posiciones en las que difieren dos cadenas
binarias. S
olo resta contar el n
umero de unos en el resultado del xor para conocer la
distancia de Hamming.

EJEMPLO 1.13
Sean x = 01001101 y y = 10001110 dos cadenas en Z82 . La distancia de Hamming es el
n
umero de unos en:
X Y = 11000011
por lo que d (x, y) = 4.

A fin de cuentas podemos pensar a las cadenas binarias como la expresion binaria
de un n
umero entero; por supuesto, podemos entonces pensar el resultado de un xor,

21

1.4 C
odigos

como otro n
umero escrito en binario. As que contar el n
umero de unos en cualquier
cadena binaria consiste en saber cuantos unos tiene la expresion binaria del n
umero que
representa. En ciertas circunstancias2 podemos hacer esto echando mano de la expresi
on
obtenida en [9]:
w(n) = n

n  
X
n
i=1

2i

(1.15)

donde n es el n
umero del que se quiere saber el n
umero de unos en su expresi
on binaria y
w(n) denota justamente el n
umero de unos en la expresion binaria de n. A este n
umero
se le denomina frecuentemente el peso de n.

1.4 +Codigos
Un c
odigo es un conjunto cualquiera de cadenas sobre un cierto alfabeto. Por ejemplo
C = {0, 01, 101, 1101, 0010} es un codigo sobre Z2 . Formalmente hablando:

Definici
on 1.10 Sea A = {a1 , a2 , . . . , ar } un conjunto finito de smbolos al que llamaremos
alfabeto del c
odigo. Un codigo r-ario sobre A es un subconjunto C de A de todas las
palabras sobre A. El n
umero r es llamado la base del codigo.
Por supuesto los codigos sobre Z2 se llaman binarios.

Definici
on 1.11 Sea S = {s1 , s2 , . . . , sq } un conjunto finito de smbolos al que nos referiremos
como alfabeto fuente. Sea C un codigo. Una codificaci
on o funci
on de codificaci
on es
una funci
on biyectiva f : S 7 C Si C es un codigo y f una codificacion entonces (C, f )
es llamado un esquema de codificacion.

EJEMPLO 1.14
Sea {A, B, C, D, E, F } el alfabeto fuente. Entonces f , definida como sigue es una
codificaci
on:
f (A) = 1
2

En general calcular la suma de la expresi


on 1.15 para un valor particular de n es m
as complicado
que hacer log2 (n) desplazamientos para obtener cada bit de la expresi
on binaria de n. Pero si sabemos
de antemano el valor m
aximo de n que se usar
a en un determinado problema, podemos guardar en un
arreglo el peso de cada n que necesitemos usando la expresi
on.

22

Preliminares

f (B) = 2
f (C) = 3
f (D) = 11
f (E) = 22
f (F ) = 23

Pero hay que notar que la cadena AA se codifica igual que D, BB se codifica igual
que E y que BC se codifica igual que F . No hay una u
nica manera de leer la secuencia
codificada 11 o 22 o 23. Por cierto, a las palabras escritas en smbolos de codigo asociadas
con el alfabeto fuente se les llama palabras del c
odigo; en nuestro ejemplo las palabras
del c
odigo son todas las de la derecha del smbolo =.
Tambien hay que notar que no todas las palabras del codigo miden lo mismo, las hay
de uno y de dos smbolos. A este tipo de codigos se les denomina de longitud variable.
Por supuesto tambien existen codigos en los que las palabras asociadas a los smbolos
del alfabeto fuente son todas de la misma longitud. En ese caso al codigo se le llama de
longitud fija o de bloque.
Representar datos mediante codigos de longitud fija tiene ventajas: Si se lee una
secuencia de palabras de codigo se sabe exactamente donde termina una palabra y
comienza la otra. Sin embargo, como veremos mas adelante, no es la manera m
as
eficiente de hacerlo.

1.4.1.

+C
odigos unvocamente decodificables

+1.5em
Por supuesto lo que pretendemos con una codificacion es poder ir en ambos sentidos,
de all que sea requisito el que la funcion de codificacion sea biyectiva, para asegurarnos
que es invertible. Queremos poder codificar y decodificar; mapear los smbolos en
el alfabeto fuente a palabras de codigo y luego poder recuperar los datos originales
decodificando estas luego de haberlas transmitido a traves de una lnea de comunicaci
on
o luego de haberlas almacenado durante alg
un tiempo.
En nuestro ejemplo anterior ya nos percatamos de que no siempre hay una u
nica
lectura posible para una secuencia de palabras de codigo, pero desearamos que as fuera
para evitar interpretaciones ambiguas. A esta propiedad se le llama decodificaci
on u
nica.
S
olo hay una manera de interpretar una secuencia de palabras de codigo en terminos de
los smbolos del alfabeto fuente.

Definici
on 1.12 Un codigo C sobre un alfabeto A es unvocamente decodificable si, para toda
cadena x = x1 x2 . . . xn sobre A existe a lo mas una secuencia de palabras de c
odigo
c = c1 c2 . . . cm que coincide con x. Es decir: x = c.

1.4 C
odigos

23

Parafraseando: Un codigo es unvocamente decodificable si no hay dos secuencias


diferentes de palabras de codigo que representen la misma cadena sobre A.
Computacionalmente lo que esto significa es que, si un emisor transmite una cadena
formada por palabras de un codigo unvocamente decodificable, para el receptor es
decidible determinar la secuencia de palabras de codigo que le fueron enviadas. Es
decir, sabr
a que si ha logrado separar la cadena de smbolos del alfabeto en palabras
del c
odigo, entonces esa es la u
nica lectura posible. Si el codigo no es unvocamente
decodificable no es posible decir si cualquier separacion que haga es la correcta o no.

EJEMPLO 1.15
C1 = {c1 = 01, c2 = 11, c3 = 011101} sobre Z2 no es unvocamente decodificable dado
que la cadena: 011101 puede ser interpretada como c3 o como la secuencia c1 c2 c1 .

EJEMPLO 1.16
El c
odigo C = {0, 10, 1101, 1110, 1011, 110110} sobre Z2 no es unvocamente decodificable, la cadena 110110 puede interpretarse como la u
ltima palabra del c
odigo o bien
como la tercera seguida de la segunda.

EJEMPLO 1.17
El c
odigo C1 = {0, 01, 011, 111} sobre Z2 , es unvocamente decodificable. A un c
odigo
de esta forma se le llama c
odigo coma porque al leer un mensaje escrito usando sus
palabras hay un smbolo que hace las veces de delimitador o terminador de palabra, en
este caso el 0. Este es el codigo coma binario de cuatro palabras.
Pero si hacemos una peque
na modificacion el codigo deja de ser unvocamente decodificable, sea C2 = {0, 01, 10, 011, 111} sobre Z2 , hemos a
nadido la palabra 10 al c
odigo
coma que llamamos C1 .
Usando C2 la cadena 011110 puede interpretarse como 01, 111, 0 o bien como 0, 111, 10.
Surge naturalmente la pregunta por que cambia la cualidad de decodificaci
on u
nica
s
olo por a
nadir una palabra? Intuitivamente lo que ocurre es que hay demasiadas
palabras en el c
odigo. Si un codigo tiene muchas palabras cortas, entonces es f
acil que
ocurra que las palabras mas largas puedan construirse pegando varias de las cortas o,
en terminos generales, que un mensaje pueda construirse de varias maneras usando las

24

Preliminares

palabras del c
odigo. Para decirlo en terminos informales es excesivo el poder expresivo
del c
odigo.
Usando el c
odigo C2 , por ejemplo, cuantas cadenas de 6 bits de longitud pueden
formarse usando las palabras del codigo? Una cadena de longitud 6 puede formase
uniendo:
Dos palabras de longitud 3: 4 posibilidades.
Tres palabras de longitud 2: 8 posibilidades.
Una palabras de longitud 3, una de longitud 2 y una de longitud 1: 24 posibilidades.
Una palabra de longitud 3 y tres de longitud 1: 8 posibilidades.
Dos de longitud 2 y dos de longitud 1: 24 posibilidades.
Una de longitud 2 y cuatro de longitud 1: 10 posibilidades.
Seis de longitud 1: 1 posibilidad.
En total son 79 posibles cadenas binarias de longitud 6, pero el maximo n
umero de
cadenas binarias diferentes de longitud 6 es 26 = 64, as que nuestro codigo C2 tiene un
poder de expresividad que rebasa lo indispensable para expresar todas las cadenas; eso
significa que debe haber mas de una manera de expresar algunas cadenas de longitud 6
con palabras del c
odigo, la de nuestro ejemplo es una de ellas.

EJEMPLO 1.18
En cambio C2 = {d1 = 01, d2 = 10, d3 = 110} sobre Z2 , s es unvocamente decodificable.

Nuestro an
alisis del ejemplo 1.17 nos acerca al resultado encontrado por McMillan
en 1956. En el fondo lo que el teorema siguiente nos dice es justamente lo que nuestro
ejemplo nos hace ver: no puede haber demasiadas palabras en un codigo porque deja
de ser unvocamente decodificable.

Teorema 1.14 Sea C = {c1 , c2 , . . . , cq } un codigo r-ario y sea `i = lon (ci ). Si C es


unvocamente decodificable, entonces las longitudes de sus palabras de codigo deben
satisfacer:
q
X
1
1
r`k
k=1

25

1.4 C
odigos

Demostraci
on:
Sea j el n
umero de palabras del codigo cuya longitud es j. Sea m = maxi {`i } la
m
axima longitud de las palabras del codigo. Supondremos que C es unvocamente
decodificable.
La suma de la desigualdad la podemos escribir como sigue:
q
m
X
X
j
1
=
rj
r`k
k=1

(1.16)

j=1

la suma del lado izquierdo es sobre las q palabras del codigo, la suma del lado derecho
agrupa las palabras de acuerdo a su longitud y por tanto recorre todas las posibles
longitudes.
Recordemos que el n
umero total de cadenas de longitud k en un codigo r-
ario es rk ,
j
as que el cociente rj es la proporcion de palabras de longitud j que estan en el c
odigo.
Sea u un entero positivo cualquiera:

u
m

X
j
2
m u
1

=
+
+

+
rj
r
r2
rm
j=1
X h i
iu i
1
=

r i1
r iu
{ij }
X i i i
u
1
2
=
(1.17)
ri1 +i2 +...+iu
{ij }

ij es una longitud de cadena, as que 1 ij m, dado que m es la maxima longitud.


As que i1 + i2 + . . . + iu esta entre u (si cada longitud fuera mnima) y um (si cada
longitud fuera m
axima):
u i1 + i2 + . . . + iu um
Si agrupamos ahora todos los terminos de la suma que tienen el mismo denominador,
es decir, el mismo valor de i1 + i2 + . . . + iu , podemos escribir 1.17 como:

u
m
um
X
X

Nk
j

=
(1.18)
j
r
rk
j=1

k=u

donde:
Nk =

(i1 i2 . . . iu )

i1 +i2 +...+iu =k

Sera bueno que analizaramos que significa el producto de las s. La demostraci


on
ya es de suyo bastante poco didactica. j es el n
umero de palabras de codigo de longitud
j, as que el producto es el n
umero total de cadenas de longitud
k = i1 + i2 + . . . + iu

26

Preliminares

construidas con u palabras de codigo de las longitudes especificadas por las ij .


Si ahora se suma sobre todas las posibles combinaciones de longitudes que sumen k
entonces realmente estamos obteniendo la cantidad total de cadenas de longitud k que
pueden ser construidas con u palabras de codigo.
Es decir, dado un conjunto de u longitudes que suman k, el producto de las s es
el n
umero de cadenas de longitud total k que pueden formarse con palabras del c
odigo
de las longitudes del conjunto. Si luego ya no se nos proporciona el conjunto y se nos
encomienda encontrar todas las combinaciones de u longitudes que cumplan con ese
requisito, estaremos buscando realmente todas las cadenas de longitud k que pueden
formarse pegando u palabras del codigo.
Dado que C es unvocamente decodificable, podemos afirmar que3 : no hay dos
secuencias de u palabras de c
odigo que generen la misma cadena de longitud k. Por
k
supuesto hay a lo m
as r de tales secuencias, as que:
Nk rk

(1.19)

Usando 1.19, 1.16 y 1.18:

u
!u
q
m
X
X
j
1
=
rj
r`k
j=1

k=1

um
X
k=u
um
X

Nk
rk
1

k=u

um

(1.20)

Ahora bien, dados un entero cualquiera m y un n


umero real x, si x > 1 entonces
existe un n
umero entero u tal que xu > um. La expresion 1.20 indica que si
x=

q
X
1
r`k
k=1

no es posible hallar u tal que xu > um, as que necesariamente:


q
X
1
1
r`k

(1.21)

k=1


Hay que enfatizar que el teorema de McMillan no nos dice cuando un c
odigo es
unvocamente decodificable, sino cuando no lo es, negando el teorema.
3

M
as delante haremos referencia a esta afirmaci
on.

1.4 C
odigos

27

A la desigualdad del teorema de McMillan se le denomina desigualdad de Kraft, as


pues, el teorema de McMillan dice que todo codigo unvocamente decodificable satisface
la desigualdad de Kraft pero no que todo codigo que la satisface es unvocamente
decodificable. Dado un codigo, si la desigualdad de Kraft no se cumple en el entonces
seguro no es unvocamente decodificable, si la satisface entonces no podemos decir si lo
es o no.
La raz
on de esto es la afirmacion que hicimos notar en la demostracion del teorema:
no hay dos secuencias de u palabras de c
odigo que generen la misma cadena de longitud
k. Esto es cierto, pero que tal si es posible generarla con u palabras y adem
as con
v 6= u palabras. En ese caso bien podra ocurrir que para un codigo C, cada uno de los
sumandos Nrkk cumpliera con ser menor o igual a 1, podra cumplirse la desigualdad de
Kraft y que a pesar de todo C no fuera unvocamente decodificable. De hecho los c
odigos
de los ejemplos 1.15 y 1.16 satisfacen la desigualdad de Kraft y no son unvocamente
decodificables.

1.4.2.

+C
odigos instant
aneos

+1.5em
Los c
odigos instantaneos son un caso particular de los codigos unvocamente decodificables.

Definici
on 1.13 Un codigo instantaneo es un codigo unvocamente decodificable en el que la
decodificaci
on puede hacerse leyendo secuencialmente de izquierda a derecha la cadena
de palabras de c
odigo.

EJEMPLO 1.19
El c
odigo C = {c1 = 1, c2 = 10} es unvocamente decodificable, pero no instant
aneo. Si
se recibe la secuencia 1110 y se lee de izquierda a derecha, entonces ocurre lo siguiente:
1. Leemos el primer uno y no sabemos si es c1 o el principio de c2 .
2. Leemos el segundo uno y ahora ya sabemos que el anterior era c1 , pero ahora no
sabemos si este nuevo uno es otra vez c1 o el principio de c2.
3. Se lee el tercer uno y ocurre otra vez lo mismo que en el inciso anterior.
4. Se lee el cuarto bit y se determina que la u
ltima palabra recibida es c2 .
Varias veces hemos terminado de leer una palabra del codigo y no podemos decir
a
un si realmente la hemos terminado de leer o si es solo el prefijo de alguna otra palabra.

28

Preliminares

Esta u
ltima afirmacion nos da pretexto para formular una conjetura: En los c
odigos
instant
aneos ninguna palabra completa del codigo constituye un prefijo, una subcadena inicial, de otra palabra mas larga; equivalentemente ninguna palabra del c
odigo
comienza con otra palabra de codigo mas corta.

Definici
on 1.14 Un codigo tiene la propiedad de prefijo si ninguna palabra de codigo es prefijo
de alguna otra.
Es un poco parad
ojica la definicion anterior: un codigo es prefijo o tiene la propiedad
de prefijo si sus palabras de codigo no son prefijos de otras.
Ahora podemos formular nuestra conjetura mas formalmente:

Teorema 1.15 Un codigo C es instantaneo si y solo si tiene la propiedad de prefijo.


Demostraci
on:
(Por reducci
on al absurdo).
Supongamos que C es instantaneo, en cuanto una palabra de codigo es leda puede
ser interpretada. Supongamos que C no tiene la propiedad de prefijo, es decir,
existe una palabra de codigo c que es prefijo de la palabra de codigo mas larga d.
Entonces al recibir la secuencia cc, no es posible interpretar la primera c hasta
leer un smbolo mas, dado que podra tratarse del principio de d. As C no es
instant
aneo, lo que es una contradiccion.
Supongamos que C tiene la propiedad de prefijo, sea n el n
umero de palabras de
c
odigo ledas e interpretadas.
1. n = 1 Se lee completamente una primera palabra c1 . Dado que no hay
ninguna palabra que sea prefijo de otra entonces podemos estar seguros de
haber ledo c1
2. Suponemos que se puede leer e interpretar secuencialmente n = k palabras. Si
leemos una mas, cualquiera, n = k+1, dado que no dejamos nada pendiente y
la (k + 1)-esima no es prefijo de ninguna otra entonces puede ser interpretada
inmediatamente.


EJEMPLO 1.20

Un ejemplo de c
odigo instantaneo es el c
odigo coma, como el primero mostrado en
el ejemplo 1.17. El c
odigo coma de ocho palabras es el siguiente:
Coma8 = {0, 10, 110, 1110, 11110, 111110, 1111110, 1111111}

29

1.4 C
odigos

El cero act
ua como delimitador de las palabras del codigo, salvo en el caso de la
u
ltima palabra, que es facilmente distinguible dado que tiene una longitud predeterminada y es la u
nica constituida solo de 1.
Este c
odigo es unvocamente decodificable y, mas a
un, es instantaneo, ninguna palabra es prefijo de otra.
En cambio el c
odigo siguiente, muy parecido al codigo coma, no es instant
aneo:
C = {0, 01, 011, 0111, 01111, 011111, 0111111, 01111111, 11111111}
Hay palabras que son prefijo de otras, esto basta para decir que no es instant
aneo.
Sin embargo s es unvocamente decodificable, basta leer cualquier mensaje de derecha
a izquierda para decodificar de la u
nica manera posible.

Aclaremos un poco las cosas. En un codigo unvocamente decodificable s


olo hay una
manera de dividir cualquier mensaje en palabras del codigo. En un codigo instant
aneo
s
olo hay una posible division de el mensaje en palabras y esta division puede hacerse
leyendo secuencialmente los smbolos del mensaje de izquierda a derecha, cada vez que
es ledo el u
ltimo smbolo de una palabra esta puede ser interpretada sin m
as demora,
nunca tenemos incertidumbre acerca de si realmente hemos acabado de leer una palabra
o s
olo hemos ledo el principio de otra mas larga.
Esta situaci
on contrapone dos ambitos diferentes, la diferencia sustancial entre
un c
odigo unvocamente decodificable y uno instantaneo no radica en cualidades matem
aticas, ambos son igualmente buenos desde el punto de vista puramente formal. El
problema fundamental en ese ambito es la decidibilidad. En ambos tipos de c
odigos el
mensaje codificado es siempre decidible, no hay ambig
uedad. La diferencia radica en las
cualidades computacionales. Esta bien, en un unvocamente decodificable el mensaje
puede separarse en palabras de codigo, de una u
nica manera, quien sabe c
omo, pero se
puede. Si pens
aramos en un dispositivo automatico para decodificar un mensaje arbitrario codificado con un codigo unvocamente decodificable, dependiendo de las cualidades
del c
odigo, debemos dotar al dispositivo de cierta capacidad para recordar aquello que
ya ha sido ledo pero a
un no se ha decidido como interpretar, lo que pueden ser varias
palabras de c
odigo. En un codigo instantaneo, en cambio solo debemos recordar tantos
smbolos como la longitud de palabra de codigo mas larga.
Hay un teorema que nos permite decir si, dado un conjunto arbitrario de longitudes,
existe un c
odigo instantaneo con palabras de esas longitudes justamente. Se lo debemos
a Kraft (el de la desigualdad), quien lo formulo en 1949. Pero antes de proceder con el
teorema haremos algunas operaciones que seran necesarias para demostrarlo.
Retomaremos la desigualdad de Kraft recordando la equivalencia que mostramos en
la expresi
on 1.16:
q
m
X
X
j
1
=
`
k
rj
r
k=1

j=1

(1.22)

30

Preliminares

Donde j es el n
umero de palabras de longitud j en el codigo. Si multiplicamos y
m
dividimos por r tenemos:
q
m
X
1 X
1
= m
j rmj
r
r`k

(1.23)

j=1

k=1

As que la desigualdad de Kraft es equivalente a:


m
1 X
j rmj 1
rm

(1.24)

j=1

es decir:
m
X

j rmj rm

(1.25)

j=1

En la suma el u
ltimo termino es: m rmm = m , as que podemos escribir:
m +

m1
X

j rmj rm

(1.26)

j=1

como un equivalente a la desigualdad de Kraft.

Teorema 1.16 Existe un codigo instantaneo r-ario C = {c1 , c2 , . . . , cq } con palabras de


longitudes `1 , `2 , . . . , `q si y solo si estas longitudes satisfacen la desigualdad de Kraft:
q
X
1
1
r`k
k=1

Demostraci
on:
Sea c C una palabra en un codigo instantaneo C, lon (c) = j m 1, dado que
c no debe ser prefijo de ninguna otra palabra en C entonces ninguna palabra de
la forma cx con lon (x) = m j puede estar en C. Dada c hay exactamente rmj
palabras de la forma cx de longitud m que deben ser excluidas de C. Esto para
cada posible eleccion de c de longitud j en el codigo C. Hay j posibles elecciones
de c y por cada una rmj palabras de longitud m que deben excluirse del c
odigo.
As que, en total, hay:
m1
X
j rmj
j=1

palabras de longitud m que no deben estar en C.

31

1.4 C
odigos

Las que s est


an (m ) mas las que no deben estar (la suma anterior) deben ser, a
lo m
as, tantas como todas las posibles (rm ). As que:
m +

m1
X

j rmj rm

j=1

que es justo la expresion 1.26, equivalente a la desigualdad de Kraft.


Por inducci
on sobre q.
q r.
Podemos elegir q smbolos (hay r disponibles) con los cuales comenzar q
palabras de longitudes `1 , `2 , . . . , `q , por lo tanto ninguna palabra es prefijo
de otra y el codigo es instantaneo.
hip
otesis: dadas las longitudes `1 , `2 , . . . , `q . Si
q
X
1
1
r `j
j=1

(1.27)

entonces existe un c
odigo instant
aneo con palabras de esas longitudes precisamente.
Sean `1 , `2 , . . . , `q+1 longitudes tales que: `1 `2 . . . `q+1 y que cumplen
con:
q+1
X
1
1
r `j
j=1

(1.28)

entonces, dado que `q+1 > 0, si lo excluimos de la suma tenemos:


q
X
1
<1
r `j
j=1

(1.29)

Tenemos ahora un conjunto de longitudes `1 , `2 , . . . , `q que satisfacen la desigualdad de Kraft, de hecho la satisfacen estrictamente, por hip
otesis de
inducci
on existe entonces un codigo instantaneo con esas longitudes. En ese
c
odigo que ahora sabemos que existe habra entonces 1 palabras de longitud
1, 2 palabras de longitud 2 y en general j palabras de longitud j y sabemos
que se satisface:
m +

m1
X

j rmj < rm

(1.30)

j=1

con la desigualdad estricta, dado que se cumpla estrictamente la de Kraft.


El primer sumando es el n
umero de cadenas de longitud m que est
an en el
c
odigo, la suma que le sigue es el n
umero total de cadenas de longitud m

32

Preliminares

que no est
an en el codigo y que no deben estar porque se construyen usando
como prefijo a otras y el lado derecho de la desigualdad es el n
umero total
de posibles cadenas de longitud m.
Dado que la desigualdad anterior es estricta entonces concluimos que falta al
menos una palabra de longitud m que no esta en el codigo pero que podra
estar, porque en la suma contamos a todas las que no pueden estar. As
que incluimos esa palabra, que ya sabemos que existe y que tiene longitud
m y ya tenemos un codigo con q + 1 palabras de longitudes `1 , `2 , . . . , `q+1
instant
aneo.


EJEMPLO 1.21

Si se nos plantea la pregunta existira algun codigo instantaneo binario con cinco
palabras de longitudes 3, 3, 2, 2, 2? Podemos utilizar el teorema de Kraft.
 
 
q
X
1
1
1
=2
+3
= 4/4 = 1
3
`
2
22
rk
k=1

la desigualdad de Kraft se cumple, de hecho se cumple con la igualdad estricta en esta


caso, as que s existe un codigo binario instantaneo con las longitudes dadas.

El hecho de que se cumpla la igualdad estricta significa que no es posible a


nadirle
al c
odigo instant
aneo una palabra mas, cualquier a
nadidura ocasionara que el c
odigo
resultante ya no fuera instantaneo. En casos como el del ejemplo, en los que se cumple
la igualdad estricta, se dice que el codigo en cuestion es maximal.

Definici
on 1.15 Un codigo r-ario instantaneo C es maximal si no esta contenido en otro
c
odigo r-ario instant
aneo de mayor tama
no.
Por supuesto mayor tama
no aqu, significa con mayor n
umero de palabras.

1.5 Anotaciones finales

33

1.5 +Anotaciones finales


Es conveniente recapitular lo visto acerca de los teoremas de McMillan y Kraft.
El teorema de McMillan dice que si un codigo es unvocamente decodificable entonces
cumple con la desigualdad de Kraft, es decir, la desigualdad de Kraft es una condici
on
necesaria para que un codigo sea unvocamente decodificable, pero no es suficiente. De
all que digamos que el teorema nos provee de un mecanismo para probar cuando un
c
odigo no es unvocamente decodificable: si no cumple con algo que es necesario para
serlo, no puede serlo.
El teorema de Kraft por su parte nos dice que si damos un conjunto de longitudes
que cumplan con la desigualdad de Kraft entonces existe un codigo instant
aneo con
palabras de esas longitudes precisamente, y que si nos es dado un codigo instant
aneo
entonces debe cumplir con la desigualdad de Kraft. Pero no dice que si nos es dado un
c
odigo que cumpla con la desigualdad entonces ese codigo es instantaneo, puede no ser
precisamente ese, s
olo sabremos que existe alguno con las mismas longitudes que el que
nos dieron y que s es instantaneo pero no dice nada respecto al que tenemos enfrente,
para saber si ese precisamente es instantaneo habra que verificar que cumpla con la
propiedad de no tener prefijos.
Si estuvieramos en la situacion de poseer un par de codigos con las mismas caractersticas, es decir, el mismo tama
no y las mismas longitudes de palabras, uno de ellos
unvocamente decodificable y el otro instantaneo, por supuesto que preferiramos utilizar
este u
ltimo, si las caractersticas son las mismas, son u
tiles en las mismas circunstancias,
pero el instant
aneo nos ofrece indiscutibles ventajas computacionales.
Dado un c
odigo unvocamente decodificable, si encadenamos los resultados de McMillan y de Kraft, tenemos, por el primero, que este codigo debe satisfacer la desigualdad
de Kraft. Dado este primer resultado, el segundo teorema nos asegura que existe un
c
odigo instant
aneo de las mismas caractersticas, as que realmente para que quedarse
con el unvocamente decodificable si debe haber uno de iguales caractersticas y decodificaci
on m
as simple?

+Ejercicios
1.1 Cual es el n
umero de cadenas en Zn2 con exactamente k n unos? Cu
antas son
n
en Zr ?
1.2 Si en este momento fueran las 13:00 horas en punto, que hora sera dentro de 144
horas?, y dentro de 295?, por que?

34

Preliminares

1.3 Demuestre que un n


umero escrito en notacion decimal es divisible por 3 si y s
olo
si la suma de sus dgitos tambien lo es.
1.4

Z6 es un campo finito? Por que?

1.5

Compruebe que en P5 (Z5 )


x4 3x3 + 2x2 + 4x 1 = x + 3

(mod x2 2x + 3)

1.6 Considerese el conjunto de todos los polinomios de grado menor a 3 con coeficientes
en Z3 . P1 (x) = x2 + 1 es un polinomio irreducible en este conjunto, al igual que
P2 (x) = x2 + x + 2. Sea la raz de P1 (x) y la de P2 (x). Escriba que resulta de elevar
a la potencia {1, 2, . . .}, haga lo mismo para . Excluyendo al cero, que elementos
del campo finito de nueve elementos son generados por y por ?
1.7

Cu
al es el n
umero de posibles prefijos de una palabra de longitud n en base r?

1.8 El c
odigo C = {0, 10, 1101, 1110, 1011, 110110} es unvocamente decodificable?
justifique.
1.9 Puede haber un codigo binario instantaneo de longitudes de palabra: {2, 2, 2, 3, 3},
y uno ternario de longitudes {1, 2, 2, 3, 3}?
1.10

Demuestre que todo codigo instantaneo es unvocamente decodificable.

Codificaci
on
eficiente

2.1 +Arbol
de decodificacion
El hecho de que en los codigos instantaneos, revisados en el captulo anterior, sea
posible leer secuencialmente un mensaje codificado de izquierda a derecha, smbolo a
smbolo e irlo decodificando al vuelo nos hace pensar en algunas cosas. Probablemente
a aquellos versados en la teora de automatas les recuerde una maquina de estados,
conforme leemos smbolos de entrada nuestro estado cambia hasta llegar a uno en el
que se ha terminado de reconocer una palabra de codigo y en ese instante se produce
como smbolo de salida el smbolo del alfabeto de la fuente que le corresponde bajo el
esquema de codificacion usado.
Probablemente a algunos otros les haga pensar en un arbol de decision. Cada vez
que se recibe un smbolo en el alfabeto r-ario del codigo, se desciende desde un nodo
de un
arbol por una de sus r posibles ramas hasta otro nodo. El proceso de descenso
contin
ua hasta que se ha terminado de leer completamente una palabra de c
odigo, en
ese momento el nodo actual del proceso sera una hoja asociada a la palabra de c
odigo
leda y que nos permite determinar el smbolo del alfabeto fuente que es codificado por
ella.
Ambas visiones son igualmente correctas, pero para fines de demostraciones formales
posiblemente sea un poco mas u
til el enfoque de arboles.
Si r es la base del codigo, entonces cada nodo del arbol de decodificaci
on tiene, a lo
35

36

Codificacion eficiente

C
1
A

F
1

A = 111

D = 011

B = 110

E = 010

C = 10

F = 00

0
E

Figura 2.1: Arbol


de decodificacion para el codigo del ejemplo.
m
as, r hijos. Cada arista de salida de un nodo tiene asociada como etiqueta un smbolo
del alfabeto r-ario del codigo, si el smbolo ledo del mensaje codificado es c entonces
recorremos la arista de salida del nodo actual etiquetada c, llegamos as a un nuevo
nodo, hijo del anterior desde el que podemos repetir el proceso leyendo el siguiente
smbolo del mensaje. Evidentemente al iniciar la lectura del mensaje el nodo inicial es
la raz del
arbol r-ario de decodificacion. Cada vez que se lee una palabra completa
se llega a una hoja del arbol y antes de leer el siguiente smbolo se regresa a la raz.
Asociada con cada hoja hay una palabra de codigo y, usando la biyeccion de la funci
on
de codificaci
on, tambien un smbolo del alfabeto fuente.

EJEMPLO 2.1

El c
odigo C = {111, 110, 10, 011, 010, 00} con la funcion de codificacion:
{f (A) = 111, f (B) = 110, f (C) = 10,
f (D) = 011, f (E) = 010, f (F ) = 00}
posee el
arbol de decodificacion mostrado en 2.1.

Asociado pues a todo codigo r-ario instantaneo tenemos un arbol de decodificaci


on
r-ario. Con esto en mente podemos empezar a pensar en cosas interesantes.

37

2.2 Codificaci
on de Shannon-Fano

Que tal si todas las palabras de un codigo instantaneo fueran del mismo tama
no. Si
el n
umero de palabras es q significa que las q hojas del arbol de decodificaci
on asociado
al c
odigo est
an a la misma profundidad en el arbol, para llegar a cualquiera de ellas
desde la raz hay que recorrer tantas aristas como la altura del arbol.
Ahora bien, en un arbol r-ario hay, en el primer nivel abajo de la raz, r nodos, en
el siguiente r2 , r3 en el siguiente y rn en el n-esimo nivel. As que si todas las hojas
est
an en un mismo nivel, resulta que rn = q lo que significa que n = logr (q). Adem
as, si
todas las hojas est
an a la misma profundidad n, entonces las longitudes de las palabras
de c
odigo asociadas a ellas son siempre n. Como se ve la desigualdad de Kraft en este
caso:
 
q
q
q
X
X
X
1
1
1
1
=1
=
=
=
q
rn
q
q
rlogr (q)
k=1

k=1

k=1

bueno, ahora ya sabemos que si eso pasa estamos trabajando con un codigo maximal,
la igualdad se cumple en la desigualdad de Kraft.
El ejercicio que acabamos de hacer no nos proporciona algo novedoso, pero s un
novedoso punto de vista. Si nos topamos con un codigo r-ario instantaneo en el que todas
las palabras sean de la misma longitud y tenga rk palabras, para alguna k, entonces
sabemos que debe ser maximal. Esto es, de hecho, un codigo de bloque o de longitud
fija visto como un caso particular de codigo instantaneo.
En el captulo anterior se presento un ejemplo de codigo maximal de longitud variable
instant
aneo, sirva dicho ejemplo para dejar claro que no todos los codigos maximales
tienen longitud fija y por tanto, sus arboles de decodificacion tampoco tienen por que
tener todas sus hojas al mismo nivel.

2.2 +Codificacion de Shannon-Fano


El c
odigo de Shannon-Fano fue desarrollado independientemente por Claude Shannon, el padre de la teora de la informacion, en Bell Labs y R. M. Fano en el MIT a
finales de la decada de 1940.
Es un c
odigo que busca la representacion eficiente de los datos que codifica. Posee
longitud variable y proporciona codigos mas largos para los smbolos de la fuente menos
probables y m
as cortos para los mas probables. Por supuesto se requiere de conocer
previamente la distribucion de probabilidad de los smbolos del alfabeto de la fuente.
Para obtener el codigo de Shannon-Fano de un alfabeto fuente dadas las probabilidades (o equivalentemente las frecuencias) de cada smbolo en el se procede como
sigue:

38

Codificacion eficiente

1. Se ordena crecientemente1 la lista de todos los smbolos del alfabeto fuente de


acuerdo a su probabilidad.
2. Se selecciona un punto de corte que divida la lista en dos partes. El criterio para
seleccionar el punto de corte es que la suma de las probabilidades de los smbolos
en la sublista de un lado del corte sea lo mas parecida posible a la suma de las
probabilidades en la sublista del otro lado.
3. A cada uno de los smbolos en una de las sublistas se les asocia un cero, a los de
la otra sublista un uno.
4. A cada sublista se le aplica recursivamente el mismo procedimiento descrito en los
dos incisos anteriores.

EJEMPLO 2.2
Sup
ongase que tenemos el alfabeto fuente {A, B, C, D, E, F } con las siguientes frecuencias:
Smb.

Frec.

10

12

18

22

En la figura 2.2 se muestra el alfabeto ordenado y en las primeras tres columnas


la diferencia entre la suma superior y la inferior, la suma inferior y la suma superior,
respectivamente. Cuando la diferencia es menor (10 en el ejemplo) se elije ese como
el punto de corte (se
nalado con una lnea). Para las siguientes iteraciones ya no se
muestran las sumas, s
olo los puntos de corte.

El algoritmo de Shannon-Fano es el 2.1. En el idxini e idxf in son, respectivamente


el ndice inicial y final de la particion a procesar de la lista original, evidentemente la
primera vez que se llama al algoritmo son el ndice inicial y el final de la lista completa.
1

Adoptamos la convenci
on de ordenar crecientemente, en realidad el orden puede ser creciente o
decreciente.

39

2.3 Codificaci
on de Huffman

64
54
34
10
26

70 3 A

0000

67 8 B

0001

62 18 C

10

001

52 30 D

12

01

40 48 E

18

10

22 70 F

22

11

Figura 2.2: Obtencion del codigo de Shannon-Fano para los smbolos del ejemplo.
La funci
on suma obtiene la suma de las frecuencias de los elementos en la lista entre
los ndices que recibe como argumentos. La funcion arbolbin construye un
arbol binario
de un solo nodo (la raz) cuyo contenido es el argumento de la funcion. En la segunda
llamada a arbolbin (lnea 16) el argumento no importa (cualquiersimb). Las funciones
setSubIzq y setSubDer establecen el subarbol izquierdo y derecho de la instancia de
arbol
binario que las llama, en este caso arbol es el identificador de dicha instancia. Hay que
notar que en las lneas 17 y 18 se llama recursivamente al proceso de construcci
on, el if
de la lnea 1 establece la condicion de terminacion de la recursion. Al final el proceso
regresa un
arbol binario que constituye el arbol de decodificacion de Shannon-Fano.
Es importante aclarar que el codigo de Shannon-Fano de un alfabeto dadas sus
frecuencias, no es u
nico. Basta con cambiar todos los ceros por unos, por ejemplo, para
obtener otro esquema de codificacion que, siendo de Shannon-Fano, es diferente del que
se obtuvo primero. Si hay dos smbolos con igual frecuencia basta con intercambiar sus
c
odigos para obtener otra codificacion de Shannon-Fano.

2.3 +Codificacion de Huffman


En 1952 Huffman publico un metodo que, al igual que el de Shannon-Fano, busca
representar los smbolos de un alfabeto fuente de acuerdo con sus frecuencias y tambien
es instant
aneo.
Al igual que en la codificacion de Shannon-Fano se requiere una lista de todos los
smbolos del alfabeto fuente con sus frecuencias. El procedimiento de codificaci
on de

40

Codificacion eficiente

Algoritmo 2.1 Algoritmo de construccion del arbol de decodificacion de Shannon-Fano.


Shannon-Fano(idxini, idxf in, lista)
1 if (idxini = idxf in) then
2
return (arbolbin(lista[idxini]))
3 else
4
idxpart = idxini
5
ssup = suma(lista, idxini, idxpart)
6
sinf = suma(lista, idxpart + 1, idxf in)
7
dif = | ssup sinf |
8
dif ant = dif
9
while (dif ant dif ) do
10
idxpart = idxpart + 1
11
ssup = suma(lista, idxini, idxpart)
12
sinf = suma(lista, idxpart + 1, idxf in)
13
dif ant = dif
14
dif = | ssup sinf |
15
endwhile
16
arbol = arbolbin(cualquiersimb)
17
arbol.setSubIzq ( Shannon-Fano (idxini, idxpart 1, lista))
18
arbol.setSubDer ( Shannon-Fano (idxpart, idxf in, lista))
19
return arbol
20 endif
21 end

41

2.3 Codificaci
on de Huffman

Huffman es el siguiente:
1. Se ordena la lista crecientemente de acuerdo con la frecuencia.
2. Se crea un
arbol con cada elemento de la lista de smbolos del alfabeto fuente.
Evidentemente cada uno de estos arboles esta constituido de un u
nico nodo, la
raz.
3. Seleccionar a los dos smbolos de menor frecuencia (los dos primeros de la lista),
eliminarlos de la lista y unir los arboles asociados a ellos a traves de un nuevo
nodo raz.
4. Introducir un nuevo elemento a la lista, asociado con el arbol recien construido. El
valor del smbolo no es relevante, la frecuencia debe ser la suma de las frecuencias
de los smbolos que se unieron. Al introducir este nuevo elemento a la lista debe
asegurarse que esta permanece ordenada.
5. Regresar al paso 3 hasta que en la lista haya un u
nico elemento; el arbol asociado
a este elemento es el arbol de decodificacion de Huffman.

EJEMPLO 2.3

Sea A = {a, b, c, d, e} el alfabeto de una fuente con las frecuencias siguientes: f (a) =
15, f (b) = 10, f (c) = 12, f (d) = 4 y f (e) = 6. Por conveniencia representaremos
cada elemento en la lista como una pareja ordenada (smbolo, f recuencia). As, la lista
ordenada es:
{(d, 4), (e, 6), (b, 10), (c, 12), (a, 15)}
En el primer paso seleccionaremos, como los dos smbolos menos frecuentes, a la d y
a la e cuyas frecuencias sumadas son 10, as que los arboles (de hecho hojas) asociados
a d y e se juntan en un solo arbol con d como hijo izquierdo y e como derecho, el peso
de este nuevo
arbol es de 10. La nueva lista ordenada es entonces:
{(1 , 10), (b, 10), (c, 12), (a, 15)}
se ha introducido a 1 para denotar al nuevo smbolo, sin importancia, que se asocia
al nuevo nodo.
En el siguiente paso se unen el arbol asociado a 1 y el arbol (de hecho otra vez una
sola hoja) asociado a b. El resultado es un nuevo nodo etiquetado con 2 tal como se
muestra en la figura 2.3. La lista ordenada es:
{(c, 12), (a, 15), (2 , 20)}

42

Codificacion eficiente

0
0

d
4

1
10

20
1

47

1
0

10

12

3
27

a
15

Figura 2.3: El
arbol de decodificacion de Huffman para el codigo del ejemplo. Bajo cada
nodo se ha puesto la suma de las frecuencias del subarbol del que es raz, cada nodo
se ha etiquetado con un smbolo, en el caso de las hojas con un smbolo del alfabeto
fuente, en el caso de los nodos interiores con un smbolo i sin importancia. Las aristas
de salida derechas se han asociado con 1 y las izquierdas con 0.
En el siguiente paso se uniran c ya en un solo arbol cuya raz, etiquetada 3 tiene
un peso de 27. La lista resultante sera:
{(2 , 20), (3 , 27)}
En el u
ltimo paso se unen estos u
nicos dos smbolos para formar el arbol de decodificaci
on que se muestra en la figura 2.3. El peso asociado a la raz es de 20 + 27 = 47.

El algoritmo de Huffman es el 2.2. En el se esta suponiendo que cada elemento de la


lista es en realidad una estructura constituida por un arbol binario, al que denotaremos
ab, y una frecuencia, a la que denotaremos frec. El atributo frec contiene la suma de las
frecuencias de aquellos smbolos que se encuentran en el atributo ab. La funcion (mejor
dicho: metodo, en terminologa orientada a objetos) getMin se encarga de encontrar y
regresar el elemento de la lista con la mnima frecuencia y eliminaMin de eliminarlo;
con vistas al an
alisis que haremos posteriormente, supondremos que el algoritmo recibe
la lista, ordenada crecientemente respecto al atributo frec, en una estructura de datos
optima para llevar a cabo estas dos operaciones de manera optima. Las funciones

setSubIzq y setSubDer establecen al subarbol izquierdo y derecho, respectivamente, de


la instancia de
arbol que las llama, en el caso del algoritmo 2.2, el nombre de la instancia
es arbol. getArbol regresa el atributo ab del elemento que llama a la funcion y setArbol
establece dicho atributo, getFrec y setFrec hacen lo analogo para el atributo frec. getElem
entrega el elemento de la lista indexado por el argumento de la funcion, supondremos
que el ndice inicial es el 0. insertaOrden inserta el elemento que recibe como argumento
en la lista preservando el orden respecto al atributo frec.

2.4 Longitud promedio de un codigo

43

Algoritmo 2.2 Algoritmo de Huffman


Huffman(lista)
1 while (lista.longitud > 1) do
2
elem1 = lista.getMin
3
lista.eliminaMin
4
elem2 = lista.getMin
5
lista.eliminaMin
6
arbol = arbolbin(cualquiersim)
7
arbol.setSubIzq(elem1.getArbol)
8
arbol.setSubDer(elem2.getArbol)
9
elemnuevo.setArbol(arbol)
10
elemnuevo.setFrec(elem1.getFrec + elem2.getFrec)
11
lista.insertaOrden(elemnuevo)
12 endwhile
13 return (lista.getElem(0).getArbol)
14 end

Al igual que en el caso de la codificacion de Shannon-Fano, el codigo de Huffman


obtenido para un alfabeto dadas sus frecuencias, no es u
nico, basta cambiar la convenci
on derecha = 1, izquierda = 0 por la complementaria para tener otra codificaci
on de
Huffman.
Calculemos ahora la complejidad del algoritmo de Huffman mostrado en el algoritmo
2.2 y que suponemos que recibe la lista de smbolos ya ordenada en una estructura de
datos
optima para hacer b
usquedas, un heap por ejemplo. Si denotamos con n el n
umero
de smbolos en el alfabeto fuente, en cada iteracion solamente tenemos que buscar a los
dos elementos de menor frecuencia, e insertar al smbolo resultante de unirlos, esto
nos tomara O(3 log(n)) = O(log(n)) operaciones de comparacion. Esto lo hacemos
en cada iteraci
on y hay n iteraciones del ciclo, as que en sntesis la complejidad del
algoritmo de Huffman es O(n log(n)).

2.4 +Longitud promedio de un codigo


Hemos presentado ya dos esquemas de codificacion diferentes para representar datos
eficientemente. Pero, como evaluamos que tan bueno es un esquema?, habr
a alg
un
esquema mejor que otros? Para resolver estas preguntas debemos inventar una metrica
que nos proporcione un criterio para decidir el grado de eficiencia de un c
odigo.
La informaci
on que poseemos es: la frecuencia de aparicion de cada smbolo del

44

Codificacion eficiente

alfabeto fuente y el c
odigo que le es asociado. Con base en las frecuencias podemos
estimar la probabilidad de aparicion de cada smbolo. Mientras mayor sea la cantidad
de datos producidos por la fuente que han sido observados y considerados para contar
las frecuencias, mayor sera nuestra confianza de que esas frecuencias nos permiten estimar la distribuci
on de probabilidades de los smbolos. Si en total hemos observado N
smbolos producidos por una fuente y de ellos Fi han sido el smbolo i-esimo entonces
nuestro estimador para la probabilidad de aparicion de i-esimo es el cociente Fi /N al
que denotaremos pi . Debemos definir esto formalmente.

Definici
on 2.1 Una fuente de informacion es una pareja ordenada S = (S, P ) donde S =
{s1 , s2 , . . . , sq } es el alfabeto de la fuente y P es una funcion de distribucion de probabilidad P : S 7 [0, 1] que asocia a cada smbolo si del alfabeto fuente una probabilidad
P (si ) = pi .
Ahora podemos considerar la variable aleatoria longitud del c
odigo asociado al smbolo
producido por la fuente. Cada smbolo posee un codigo y ese codigo una cierta longitud,
y ahora podemos calcular el valor esperado de la variable aleatoria mencionada como
se define a continuaci
on.

Definici
on 2.2 Sea S = (S, P ) una fuente de informacion y sea (C, f ) un esquema de codificaci
on para S = {s1 , s2 , . . . , sq }. La longitud promedio de palabra de c
odigo de (C, f )
es:
q
X
lon(C, f ) =
[P (si ) lon (f (si ))]
(2.1)
i=1

EJEMPLO 2.4
1. Sea S = {a, b, c, d} con la siguiente distribucion: P (a) = 2/17, P (b) = 2/17,
P (c) = 8/17, P (d) = 5/17 (por supuesto la suma de las probabilidades es 1,
requisito de toda distribucion de probabilidades).
En el esquema (C1 , f1 ), donde C1 es un codigo binario, definido como sigue:
f1 (a) = 11, f1 (b) = 0, f1 (c) = 100, f1 (d) = 1010. La longitud promedio de
palabra es:
2
2
8
5
50
lon(C1 , f1 ) = 2
+1
+3
+4
=
17
17
17
17
17
En el esquema (C2 , f2 ), donde C2 es tambien un codigo binario, definido como
sigue: f2 (a) = 01010, f2 (b) = 00, f2 (c) = 10, f2 (d) = 11. La longitud promedio
de palabra es:
2
2
8
5
40
lon(C2 , f2 ) = 5
+2
+2
+2
=
17
17
17
17
17

2.5 La eficiencia del esquema de codificacion de Huffman

45

Comparando el esquema (C1 , f1 ) tiene una longitud promedio mayor que (C2 , f2 ),
as que si codificaramos un mensaje cualquiera de la fuente, resultara probablemente m
as corto si lo hicieramos usando el segundo esquema de codificaci
on que
si lo hicieramos con el primero. Hay que notar algo importante. Si codific
aramos,
por ejemplo, el mensaje aa . . . a resultara mejor usar el esquema 1, pero, dada
la distribuci
on de probabilidad de la fuente, este no es un mensaje representativo
de la fuente. Nuestra afirmacion de cual esquema es mejor, mas eficiente, se basa
en la distribucion de probabilidades, buscamos como codificar de la manera m
as
eficiente posible aquellos mensajes que son mas representativos de lo que suele
producir la fuente.
2. Sea S = {A, B, C, D, E} el alfabeto fuente y {15, 7, 6, 6, 5} las frecuencias respectivas. Usaremos codigos binarios para codificar el alfabeto de esta fuente.
Usando el esquema de Shannon-Fano obtenemos: SF (A) = 11,
SF (B) = 10, SF (C) = 001, SF (D) = 01, SF (E) = 000. Lo que nos da como
resultado: lon(SF ) = 2.28
Usando el esquema de Huffman: Huf f (A) = 0, Huf f (B) = 111, Huf f (C) =
101, Huf f (D) = 110, Huf f (E) = 100. Lo que nos da como resultado: lon(Huf f ) =
2.23
Resulta que el codigo de Huffman es ligeramente mejor que el de Shannon-Fano.
Esto siempre es verdadero como demostraremos mas adelante. Sin embargo, en
general, la diferencia entre las longitudes promedio de ambas codificaciones suele
ser peque
na.

2.5 +La eficiencia del esquema de codificacion de Huffman


Hay que notar una caracterstica del esquema de Huffman dada por su construcci
on:
los smbolos del alfabeto S, est
an asociados biyectivamente a las hojas del
arbol de
Huffman. No hay smbolo sin hoja ni hoja sin smbolo.
Demostraremos que no puede haber un esquema de codificacion instant
aneo m
as
eficiente que los de Huffman. Para ello debemos primero demostrar un par de lemas
que nos ser
an u
tiles.

Lema 2.2.1 Sea (C, f ) un esquema de codificacion instantaneo para una fuente S = (S, P ).
Sean c1 , c2 , . . . , cq las palabras de C asociadas a los smbolos con probabilidades: p1
p2 . . . pq y longitudes: m1 , m2 , . . . , mq respectivamente. Si el esquema (C, f ) tiene
longitud promedio de palabra mnima entonces m1 m2 . . . mq

46

Codificacion eficiente

Demostraci
on:
Por reducci
on al absurdo.
Supongamos que (C, f ) es un esquema instantaneo de longitud promedio mnima y
que p1 p2 . . . pq pero no es cierto que m1 m2 . . . mq . Es decir, hay al
menos una pareja (mi , pi ) tal que mi > mi+1 y pi pi+1 .
La longitud promedio en este caso es:
lon(C, f ) =

i1
X

pj mj + mi pi + mi+1 pi+1 +

j=1

q
X

pj mj

j=i+2

Definamos ahora un nuevo esquema de codificacion (C, f 0 ), identico a (C, f ) salvo


que intercambia ci con ci+1 . En este caso:
lon(C, f 0 ) =

i1
X

pj mj + mi+1 pi + mi pi+1 +

j=1

q
X

pj mj

j=i+2

Si calculamos la diferencia:
lon(C, f ) lon(C, f 0 ) = mi pi + mi+1 pi+1 mi+1 pi mi pi+1
= pi (mi mi+1 ) + pi+1 (mi+1 mi )
= (pi pi+1 )(mi mi+1 )
Dado que mi > mi+1 y pi pi+1 entonces:
lon(C, f ) lon(C, f 0 ) > 0
de donde lon(C, f ) lon(C, f 0 ) por lo que (C, f ) no es un esquema de longitud promedio
mnima, lo que contradice nuestra suposicion.


Lema 2.2.2 Sea (C, f ) un esquema de codificacion instantaneo para una fuente S = (S, P ).
Sean c1 , c2 , . . . , cq las palabras de C asociadas a los smbolos con probabilidades: p1 , p2 , . . . , pq
y longitudes: m1 , m2 , . . . , mq respectivamente. Si el esquema (C, f ) tiene longitud promedio de palabra mnima entonces mq1 = mq y las palabras cq1 y cq difieren s
olo en
su u
ltimo bit.
Demostraci
on:
Por reducci
on al absurdo.
Sup
ongase que el esquema (C, f ) posee longitud promedio mnima de palabra con
C = {c1 , c2 , . . . , cq1 , cq } y f (s1 ) = c1 , f (s2 ) = c2 , . . . f (sq1 ) = cq1 , f (sq ) = cq
Podemos suponer que p1 p2 . . . pq y, por el lema anterior sabemos que entonces
las longitudes est
an ordenadas: m1 m2 . . . mq1 mq .

2.5 La eficiencia del esquema de codificacion de Huffman

47

Sup
ongase ademas que mq1 < mq . Consideremos la palabra cq en C y eliminemos
su u
ltimo bit, llamemos c0q a esta palabra cuya longitud es necesariamente mq1 .
Como C es instantaneo no existe ninguna palabra en C que sea igual a c0q porque
de haberla sera prefijo de cq y el codigo no sera instantaneo. Ademas c0q es demasiado
larga para ser prefijo de alguna otra palabra en C. As que C 0 = {c1 , c2 , . . . , cq1 , c0q }
sigue siendo instant
aneo.
Sea f 0 la funci
on de codificacion que asigna
f 0 (s1 ) = c1 , f 0 (s2 ) = c2 , . . . f 0 (sq1 ) = cq1 , f 0 (sq ) = c0q
El esquema (C 0 , f 0 ) es instantaneo y posee una longitud promedio de palabra menor
que (C, f ) dado que una de sus palabras, c0q , tiene una longitud menor. As que (C, f )
no tiene longitud promedio de palabra mnima, lo que contradice nuestra suposici
on
inicial.
Ahora bien cq1 y cq son palabras de igual longitud y deben diferir en al menos
uno de sus bits. Si ese bit no fuera el u
ltimo de la palabra entonces podramos eliminar
el u
ltimo bit de ambas palabras y se mantendran diferentes. Obtendramos entonces
un c
odigo con dos palabras mas cortas y por tanto una longitud promedio de palabra
menor.

Ahora tenemos todo lo necesario para demostrar el teorema siguiente.

Teorema 2.3 Sea S una fuente de informacion. Todos los esquemas de codificacion de Huffman
para S son instant
aneos y tienen la longitud promedio de palabra mnima de entre todos
los esquemas instantaneos.
Demostraci
on:
Para demostrar que el esquema es instantaneo basta hacer notar que, por construcci
on
del
arbol de Huffman, no hay smbolo del alfabeto fuente que no tenga asociada una
hoja en el
arbol de Huffman y no hay hoja del arbol que no tenga asociado un smbolo de
dicho alfabeto. Esto significa que siempre que nos encontramos un smbolo del alfabeto
fuente en el
arbol es porque hemos terminado en el un camino que desciende desde la
raz y ya no podemos continuar mas abajo en el arbol. No hay ning
un camino que pase
por un nodo del
arbol asociado a un smbolo del alfabeto fuente y luego continue hasta
llegar a otro. Como los codigos estan determinados por las aristas recorridas hasta llegar
al nodo asociado al smbolo del alfabeto fuente, se concluye que no hay prefijos en el
c
odigo y por lo tanto el codigo es instantaneo.
Para mostrar que la longitud promedio de palabra es mnima procederemos por
inducci
on sobre q, el n
umero de palabras en el codigo.

48

Codificacion eficiente

1. Nuestro caso base es q = 2.


Cuando se tienen solo dos smbolos, como estos deben ser hojas de un arbol binario
entonces el
arbol esta hecho de tres nodos, uno que constituye la raz y dos hijos
pendientes de el asociados a los dos smbolos del alfabeto de la fuente.
En este caso la longitud de palabra promedio es uno, que por supuesto, es menor
o igual que cualquier otra.
2. hip
otesis: suponemos que para cualquier fuente con alfabeto de q 1 smbolos un
esquema de codificaci
on de Huffman tiene longitud promedio mnima.
Sea (H, f ) un esquema de codificacion de Huffman para una fuente S = (S, P )
con S = {s1 , s2 , . . . , sq1 , sq } y P = {P (s1 ) = p1 , P (s2 ) = p2 , . . . P (sq1 ) =
pq1 , P (sq ) = pq }. Sean
{h1 , h2 , . . . , hq1 , hq , }
y
{`1 , `2 , . . . , `q1 , `q }
las palabras de c
odigo y sus respectivas longitudes en el esquema de Huffman
(H, f ). Establezcamos ademas que f (si ) = hi . Sin perdida de generalidad podemos suponer que: p1 p2 . . . pq1 pq .
Sea (C, g) un esquema de codificacion instantaneo de longitud promedio mnima
para la misma fuente S = (S, P ). Sean
{c1 , c2 , . . . , cq1 , cq , }
y
{m1 , m2 , . . . , mq1 , mq }
las palabras de c
odigo y sus respectivas longitudes en el esquema (C, g). An
alogamente
g(si ) = ci .
Por el lema 2.1 sabemos que: m1 m2 . . . mq1 mq y por el lema 2.2
sabemos que, de hecho: mq1 = mq .
Sea S 0 la fuente con el mismo alfabeto salvo que se han reemplazado los smbolos
sq1 y sq por un u
nico smbolo s con probabilidad pq + pq1 . Este nuevo alfabeto,
0
S , tiene q 1 smbolos.
En el primer paso del algoritmo de Huffman sobre S se unan justamente sq y sq1
en un nuevo smbolo de probabilidad pq + pq1 . Luego de ese paso los arboles de
Huffman para S y para S 0 son iguales, en el de S 0 ese peque
no arbol de tres nodos
es reemplazado por un solo nodo asociado con el smbolo que hemos llamado s.
Si lon(H, f ) denota la longitud de palabra promedio para la fuente original S en
el esquema de Huffman y lon(H 0 , f 0 ) denota la longitud de palabra promedio para

49

2.5 La eficiencia del esquema de codificacion de Huffman

la fuente S 0 en el esquema de Huffman que acabamos de construir, entonces:


lon(H 0 , f 0 ) = lon(H, f ) (`q1 pq1 + `q pq )
+(`q1 1)(pq1 + pq )

(2.2)

Como los esquemas de Huffman son instantaneos, por el lema 2.2: `q = `q1 as
que:
lon(H 0 , f 0 ) = lon(H, f ) (pq1 + pq )

(2.3)

Ahora consideremos el esquema instantaneo (C, g) de longitud promedio de palabra mnima, las u
ltimas dos palabras de este son: cq = x1 x2 . . . xu 0 y cq1 =
x1 x2 . . . xu 1, dado que es instantaneo
c = x1 x2 . . . xu no es una palabra del codigo y podemos usarla entonces como palabra para el smbolo s en un esquema instantaneo (C 0 , g 0 ) para S 0 tal que g 0 (si ) = ci
para toda i q 1 y g 0 (s) = c.
Entonces:
lon(C 0 , g 0 ) = lon(C, g) (mq1 pq1 + mq pq )
+(mq1 1)(pq1 + pq )
= lon(C, g) (pq1 + pq )

(2.4)

por hip
otesis de induccion, dado que H 0 y C 0 tienen q 1 palabras:
lon(H 0 , f 0 ) lon(C 0 , g 0 )
As que, sintetizando las expresiones 2.3 y 2.4:
lon(H, f ) lon(C, g)

Este teorema es importante, nos dice que no importa cual esquema de codificacion
instant
aneo escojamos, siempre sera, a lo mas, tan bueno como un esquema de Huffman;
no puede haber mejor.
Curiosamente en [6] podemos encontrar el siguiente ejemplo:

50

Codificacion eficiente

Smb.

Prob.

Shannon-Fano

Huffman

x1

0.10

001

101

x2

0.05

0000

111

x3

0.20

10

010

x4

0.15

011

011

x5

0.15

010

100

x6

0.25

11

00

x7

0.10

0001

110

Tabla 2.1: C
odigos de Shannon-Fano y de Huffman mostrados en la tabla 2.19, pag.
110 de [6].

EJEMPLO 2.5

En [6] se obtiene un codigo de Shannon-Fano y uno de Huffman para una fuente.


Tanto los c
odigos obtenidos como la fuente misma se muestran aqu en la tabla 2.1.
Con estos c
odigos se obtienen las siguientes longitudes promedio de palabra (pag.
109 [6]):
lon(Shannon F ano) = 2.7
lon(Huf f man) = 2.75

(2.5)
(2.6)

La longitud promedio del codigo de Huffman es mayor que la del codigo de ShannonFano! Que ocurre? acabamos de demostrar que esto no puede ser.
En efecto algo est
a mal. Ambos promedios estan bien calculados, no es un error
numerico. El c
odigo de Shannon-Fano esta bien construido, as que realmente la longitud
del esquema de Shannon-Fano es 2.7. Pero el codigo de Huffman no esta bien construido.
El autor del libro cometio un error al pegar dos nodos en el paso 3 del proceso de
construcci
on del
arbol, uno de los smbolos que se pegan no tiene probabilidad mnima
de entre los que quedaban en la lista de disponibles. As que el codigo en la cuarta
columna de la tabla 2.1, que aparece en la tabla 2.19 de [6], no es un codigo de Huffman
para la fuente usada como ejemplo. Un codigo de Huffman real para esa fuente aparece
en la tabla 2.2, n
otese que en este caso la longitud de palabra promedio es:
lon(H) = 2.7

2.5 La eficiencia del esquema de codificacion de Huffman

Smb.

Prob.

x1

0.10

1111

x2

0.05

1110

x3

0.20

00

x4

0.15

011

x5

0.15

110

x6

0.25

10

x7

0.10

010

51

Tabla 2.2: C
odigos de Huffman correcto para la fuente de la tabla 2.1. La longitud
promedio de palabra es 2.7, igual a la de Shannon-Fano.

que coincide con la de Shannon-Fano y constituye el resultado esperado luego de lo


demostrado en el teorema 2.3.
No obstante el error operativo, el autor de [6] justifica el resultado cometiendo un
error a
un peor ([6], p. 110): Aunque el codigo de Shannon-Fano es mas eficiente, dado
que su longitud promedio es menor a la del codigo de Huffman, el lector debe notar que
no necesariamente es siempre mas eficiente.2

Although the Shannon-Fano code is more efficient since its average code length is less than that of
the Huffman code, the reader should note that it is not necessarily always more efficient.

52

Codificacion eficiente

+Ejercicios
2.1 Obtenga unos c
odigos binarios de Huffman y de Shannon-Fano para el alfabeto
que se muestra. Calcule la longitud promedio de palabra en cada caso.
Smb.
a
b
c
d
e
2.2

Frec.
35
17
17
16
15

Haga lo mismo que en ejercicio anterior con el siguiente alfabeto.


Smb.
a
b
c
d
e
f
g
h

Frec.
8
7
6
5
5
4
3
2

2.3 Obtenga un c
odigo de Huffman para un alfabeto de 8 smbolos, todos con probabilidad 1/8. Hay aunguna diferencia entre la eficiencia de este codigo y el c
odigo de
bloque mnimo que se podra usar? Cual es la longitud promedio de palabra en ambos
casos?
2.4 Cu
ales cree que sean las condiciones para que un arbol de Huffman se vea como el
de la figura?, cu
ales cree que sean las necesarias para que sea un arbol binario completo
maximal?

EJERCICIOS

53

2.5 Un programa de compresion y descompresion de archivos, basado en la codificaci


on de Huffman o de Shannon-Fano, debe garantizar que tanto el compresor como el
descompresor construyan el mismo arbol de decodificacion. Para lograrlo deben poseer
la misma tabla de frecuencias (modelo estadstico de orden 1) de los datos. Que implicaciones tiene esto en la medida de la eficiencia de la compresion?, investigue que
mecanismos existen para evitar esto.
2.6

Que se requiere para garantizar la unicidad del codigo de Huffman?

2.7 Formule un algoritmo de codificacion de Huffman para un alfabeto de c


odigo rario. Cu
antos nodos deben agruparse en el primer paso para garantizar que en el
u
ltimo puedan agruparse r?
2.8 (Programaci
on) Elabore un programa que comprima y descomprima archivos de
cualquier tipo usando codigos de Huffman. El formato del archivo comprimido debe
contener:
La tabla de frecuencias de cada uno de los posibles valores de byte.
El tama
no original del archivo, o alternativamente, el n
umero de bits usados del
u
ltimo byte del archivo comprimido; esto es necesario para que el programa de
descompresi
on sepa donde detenerse.
El nombre que posea el archivo original.

Informaci
on
y entropa

En el captulo pasado vimos que es posible representar de manera breve una cierta
cantidad de datos si sabemos que tan probable es que aparezca cada uno de los smbolos
posibles que aparecen en los datos. Para lograrlo representabamos con palabras m
as
largas a los smbolos menos probables y con palabras mas cortas a los m
as probables.
En este captulo nos abocaremos a determinar hasta donde podemos llegar, que tan
breve puede ser la representacion y para ello requeriremos de un par de conceptos
fundamentales: cantidad de informacion y entropa de una fuente.

3.1 +Cantidad de informacion


Seguramente todos tenemos una vaga idea intuitiva de lo que es cantidad de informaci
on. En nuestro contexto especfico, si una palabra de codigo es muy larga intuimos
que tiene mucha informacion y si es corta tiene poca informacion. Como hemos
dicho que las palabras largas estan asociadas a smbolos poco probables entonces lo que
estamos diciendo es que los smbolos menos probables son los que tienen m
as informaci
on y los m
as probables tienen menos. En este sentido la cantidad de informaci
on es
algo as como una medida de la sorpresa que nos causa ver un smbolo cuando aparece
producido por una fuente, a mayor sorpresa mayor informacion.
55

56

Informacion

y entropa

Una manera m
as sencilla de llegar al concepto de informacion y en la que tambien
podemos apelar a nuestra idea intuitiva es esta: Supongamos que un amigo acaba de
comprar una mascota y debemos adivinar que animal compro haciendole preguntas cuya
respuesta s
olo pueda ser un s o un no. Hay muchos animales probables, pero unos
son m
as comunes como mascotas que otros. Generalmente las personas preferimos a los
mamferos, son m
as c
alidos e inteligentes, mas proximos a nosotros. As que podramos
comenzar preguntando es un mamfero? Si contesta que s, podemos preguntar ahora
si es de m
as de 20 centmetros de longitud, si la respuesta es s entonces podemos
preguntar ya directamente si es un perro, si la respuesta a esta u
ltima pregunta es no,
podemos preguntar si se trata de un gato; pero si la respuesta respecto al tama
no es
no entonces estamos en problemas: muy probablemente escogio alg
un roedor y hay
muchas posibilidades: hamster, raton, cuyo, huron, conejo, tendremos que hacer varias
preguntas para determinar cual de ellos es. Si la respuesta a es un mamfero? fue
no, entonces tambien estamos en problemas puede ser un reptil, un anfibio, un pez, un
ar
acnido, un ave y dentro de cada una de estas categoras hay muchas posibilidades,
como podr
a percatarse quien visite una tienda de mascotas y pueda apreciar la amplia
gama de ex
oticos ejemplares que algunas pocas personas gustan de tener en casa. Esa es
la clave del problema, en general solo algunas pocas personas eligen como mascota una
iguana o una tar
antula y casi nadie tendra un piton albino de Madagascar. Si nuestro
amigo tiene gustos extra
nos tendremos que hacerle mas preguntas, tantas m
as cuanto
m
as extra
na sea su mascota, necesitamos que nos de mucha informacion, que responda
muchas preguntas, si eligio un dragon de Komodo y solo dos o tres si compro un pastor
alem
an. Para determinar las cosas mas frecuentes se necesita menos informaci
on que
para determinar las m
as raras.
Dijimos que en el juego de adivinanza nuestro amigo solo poda contestar s o
no a nuestras preguntas, el proceso adivinatorio se puede ver entonces como un
arbol
binario de decisi
on, cada vez que se responde una pregunta elegimos una de dos posibles
rutas para formular la siguiente. Este arbol, por cierto, es analogo a nuestros arboles de
decodificaci
on del captulo pasado para codigos binarios. En las hojas del arbol est
an
las posibles respuestas, tanto mas profundas cuanto mas preguntas haya que hacer para
llegar a ellas. Esto nos hace pensar en que es posible medir la cantidad de informaci
on
necesaria para determinar la respuesta en bits: cuantos s (1) y no (0) se requieren
para llegar desde la raz a una hoja. Podemos tambien pensar en definir una funci
on
que, dada una hoja o posible respuesta, nos diga cuantas preguntas hay que hacer para
determinarla.
Ahora bien, si nuestro amigo compro una mascota para el y otra para su novia y
queremos adivinar ambas, debemos hacer todas las preguntas para determinar una de
ellas y luego volver a empezar para determinar la otra. El saber que compr
o para el
no nos ayuda, en general, a saber que compro para su novia. As que la cantidad de
preguntas hechas en total es la suma de las hechas para determinar su mascota y las
hechas para determinar la de su novia.
Es tiempo de ponernos formales. Queremos una funcion I que nos permita medir la

3.1 Cantidad de informacion

57

cantidad de informacion de cada smbolo (s) de un alfabeto fuente dependiendo de su


probabilidad (p). Esta funcion debe cumplir con los siguientes requisitos:
I(p) 0 para cualquier smbolo s del alfabeto fuente con probabilidad p.
I es continua. Queremos que la cantidad de informacion de smbolos cuya probabilidad es muy similar sea tambien muy similar.
I(pi pj ) = I(pi )+I(pj ). La cantidad de informacion que se requiere para determinar
que han ocurrido los smbolos de probabilidad pi y pj (que son producidos independientemente) es la necesaria para determinar que ha ocurrido pi mas la necesaria
para determinar que ha ocurrido pj , lo que decamos para adivinar la mascota
de nuestro amigo y la de su novia. Si la produccion de un smbolo por parte de
una fuente es un evento independiente, entonces la probabilidad de que ocurra si
(que es producido con probabilidad pi ) y luego ocurra sj (que es producido con
probabilidad pj ), es el producto de sus probabilidades pi pj .
Llama la atenci
on que la funcion de informacion transforme un producto en una
suma. Eso s
olo lo hace la funcion logaritmo, que ademas resulta ser continua. Parece
un buen candidato, analicemos: si un smbolo es seguro, si siempre es producido por
la fuente y ning
un otro es producido, ese smbolo tiene probabilidad 1, no nos produce
sorpresa alguna verlo aparecer, as que no se requiere nada de informacion para determinarlo. Si nuestro amigo nos informa de antemano que compro un perro no hay que
preguntar nada. As que la cantidad de informacion asociada a la probabilidad 1 es
cero. En cambio si un smbolo es muy poco probable tiene mucha informaci
on, tanta
m
as cuanto m
as cercana a cero sea su probabilidad. Queremos una funcion como la que
se muestra en la figura 3.1.

Definici
on 3.1 La cantidad de informacion I(p) obtenida de un smbolo fuente s con probabilidad p > 0, medida en bits de informacion, es:
 
1
I(p) = log2
p
Las unidades de medida son bits de informacion, de all la base (2) del logaritmo.
Esto tiene que ver con las dos posibles respuestas a las preguntas que mencionamos
arriba (s o no, 1 o 0). La base es arbitraria y de hecho no tiene por que ser un valor
entero, si usamos e por ejemplo estaremos midiendola en nepers de informaci
on, dado
que la base de los logaritmos neperianos o naturales es justamente e.
De hecho, si en alg
un momento requerimos expresar la cantidad de informaci
on en
base b y s
olo poseemos el dato en base r podemos hacerlo traduciendo la expresi
on del
logaritmo. Recordemos que un n
umero w es w = logb (x) si y solo si bw = x de donde:
w logr (b) = logr (x) lo que significa que:
w=

logr (x)
= logb (x)
logr (b)

(3.1)

58

Informacion

y entropa

Figura 3.1: Aspecto que debe exhibir la funcion I (cantidad de informacion) en funci
on
de la probabilidad p (eje de las abscisas).

EJEMPLO 3.1
En una imagen de 1024 768 256 hay 256 posibilidades en cada uno de los 1024 768
pixeles. 256 = 28 as que el n
umero de posibles imagenes es: N = 2(8)(1024)(768) =
26,291,456 . Si cada imagen es igualmente probable: p = 1/N . Entonces la cantidad de
informaci
on en una imagen es:
I(p) = 6, 291, 456 bits

3.2 +Entropa de informacion


Si hora pensamos en todos los posibles animales de la tienda de mascotas y en
la cantidad de preguntas de respuesta binaria que hay que hacer para determinar cada
animal nos encontraremos con que la variabilidad es enorme. Desde dos o tres preguntas

59

3.2 Entropa de informacion

para determinar a un perro hasta mas de una decena para determinar un reptil extra
no.
Pero podemos hacer estadstica y obtener una vision general del problema de determinar
una mascota. Podemos obtener una medida que nos indique cuanta informaci
on se
requiere en promedio para adivinar.

Definici
on 3.2 Sea S = (S, P ) una fuente de informacion con distribucion de probabilidad
P = {p1 , p2 , . . . , pq }. La entropa de informaci
on de S es el valor esperado de la cantidad
de informaci
on de los smbolos de S:
 
q
q 
X
X
1
pi log2
=
[pi log2 (pi )]
H(S) =
pi
i=1

i=1

Con la convenci
on de que s pi = 0 entonces pi log2 (1/pi ) = 0.

EJEMPLO 3.2
1. Sea S una fuente con alfabeto S = {s1 , s2 , . . . , sq } donde cada smbolo es equiprobable, es decir pi = 1/q. En este caso la entropa es:
q

1X
log2 (q) = log2 (q)
H(S) =
q
i=1

2. Sea S una fuente con alfabeto S = {s1 , s2 , . . . , sq } donde p1 = 1 y pi = 0 para


toda i {2, . . . , q}. En este caso la entropa es:
 
1
H(S) = p1 log2
=0
p1

En los ejemplos presentamos los dos casos extremos. En el primero tenemos una
fuente totalmente incierta, no podemos apostar por ning
un smbolo, todos pueden aparecer con igual probabilidad. La fuente es totalmente aleatoria. Es este caso la entropa
es m
axima.
En el segundo ejemplo tenemos una fuente que solo produce un smbolo; salvo s1 ,
el resto del alfabeto, para todo fin practico, es como si no existiera. En todo momento
sabemos con certeza que es lo que va a producir la fuente. En este caso la entropa es
mnima.
Con estos dos ejemplos en mente podemos observar la analoga que existe entre
el concepto de entropa en la teora de la informacion y el concepto hom
onimo en
fsica, ambos son una medida del desorden, de la desorganizacion de un sistema. En

60

Informacion

y entropa

un sistema de partculas altamente desorganizado, con todas las partculas moviendose


aleatoriamente a distintas velocidades y en distintas direcciones la entropa es alta. En
una fuente que produce smbolos aleatoriamente, sin ninguna estructura, la entropa de
informaci
on es alta.

3.3 +Propiedades de la entropa


Recordemos de nuestros cursos de calculo que, para x 0: xe ex de donde:
x ex /e = ex1 . Finalmente:
ln(x) x 1
De esto y la expresi
on 3.1 tenemos:
log2 (x)

x1
ln(2)

(3.2)

la igualdad s
olo ocurre cuando x = 1.
Con esto en mente podemos demostrar el siguiente lema

Lema 3.3.1 Sea P = {p1 , p2 , . . . , pq } una distribucion de probabilidad. Si R = {r1 , r2 , . . . , rq }


es un conjunto de n
umeros tales que:
1. 0 ri 1 para toda i.
q
X

2.

ri 1

(3.3)

i=1

entonces

q
X


pi log2

i=1

1
pi

q
X
i=1

 
1
pi log2
ri

donde la igualdad s
olo se cumple si y solo si pi = ri para toda i.
Demostraci
on:
Por la expresi
on 3.2 tenemos que:
q
X
i=1


pi log2

ri
pi

q
X
i=1

pi

ri
pi

ln(2)
q

1 X
pi
ln(2)
i=1

ri
1
pi

61

3.3 Propiedades de la entropa


q

1 X
(ri pi )
ln(2)

1
ln(2)

1
ln(2)

i=1
q
X

ri

q
X

i=1

i=1

q
X

!
pi

ri 1

i=1

Por la expresi
on 3.3, que es parte de nuestra hipotesis:
!
q
X
1
ri 1 0
ln(2)
i=1

as que:
q
X


pi log2

i=1

ri
pi


0

(3.4)

Pero:

log2

ri
pi


= log2 (ri ) log2 (pi )
 
 
1
1
= log2
+ log2
ri
pi

as que la expresi
on 3.4 la podemos reescribir como:
 
  X
q
q
X
1
1
pi log2

pi log2
0
pi
ri
i=1

de donde finalmente:

(3.5)

i=1

q
X
i=1


pi log2

1
pi

q
X
i=1

 
1
pi log2
ri

la igualdad ocurre si y solo si ri /pi = 1 lo que significa que ri = pi .



Ahora estamos en condiciones de probar formalmente los extremos de la entropa
que ya presentamos antes.

Teorema 3.2 Para una fuente S = (S, P ) en la que el alfabeto S posee q smbolos, la entropa
H(S) satisface:
0 H(S) log2 (q)

62

Informacion

y entropa

Demostraci
on:
Sea P = {p1 , p2 , . . . , pq } la distribucion de probabilidades de una fuente S y sea R =
{1/q, 1/q, . . . , 1/q} la distribucion uniforme para q smbolos.
Aplicando el lema anterior a P y R obtenemos:
 
q
X
1
H(S) =
pi log2
pi
i=1


q
X
1

pi log2
1/q
i=1

q
X

pi log2 (q)

i=1

= log2 (q)

q
X

pi

i=1

= log2 (q)
As que H(S) log2 (q) y la igualdad ocurre cuando pi = 1/q para toda i.

El teorema confirma nuestra observacion de que cuando la distribucion de los smbolos
de una fuente es uniforme la entropa es maxima. Por ejemplo, si una fuente es binaria,
es decir, s
olo puede producir dos smbolos, digamos 0 o 1, con probabilidad p y 1 p
respectivamente, entonces el comportamiento de la entropa en funcion de p es el que se
muestra en la figura 3.2. En este caso la entropa es:
 


1
1
H(p) = p log2
+ (1 p) log2
(3.6)
p
1p
Recordemos que si u es una funcion de x entonces:

De donde:

d log(u)
1 du
=
dx
u dx

 
d
1
1
log2
= p p2 =
dx
p
p

adem
as:




d
1
1
log2
= (1 p) (1 p)2 =
dx
1p
1p
As que en nuestro caso, derivando 3.6 obtenemos:
 


 


1
1
1
1
1
1
0
H (p) = p +log2
+(1p)
log2
= log2
log2
(3.7)
p
p
1p
1p
p
1p
claramente la derivada es cero cuando p = 1 p = 1/2, notese ademas que tiende a
infinito cuando p se acerca a cero o cuando se acerca a uno, lo que confirma el aspecto
exhibido en la figura 3.2.

3.4 Extensiones de una fuente

63

Figura 3.2: Aspecto de la entropa de una fuente binaria (con alfabeto S = {0, 1}) en
la que P (0) = p y P (1) = 1 p. En el eje de las abscisas se ha puesto la variable p.

3.4 +Extensiones de una fuente


Supongamos que tenemos una fuente S = (S, P ) donde S = a, b y P (a) = 0.8,
P (b) = 0.2. El esquema de codificacion de Huffman para esta fuente sera: f (a) = 0,
f (b) = 1, dado que solo hay dos smbolos. La longitud promedio de este c
odigo es,
evidentemente, 1.
Que tal si ahora nos fijamos no en los smbolos que produce la fuente, sino en todas
las parejas de smbolos que puede producir: aa, ab, ba y bb. Con que probabilidad es
producida cada pareja?, dado que la produccion de cada smbolo es un evento independiente, la probabilidad de producir cada pareja es el producto de las probabilidades de
producir cada uno de sus smbolos. Es decir:
P 0 (aa) = 0.8 0.8 = 0.64
P 0 (ab) = 0.8 0.2 = 0.16
P 0 (ba) = 0.2 0.8 = 0.16
P 0 (bb) = 0.2 0.2 = 0.04

64

Informacion

y entropa

Sea S 0 = (S 0 , P 0 ) una nueva fuente en la que S 0 = {aa, ab, ba, bb} y P 0 es la distribuci
on que aparece listada arriba. En este caso un esquema de codificacion de Huffman
nos entrega:
f 0 (aa) = 1
f 0 (ab) = 01
f 0 (ba) = 001
f 0 (bb) = 000
La longitud promedio de esta codificacion es 1.56, pero en cada palabra de c
odigo
se codifican dos smbolos de la fuente original as que la longitud promedio de palabra
para representar los smbolos de la fuente original es 1.56/2 = 0.78 lo que resulta menor
que 1. Esto representa una mejora sobre el esquema de codificacion de Huffman de la
fuente original.
Analizaremos esto con cuidado, pero antes necesitamos algo de notacion y definiciones.

Definici
on 3.3 Sea S = (S, P ) una fuente de informacion. La n-esima extension de S es
la fuente S n = (S n , P n ) donde S n es el conjunto de todas las cadenas de longitud n
sobre S y P n es la distribucion de probabilidades definida como sigue: sea s una cadena
cualquiera de S n , s = si1 si2 . . . sin , entonces P n (s) = pi1 pi2 . . . pin
Sean S = {s1 , s2 } un alfabeto de smbolos y P (s1 ) = p1 , P (s2 ) = p2 una distribuci
on para una fuente S = (S, P ). La segunda extension de S tiene el alfabeto S 2 =
{s1 s1 , s1 s2 , s2 s1 , s2 s2 } la distribucion de la extension es P 2 = {p1 p1 , p1 p2 , p2 p1 , p2 p2 }.
La entropa de esta fuente es:




1
1
H(S 2 ) = p1 p1 log2
+ p1 p2 log2
+
p1 p1
p1 p2




1
1
p2 p1 log2
+ p2 p2 log2
p2 p1
p2 p2

 
 
1
1
=
p1 p1 log2
+ p1 p1 log2
+
p1
p1

 
 
1
1
p1 p2 log2
+ p1 p2 log2
+
p1
p2

 
 
1
1
p2 p1 log2
+ p2 p1 log2
+
p2
p1

 
 
1
1
p2 p2 log2
+ p2 p2 log2
p2
p2
 
1
(p1 p1 + p1 p1 + p1 p2 + p2 p1 ) +
= log2
p1
 
1
log2
(p1 p2 + p2 p1 + p2 p2 + p2 p2 )
(3.8)
p2

65

3.5 El primer teorema de Shannon


1
p1 (p1 + p1 + p2 + p2 ) +
p1
 
1
log2
p2 (p1 + p1 + p2 + p2 ) +
p2
 
 
1
1
= 2 p1 log2
+ 2 p2 log2
p1
p2
= 2H(S)


= log2

De hecho esto ocurre en general para cualquier extension.

Teorema 3.3 Sea S una fuente de informacion y sea S n su n-esima extension. Entonces:
H(S n ) = n H(S)

Demostraci
on:

H(S ) =

p i1 p i2

i1 ,i2 ,...,in

p i1 p i2

i1 ,i2 ,...,in

X
i1 ,i2 ,...,in

p i1 p i2

1
. . . pin log2
pi1 pi2 . . . pin
 
1
. . . pin log2
+ ...
p i1
 
1
. . . pin log2
p in

Hemos seguido el mismo procedimiento que llevamos a cabo para nuestro an


alisis de
la segunda extensi
on de una fuente. Nuestra u
ltima expresion corresponde a la expresi
on
3.8.
Tal como hicimos en el analisis de la segunda extension, el primer sumando se puede
escribir como:
  X
q
q
q
X
X
1
pi1 log2

p i2 . . .
p in
p i1
i1 =1

i2 =1

in =1

Como la suma de las p es 1, entonces este primer sumando es: H(S).


An
alogamente para cada sumando se tiene el mismo resultado. As que:
H(S n ) = n H(S)


66

Informacion

y entropa

3.5 +El primer teorema de Shannon


Que tenemos hasta ahora? Hemos definido algo llamado entropa, que es una propiedad de la fuente de informacion y que nos mide la cantidad de informaci
on promedio
de los smbolos de la fuente. Si la fuente es totalmente aleatoria, si produce cualquiera
de los q smbolos de su alfabeto con igual probabilidad, entonces su entropa es m
axima
y es log2 (q).
Por otra parte ya definimos una medida de la eficiencia de un codigo para representar
los smbolos producidos por una fuente de informacion. La longitud promedio de un
c
odigo binario es la cantidad promedio de bits necesarios para decir una palabra de
c
odigo, es decir, un smbolo del alfabeto fuente.
Ahora debe parecernos que estos conceptos estan relacionados. Ambos son medidas
de informaci
on promedio de los smbolos de la fuente. La entropa mide la informaci
on
promedio que existe intrnsecamente en los smbolos de la fuente de informaci
on. La
longitud promedio de c
odigo el promedio de informacion necesaria para decir cada uno
de esos smbolos. Si imaginamos que tenemos el mejor codigo posible, el mas eficiente,
para codificar una cierta fuente, entonces es claro que nuestro codigo tendra que tener
una cantidad de informacion promedio para decir los smbolos de la fuente igual o, en
el peor de los casos, ligeramente superior, que la cantidad de informacion intrnseca en
los smbolos de la fuente.
Hay que notar que aunque son conceptos relacionados son, por supuesto, diferentes.
La entropa es una propiedad de la fuente, es inherente a ella. La longitud promedio
mnima de palabra de un codigo es una propiedad del esquema de codificaci
on. Si
concebimos a nuestra fuente como una caja negra que produce smbolos por un extremo
y a nuestra funci
on de codificacion como otra caja que se conecta por un extremo a la
anterior, recibe cada smbolo que la fuente produce y por cada uno entrega una palabra
de c
odigo. Entonces la entropa es algo que se le puede medir a la primera caja y la
longitud promedio de palabra es algo que se le puede medir a la segunda. Si la segunda
caja es muy eficiente en su codificacion, entonces la medida de su longitud promedio
de palabra de c
odigo debera ser muy cercana a la medida de la entropa de la primera.
Pero la segunda caja nunca puede tener una longitud promedio de palabra menor que
la medida de entropa de la primera. No es posible decir con menos bits de informaci
on
lo que la fuente produce.
Con esto en mente podemos plantear el siguiente teorema. Se lo debemos a Claude
Shannon (1948) y fue llamado por el el teorema fundamental para un canal sin ruido.
El nombre dado por Shannon significa que el teorema es verdadero cuando podemos
ver exactamente lo que nuestra caja de codificacion produce, sin alteracion alguna ocasionada por el medio ambiente, suponemos que no ocurren errores de los que tengamos
que preocuparnos. M
as delante estudiaremos el caso de canales de comunicaci
on donde
algo es introducido en un extremo y otra cosa es recibida en el otro extremo, canales en
los que pueden ocurrir alteraciones aleatorias (errores) en la transmision de datos.

67

3.5 El primer teorema de Shannon

En el teorema Hr (S) denota la entropa de la fuente S calculada en base r, es


decir usando el logaritmo base r. Nosotros solemos escribir H(S) para denotar lo que
realmente es H2 (S), la entropa binaria. Por supuesto, dada la expresion 3.1, podemos
escribir:
H2 (S)
Hr (S) =
(3.9)
log2 (r)

Teorema 3.4 (de la codificacion sin ruido, version 1). Sea S una fuente de informacion. Si
lonmin (r, S) denota la mnima longitud promedio de palabra sobre todos los esquemas
unvocamente decodificables r-arios para S entonces:
Hr (S) lonmin (r, S)
Demostraci
on:
Sea P = {p1 , p2 , . . . pq } la distribucion de la fuente S. Sea (C, f ) un esquema de codificaci
on r-ario unvocamente decodificable para S con longitudes de palabra `1 , `2 , . . . , `q
en correspondencia a las probabilidades de P .
Sea ri = 1/r`i . Evidentemente 0 r1 1. Como C es unvocamente decodificable
debe cumplir con el teorema de McMillan, as que:
q
X
i=1

ri =

q
X
1
1
r`i

(3.10)

i=1

Se cumplen las hipotesis del lema 3.1 asi que debe ocurrir que:
 
q
X
1
H(S) =
pi log2
pi
i=1


q
X
1

pi log2
ri
=
=

i=1
q
X

i=1
q
X

 
pi log2 r`i
pi `i log2 (r)

i=1

= log2 (r)

q
X

p i `i

i=1

= log2 (r) lon(C, f )


Dividiendo por log2 (r):
Hr (S) =

H(S)
lon(C, f )
log2 (r)

68

Informacion

y entropa

EJEMPLO 3.3
Sea S = (S, P ) una fuente con distribucion uniforme con el alfabeto S = {0, 1, . . . , 9}.
Entonces H(S) = log2 (10).
El teorema dice que la longitud promedio de una palabra de codigo unvocamente
decodificable ternario es, al menos:
H3 (S) =

H(S)
= 2.0959
log2 (3)

Este teorema nos puede auxiliar en la construccion de un codigo con palabras cortas,
eficiente, para una fuente S. Recordemos que si tenemos longitudes `1 , `2 , . . . , `q tales
que satisfacen la desigualdad de Kraft:
q
X
1
1
r `i
i=1

entonces existe un c
odigo instantaneo C con palabras de esas longitudes para S.
Si P = {p1 , p2 , . . . , pq } es la distribucion de S entonces podemos reemplazar el uno
de la derecha de la desigualdad:
q
q
X
X
1

1
=
pi
r`i
i=1

(3.11)

i=1

Ah! entonces si establecemos los valores de las longitudes de tal forma que para
toda i {1, 2, . . . , q} ocurra que:
1
pi
r`i

(3.12)

se cumplir
a autom
aticamente 3.11 y por tanto existira un esquema de codificaci
on instant
aneo (C, f ) para S con esas longitudes justamente.
Pero 3.12 es equivalente a:
 
1
`i
logr (r ) logr
pi
de donde:

logr

1
pi


`i

(3.13)

69

3.5 El primer teorema de Shannon

Por supuesto las longitudes deben ser n


umeros enteros as que para satisfacer 3.13
y al mismo tiempo hacerlas lo mas peque
nas posibles debemos tener que:

 
1
`i = logr
(3.14)
pi
Pero esto significa que:
 
 
1
1
`i < logr
+1
logr
pi
pi

(3.15)

De donde, si usamos la cota superior:


AvgLenr (C, f ) =

q
X

p i `i

i=1
q
X



1
<
pi logr
+1
pi
i=1
  X
q
q
X
1
=
+
pi logr
pi
pi
i=1

i=1

= Hr (S) + 1
Como (C, f ) es un codigo instantaneo r-ario entonces la longitud promedio de
sus palabras es, al menos la mnima de las longitudes promedio para los esquemas
unvocamente decodificables. As que finalmente:
lonmin (r, S) AvgLenr (C, f ) < Hr (S) + 1
Esto, junto con el la primera version del teorema de la codificacion sin ruido demuestra lo siguiente.

Teorema 3.5 (de la codificacion sin ruido, version 2). Sea S una fuente de informacion. Si
lonmin (r, S) denota la mnima longitud promedio de palabra sobre todos los esquemas
unvocamente decodificables r-arios para S entonces:
Hr (S) lonmin (r, S) < Hr (S) + 1
Si ahora tomamos en consideracion las extensiones de la fuente, que son por s
mismas, fuentes y les aplicamos el teorema:
Hr (S n ) lonmin (r, S n ) < Hr (S n ) + 1
Pero sabemos que Hr (S n ) = n H(S), as que:
n Hr (S) lonmin (r, S n ) < n Hr (S) + 1

70

Informacion

y entropa

dividiendo por n obtenemos el teorema siguiente:

Teorema 3.6 (de la codificacion sin ruido, version 3). Sea S una fuente de informacion y S n
su n-esima extensi
on. Si lonmin (r, S n ) denota la mnima longitud promedio de palabra
sobre todos los esquemas unvocamente decodificables r-arios para S n entonces:
Hr (S)

lonmin (r, S n )
1
< Hr (S) +
n
n

Esto es lo que justifica lo que ocurrio en el ejemplo que hicimos, en el que el c


odigo
de Huffman para la segunda extension de la fuente codifica con un promedio menor los
smbolos de la fuente original que el codigo de Huffman hecho para ella.
N
otese que si n crece entonces 1/n se hace peque
no, esto significa que podemos
codificar tan eficientemente como queramos una fuente, solo hay que elegir un valor
de n suficientemente grande. Esto significa que codificaremos bloques de smbolos de
tama
no n, lo que pudiera no ser practico, despues de todo cada bloque de tama
no n es un
smbolo de la extensi
on y debemos poder guardar su frecuencia o probabilidad, como
ya sabemos, el n
umero de posibles cadenas de longitud n es q n , donde q es el n
umero de
smbolos en el alfabeto original, as que este n
umero es considerablemente m
as grande
que q, el n
umero de frecuencias que haba que guardar para la fuente original.

+Ejercicios
3.1

Bajo que condiciones la entropa de una fuente es cero?

3.2 Calcule la entropa de una fuente que produce tres smbolos con probabilidades
{1/4, 1/4, 1/2}.
3.3

Calcule la entropa de una fuente que produce n smbolos equiprobables.

3.4 Calcule la cantidad esperada de informacion que se recibe de lanzar al aire una
moneda. Haga lo mismo suponiendo que se tira un dado. Cual es mayor? Explique.
3.5 Suponga una fuente S con alfabeto A = {a, b} y distribucion de probabilidades
P (a) = 0.75 y P (b) = 0.25. Obtenga un codigo de Huffman para esta fuente y luego para
sus dos siguientes extensiones. Calcule la longitud promedio de palabra para cada una
de ellas y calcule tambien la cantidad de bits usados en cada extension para representar
los smbolos del alfabeto original en promedio. Que puede comprobar a medida que se
avanza en el n
umero de extension?
3.6

La definici
on de entropa, basada en el valor esperado de una variable aleatoria,

EJERCICIOS

71

puede generalizarse para distribuciones de probabilidades continuas como:


Z
f (x) log(f (x)) dx
H(f ) =

si la integral existe. En la expresion la base del logaritmo es irrelevante y f (x) es la


funci
on de distribucion de probabilidad que, como el lector recordara, satisface:
Z
f (x) dx = 1

Usando esto, calcule la entropa de una distribucion continua normal, es decir:


f (x) =

1
2

(x)2
2 2

donde es la media y 2 es la varianza; utilice ademas el hecho de que:


Z
2
=
(x )2 f (x) dx

3.7 En 1950 Claude Shannon calculo la entropa del idioma ingles escrito haciendo
consideraciones de predictibilidad usando modelos estadsticos de diversos
ordenes, en
el m
as simple, considerando solamente las frecuencias relativas de cada letra del alabeto
(26 letras en ingles) obtuvo la medida1 de 1.14. Repita el experimento de Shannon,
estime, mediante un programa de computadora, la entropa del ingles considerando la
distribuci
on del alfabeto convencional de 26 letras. Como se compara su resultado con
el de Shannon? Proceda a hacer lo mismo para el castellano a
nadiendo la n
al alfabeto
anterior, cu
al resulto mayor?

Claude E. Shannon, Prediction and Entropy of Printed English, Bell Systems Technical Journal,
Vol. 30, 1951, pp. 50-64.

Codificaci
on para
detectar y corregir
errores

Hasta ahora nos hemos dedicado a codificar datos buscando representarlos de la manera
m
as breve posible. Hemos estado suponiendo que lo que se escribe por un lado del
canal de transmisi
on (ya sea este espacial o temporal) puede ser ledo correctamente
del otro lado; lo que se lee es exactamente lo que se escribio. Pero el panorama cambia
dr
asticamente si el canal de transmision no es confiable, si no estamos seguros de que
lo que se escribe de un lado puede ser ledo con toda exactitud del otro lado, entonces
nuestras prioridades cambian, ahora nuestra preocupacion fundamental no es abreviar
la representaci
on de los datos, sino asegurar que estos puedan ser recuperados.
Ahora nuestra intencion es hacer posible que, luego de transmitir los datos de interes,
podamos percatarnos de que ocurrieron errores durante la transmision y, en el mejor de
los casos, revertir las alteraciones que estos errores ocasionaron a los datos.
Los c
odigos que usaremos ahora son de longitud fija, tambien llamados de bloque,
todas las palabras del codigo miden lo mismo.

Definici
on 4.1 Sea A = {a1 , . . . , ar } un conjunto de tamano (cardinalidad) r al que llamaremos
el alfabeto del c
odigo y cuyos elementos se llaman smbolos del c
odigo. Un c
odigo de
bloque r-ario C sobre A es un subconjunto no vaco de An (el conjunto de todas las
cadenas de longitud n sobre A). Los elementos de C se denominan palabras de c
odigo,
73

74

Codificacion para detectar y corregir errores

n es la longitud del c
odigo (formalmente de cada una de sus palabras). Al n
umero M de
palabras en el c
odigo C se le llama el tama
no del c
odigo. Un codigo con M palabras de
longitud n sobre un alfabeto de r smbolos lo denominaremos un (n, M )-codigo r-ario.
Por el canal de comunicacion tambien viajan smbolos, podemos suponer que uno
a la vez (serial). As que cada smbolo que viaja por el canal puede ser alterado y
convertido en alg
un otro smbolo. Si esto ocurre y solo un smbolo ha viajado por el
canal entonces no podemos darnos cuenta de que ha ocurrido un error, lo que recibimos
es tan v
alido como lo que nos fue enviado. Si en cambio ocurre un error en un smbolo
dentro de una palabra de codigo posiblemente podamos percatarnos de ello. Si al ocurrir
el error un smbolo fue cambiado por otro y la cadena resultante esta en An pero no
en el cat
alogo de palabras del codigo C, entonces podemos estar seguros de que han
ocurrido errores. Si luego de que ocurren el o los errores el resultado es una cadena An
que si est
a en C entonces no podremos percatarnos de que han ocurrido alteraciones
indeseables en los datos porque, igual que como ocurra en el caso de un solo smbolo, el
resultado de las alteraciones es algo tan valido como lo que nos fue enviado en realidad
y bien hubiera podido ser eso lo que se nos quera transmitir.

4.1 +Regla de decision y canal de comunicacion


Ahora bien que hacemos con lo que recibimos? si la cadena recibida es una de las
del c
odigo entonces simplemente la aceptaremos, puede que hayan ocurrido errores o no,
pero nunca lo sabremos a menos que haya alg
un mecanismo externo a nuestro sistema
(el conjunto de palabras de codigo y el canal) para determinarlo (por ejemplo, retransmisiones de los mismos datos o algunos datos extra para verificar todos los anteriores,
etc.). Pero si lo que recibimos no es una de las palabras del codigo entonces hay dos
opciones: se
nalamos que hubo errores durante la transmision de los datos o tratamos
de corregir los smbolos en la cadena que presumimos fueron alterados. Formalmente
hablando lo que estamos haciendo en cualquiera de los tres casos es aplicar una regla
de decisi
on.

Definici
on 4.2 Una regla de decision es un procedimiento (hablando como computologos) que
decide, dada la cadena recibida, que cadena del codigo le corresponde o si han ocurrido
errores.

4.1 Regla de decisi


on y canal de comunicacion

75

Si formul
aramos la definicion en los terminos de un matematico diramos que una
regla de decisi
on es una funcion f que mapea una cadena cualquiera s An en f (s)
C {?}, donde ? es un smbolo utilizado para denotar que han ocurrido errores.

EJEMPLO 4.1
Sea C = {00000, 11111} un (5, 2)-codigo. Supongamos que es 11011 la cadena recibida.
Una posible regla de decision es: f1 (11011) = 11111. Otra posible regla es: f2 (11011) =
00000 y por supuesto otra es: f3 (11011) =? Cual es la mejor si queremos recuperar
la informaci
on que originalmente nos fue transmitida y que desconocemos? responder
esto no es trivial, para hacerlo necesitamos saber algo del canal por el que viaj
o la
informaci
on. Si por ejemplo sabemos que el canal casi nunca altera los datos que
transitan por el, entonces podramos decir que con alta probabilidad lo que en realidad
nos fue enviado es el resultado de f1 , si en cambio sabemos que el canal es muy malo
y casi siempre altera lo que viaja por el entonces muy probablemente la mejor regla de
decisi
on sea f2 . Por supuesto si no queremos arriesgarnos podemos optar por f3 , m
as
seguro, pero menos interesante.

En general la eleccion de la mejor regla de decision depende de las caractersticas


del canal y hay que enfatizar que nunca podemos estar completamente seguros de que
la regla de decisi
on nos entrega la palabra de codigo que realmente nos fue enviada. Lo
u
nico cierto es la incertidumbre, el objetivo es minimizarla.
La caracterstica mas desagradable de nuestros canales de comunicacion y nuestros
dispositivos de almacenamiento (canales de comunicacion temporales), es que se ven
influidos por el azar. Las cosas seran mas sencillas si supieramos de antemano cu
ales
smbolos ser
an alterados en un cable de red o en un disco duro, pero no es as. De
pronto se enciende el motor de aire acondicionado que esta cerca de donde pasa el cable
de red y su campo magnetico altera brevemente algunos de los datos que pasan por all
o hay una peque
na variacion de densidad en el material de un disco o una impureza que
altera lo que all se pretenda almacenar o un rayo da al traste con una transmisi
on de
microondas, en fin; la naturaleza s da saltos y dios prefiere jugar a los dados antes que
tocar el violn.
As que en nuestros canales los errores ocurren aleatoriamente y para modelarlos
necesitaremos de la probabilidad, para variar. De un lado del canal se nos enva un
smbolo ai , del conjunto de smbolos que pueden viajar por el canal y que en general
podemos pensar que son los del alfabeto del codigo, del otro lado del canal se recibe un
smbolo aj que puede o no coincidir con ai . As que para saber como se comporta el
canal necesitamos tener, para todos los smbolos posibles ai y aj :
P (aj recibido | ai enviado)

76

Codificacion para detectar y corregir errores

Definici
on 4.3 Un canal de comunicacion r-ario consiste de un conjunto de smbolos llamado alfabeto de canal A = {a1 , . . . , ar } y un conjunto de probabilidades de transici
on
(probabilidades a posteriori ) P (aj recibido | ai enviado) que satisfacen:
r
X

P (aj recibido | ak enviado) = 1

j=1

(n
otese que k permanece fija durante toda la suma). Este conjunto de probabilidades
no cambia con el tiempo.
Otra caracterstica que a
nadiremos a nuestro modelo de canal es la falta de memoria.
El resultado en la transmision de cualquier smbolo en un momento dado no se ve
influido por alguna transmision previa, es decir, la transmision de un smbolo es evento
independiente. As que si c = c1 c2 . . . cn es una palabra de C enviada por un extremo
del canal y d = d1 d2 . . . dn es una cadena de An recibida en el otro extremo entonces:
P (d recibido | c enviado) =

n
Y

P (di recibido | ci enviado)

i=1

Como nuestro modelo de canal esta compuesto de los smbolos del alfabeto y las
probabilidades de transicion entonces un canal puede ser completamente descrito mediante una gr
afica bipartita en la que los dos conjuntos de vertices a cada lado son los
smbolos del alfabeto A = {a1 , . . . , ar } y el peso de cada arista (ai , aj ) en la gr
afica es
la probabilidad de transicion P (aj recibido | ai enviado).
Hay algunos canales de uso frecuente en teora de la informacion, algunos de ellos
est
an representados gr
aficamente en la figura 4.1.
Estos modelos de canales son u
tiles pero por supuesto no son verosmiles en toda
circunstancia. Muchos canales de comunicacion reales no podramos ajustarlos a alguno
de estos modelos, en general suelen ser mas complicados. En la vida real el comportamiento de un canal est
a determinado por la fuente de distorsion de datos. Por ejemplo
el ruido causado por la atmosfera o por el movimiento de los electrones en el cable que
transmite (ruido termico) se denomina ruido blanco o ruido blanco gaussiano. La luz
blanca se hace mezclando todos los colores (todas las frecuencias del espectro visible)
en la misma medida, el ruido es blanco porque, analogamente, contiene de todas las
frecuencias en la misma medida. Podemos ver y or el ruido blanco cuando se acaba
la programaci
on de una estacion de television y queda la pantalla llena de puntitos.
Otro tipo de ruido ocurre cuando nuestros cables de red, por ejemplo, pasan cerca de
un motor que no funciona permanentemente: cuando el motor se enciende ocasiona
perturbaciones electromagneticas a su alrededor, luego el motor es apaga y todo vuelve
a la normalidad, el ruido se da en rafagas que afectan, casi siempre sin remedio, grupos
compactos de bits; a este tipo de ruido se le llama ruido de impulso. El ruido es pues una
alteraci
on electromagnetica y como tal se puede ver como la superposicion de muchas

77

4.1 Regla de decisi


on y canal de comunicacion

1p

1p

1p

1p

B
0

1p
p

c1

c1

c2

c2

cr

cr

1p

Figura 4.1: Algunos canales usuales. En A se muestra un canal simetrico binario, en


B un canal in
util: si p es grande casi siempre que se enva cero se recibe cero, pero
casi siempre que se enva uno se recibe cero, as que si se recibe cero que habr
a sido
enviado?. En C se muestra un canal de borrado: o el smbolo transmitido llega bien
o se borra, no hay confusion, por cierto se ha incluido solo por completez el smbolo
? en el lado izquierdo, en realidad nunca se enva ?. En D se muestra un canal sin
ruido. El teorema de Shannon visto en el captulo 3 supone que la transmisi
on de datos
se lleva a cabo a traves de un canal sin ruido.

78

Codificacion para detectar y corregir errores

ondas diferentes (el ruido blanco suma sobre todas las frecuencias en la misma medida)
y estas a su vez se suman a las que constituyen nuestras transmisiones.
Evidentemente no podemos evitar el ruido, as que debemos vivir con el y tratar de
contrarrestar sus efectos. Lo que deseamos es poder encontrar una regla de decisi
on que
maximice la probabilidad de decodificar correctamente, es decir, necesitamos una f que
maximice la probabilidad de que f (x) haya sido enviada cuando recibimos x. Que se
equivoque lo menos posible. Supongamos que se nos enva una cierta palabra de c
odigo
c C y que algo afecta la transmision de la palabra, lo que ocasiona que el receptor
reciba una cadena x An , desearamos tener una regla de decision f que nos dijera
f (x) = c. Hay que tener en cuenta que nuestra regla de decision es estatica, es decir
si recibimos en dos instantes de tiempo diferentes la misma cadena y y la primera vez
nuestra decisi
on fue f (y) = ci entonces la segunda vez la decision es la misma. Bajo
estas condiciones lo que queremos es una regla de decision que nos dijera f (x) = c en el
ejemplo anterior, siempre y cuando c sea la palabra de entre todas las del codigo, con
la mayor probabilidad de haber sido transformada en x por el canal. Es decir:
P (decodif icar correctamente) =
X
P (f (x) enviado | x recibido) P (x recibido)

(4.1)

xAn

As que para maximizar el lado izquierdo de esta expresion debemos maximizar cada
uno de los sumandos del lado derecho, dado que P (x recibido) esta fija, que debemos
maximizar: P (f (x) enviado | x recibido). Esto significa que dada la cadena recibida
x An debemos tener una lista de las probabilidades:
P (c1 enviado | x recibido)
P (c2 enviado | x recibido)
..
.
P (cM enviado | x recibido)
en la que podamos buscar para que palabra de codigo ck el valor de la probabilidad
es mayor en la lista. De no ser porque esto es imposible sera bastante complicado:
necesitaramos tener almacenadas | A |n probabilidades para cada palabra de c
odigo.
Sin embargo podramos garantizar que en la mayora de los casos, dada la cadena
recibida, adivinamos correctamente cual fue la palabra de codigo que nos fue enviada.
Pero realmente esto es imposible. Notese que las probabilidades de la lista solo
puede calcularlas alguien que observa lo que se enva y lo que se recibe: podramos
decirle dios u observador ideal.

79

4.1 Regla de decisi


on y canal de comunicacion

Definici
on 4.4 Cualquier esquema de decision f con la propiedad de que:
P (f (x) enviado | x recibido) = max{P (c enviado | x recibido)}
cC

para todas las posibles cadenas recibidas x, es llamado un observador ideal.

EJEMPLO 4.2
En un sistema de comunicacion recibimos la cadena 1010 y en nuestra u
ltima charla
con dios el nos dijo que el 90% de las veces que recibamos 1010 en realidad nos haban
enviado 1011. As que en la mejor regla de decision que podramos tener, la cadena
1010 se mapea en 1011.

Bien ahora, como todo filosofo medieval que se respete, nos preguntamos, c
omo
podemos acercarnos a la divinidad? Como hacemos nosotros, simples mortales contingentes e imperfectos, para procurar tener una regla de decision lo mas cercana posible
al observador ideal?
Podramos tratar de poner cada una de las probabilidades condicionales en la lista
en terminos cosas que si podamos conocer usando el teorema de Bayes:
P (c enviado | x recibido) = PM

P (x recibido | c enviado) P (c enviado)

i=1 [P (x

recibido | ci enviado) P (ci enviado)]

(4.2)

bien, ahora tenemos involucradas las probabilidades del canal, las probabilidades a posteriori. Sin embargo tambien tenemos involucradas las probabilidades:
P (c1 enviado), P (c2 enviado), . . . , P (cM enviado)

(4.3)

que es la distribuci
on de entrada al canal y que, por supuesto, no conoce el receptor.
Ahora s ya no hay nada que hacer, como siempre los pobres mortales no podemos
siquiera aproximarnos a la suprema perfeccion.
Para no vernos tan pateticos podemos hacer suposiciones acerca de la distribuci
on de
entrada y la suposicion menos descabellada es considerarla uniforme. Es decir, suponer
que
1
P (ci enviado) =
M
para toda ci C, donde M es el n
umero de palabras en el codigo. En este caso la
expresi
on 4.2 se transforma en:
P (c enviado | x recibido) =

P (x recibido | c enviado) (1/M )


P
(1/M ) M
i=1 [P (x recibido | ci enviado)]

80

Codificacion para detectar y corregir errores

P (x recibido | c enviado)
PM
i=1 [P (x recibido | ci enviado)]

(4.4)

y maximizar esta u
ltima expresion consiste en maximizar las probabilidades del canal,
esto tiene un nombre.

Definici
on 4.5 Una regla de decision f que maximiza las probabilidades del canal (probabilidades a posteriori ), es decir:
P (x recibido | f (x) enviado) = max{P (x recibido | c enviado)}
cC

para toda x An , es llamada una regla de decisi


on de m
axima verosimilitud.
As que si la distribucion de entrada al canal fuera uniforme (todas las palabras
de C tiene probabilidad 1/ | C | de ser enviadas), entonces el observador ideal sera
justamente el de m
axima verosimilitud.

EJEMPLO 4.3
Supongamos que en un canal hay una probabilidad p = 0.05 (por lo que 1 p = 0.95)
de que se estropee (invierta) un bit. Sea C = {0000, 1111} un codigo y supongamos
que, luego de que se nos enva una de las palabras de C recibimos 0100.
Tenemos:
P (0100 recibido | 0000 enviado) = P (1 recibido | 0 enviado)
P (0 recibido | 0 enviado)3
= 0.05 (0.95)3 0.0428
P (0100 recibido | 1111 enviado) = P (1 recibido | 1 enviado)
P (0 recibido | 1 enviado)3
= 0.95 (0.05)3 = 0.000118
As que la regla de decision de maxima verosimilitud (f ) dice: f (0100) = 0000. Esta
sera la regla de observador ideal si suponemos que P (0000 enviado) = P (1111 enviado) =
1/2. Pero si: P (0000 enviado) = 0.0001 y P (1111 enviado) = 0.9999, entonces (usando
el teorema de Bayes):
P (0000 enviado | 0100 recibido) =
y
P (1111 enviado | 0100 recibido) =

0.0428 0.0001
= 0.035
0.000122

0.000118 0.9999
= 0.965
0.000122

que cambio!, no?

4.2 Decodificaci
on al vecino mas cercano

81

4.2 +Decodificacion al vecino mas cercano


Ya habamos mencionado la posibilidad de que al enviar una palabra de c
odigo, esta
sea alterada por errores en el canal y sea recibida, por pura casualidad, otra palabra
v
alida del c
odigo. Si esto pasa, no es posible para el receptor determinar si ocurrieron o
no errores de transmision. Por otra parte nuestros canales de comunicacion son bastante
confiables, en condiciones normales las tasas de error de los canales que solemos utilizar
no son muy altas. No es descabellado suponer entonces que los datos recibidos difieren
poco de los enviados. Teniendo estas dos cosas en mente pensemos que condiciones son
deseables en el c
odigo utilizado para enviar los datos a fin de que se facilite la labor de
detectar o corregir errores.
Sabemos que la diferencia entre la palabra enviada y la recibida es proporcional a la
tasa de error del canal y sabemos que si lo recibido es una palabra de codigo no podemos
percatarnos de nada; conclusion: cuanto mayores sean las diferencias entre las palabras
que se pueden enviar (las del codigo) tanto mas facil sera percatarse de los errores. Si
las palabras del c
odigo son muy diferentes entre ellas, reducimos la probabilidad de que,
luego de algunos errores, se obtenga otra palabra del codigo, lo que impedira que nos
dieramos cuenta de los errores. Mientras mayores sean las diferencias mayor ser
a la tasa
de errores que se pueden percibir. Ahora bien, que herramienta poseemos para medir
las diferencias entre dos cadenas de smbolos?, la distancia de Hamming.
Durante esta seccion estaremos trabajando siempre sobre un canal simetrico binario y examinaremos la decodificacion de maxima verosimilitud para este tipo de canal
suponiendo que la tasa de error es menor que la tasa de acierto. Recordemos que la
probabilidad de que un bit sea alterado por un canal simetrico binario (tambien llamada probabilidad de crossover ) la denotamos por p, as que estaremos suponiendo que
p < 1 p, es decir p < 0.5. En estas condiciones la probabilidad de que una palabra de
n bits no sea alterada es:
P (no error) = (1 p)n
y la probabilidad de que ocurran exactamente k n errores en posiciones predeterminadas de una palabra (notese que son posiciones predeterminadas, por lo que en el
siguiente c
alculo no aparece la expresion para elegir las k posiciones de entre las n
disponibles) es:
Pk = pk (1 p)nk
As que si una palabra x de longitud n sobre un alfabeto binario difiere en k posiciones
de una palabra de codigo binario c de longitud n entonces:
P (x recibido | c enviado) = pk (1 p)nk

(4.5)

Teorema 4.1 Para un canal simetrico binario con probabilidad de error p < 1/2, la regla de
decisi
on de m
axima verosimilitud es la que elige la palabra de codigo cuya distancia de
Hamming a la palabra recibida x es mnima.

82

Codificacion para detectar y corregir errores

Demostraci
on:
Sea x una palabra binaria de longitud n recibida. En la expresion 4.5 es claro que
P (x recibido | c enviado) es mayor mientras mas grande sea el exponente n k, dado
que p < 1 p.
Pero n k es tanto mas grande cuanto menor sea k, que es la distancia de Hamming
entre x y la palabra de codigo c. As que la regla de decodificacion de maxima verosimilitud (la que maximiza P (x recibido | c enviado)) es la que elige decodificar x como
la palabra de c
odigo c con la distancia de Hamming mas peque
na a x.

A las palabras de c
odigo con mnima distancia de una palabra x se les denomina
las vecinas m
as cercanas de x y a la regla de decision que acabamos de formular se le
denomina por tanto de vecino m
as cercano.
N
otese que dado que p < 1 p al decodificar mediante la regla de decision de vecino
m
as cercano estamos suponiendo implcitamente que el n
umero de errores es justamente
la distancia de Hamming entre lo que recibimos y lo que es entregado por la regla de
decisi
on.

EJEMPLO 4.4
Sea C = {00000, 00101, 11000, 00011} un codigo binario usado para transmitir datos a
traves de un canal. Sea x = 01101 una palabra recibida. Entonces la decodificaci
on de
vecino m
as cercano f decodifica x como f (x) = 00101 ya que la segunda palabra del
c
odigo dista de x en uno y el resto de las palabras distan 3 unidades de ella.

4.3 +Distancia mnima, capacidad de deteccion y correccion


Comencemos esta seccion con un ejemplo ilustrativo.

EJEMPLO 4.5
Supongamos que tenemos el codigo binario de longitud 10 siguiente C = {c1 =
0000000000, c2 = 1111100000, c3 = 1111111111}, que se nos enva la palabra c1 y que
recibimos la cadena x1 = 1100000000, nuestra regla de decodificacion de vecino m
as
cercano f nos entrega entonces f (x1 ) = 0000000000 = c1 lo cual es correcto. Pero si
en cambio recibimos x2 = 1110000000 entonces f (x2 ) = 1111100000 = c2 lo que ya no

4.3 Distancia mnima, capacidad de deteccion y correccion

83

es correcto. Nuestro codigo puede corregir dos errores pero no tres en este caso. Sin
embargo si la palabra recibida es x3 = 0000001111 entonces f (x3 ) = 0000000000 = c1
lo que es correcto. Tenemos un problema, un codigo cualquiera puede corregir algunas
veces m
as errores que otras. El codigo que utilizamos como ejemplo puede corregir
algunas veces hasta cuatro errores, pero no siempre, sera bueno determinar cu
al es el
mnimo n
umero de errores que puede corregir, es decir, cuantos errores podemos estar
seguros de que puede corregir siempre.

Sabemos que el n
umero de errores que puede detectar o corregir un c
odigo est
a en
funci
on de que tan diferentes o, para usar un lenguaje mas propio, que tan distantes (en
terminos de Hamming) estan sus palabras. As que para determinar cual es el mnimo
n
umero de errores que puede detectar y/o corregir un codigo deberemos hablar de la
mnima de las distancias entre sus palabras.

Definici
on 4.6 Sea C un codigo con, al menos, dos palabras. La distancia mnima del codigo,
que denotaremos con d(C) es la distancia mas peque
na entre las distintas palabras del
c
odigo:
d(C) = min{d(ci , cj ) | ci , cj C, ci 6= cj }
Evidentemente, dado que ci 6= cj d(C) 1.
Por cierto esta definicion nos permite ser mas precisos al describir un c
odigo.

Definici
on 4.7 Un codigo r-ario con M palabras diferentes, de longitud n y distancia mnima
d es un (n, M, d)-c
odigo r-ario.
Ahora procederemos a definir formalmente que significa que un codigo detecte errores.

Definici
on 4.8 Sea u un entero positivo. Un codigo C es detector de u errores si cuando
una palabra cualquiera c C es enviada a traves de un canal y le ocurren a lo m
as u
errores de smbolo, la palabra recibida x no pertenece a C. Un codigo es detector de
exactamente u errores si es detector de u errores pero no de u + 1 errores.
Hay que hacer notar que una vez que una palabra es recibida, de alguna manera
se compara con las que constituyen el codigo, si no empata con alguna podemos estar
seguros de que ocurrieron errores, pero, como ya habamos dicho, si empata con alguna
no podemos saber si ocurrieron o no errores. Esto es equivalente a decir que una vez que
ha sido recibida una palabra, el receptor nunca sabe cuantos errores ocurrieron durante
su transmisi
on.

84

Codificacion para detectar y corregir errores

Tambien tenemos una definicion para codigo corrector de errores.

Definici
on 4.9 Sea v un entero positivo. Un codigo C es corrector de v errores si cuando una
palabra cualquiera c C es enviada a traves de un canal y le ocurren a lo mas v errores
de smbolo, la regla de decision de vecino mas cercano f mapea la palabra recibida en
c. Un c
odigo es corrector de exactamente v errores si es corrector de v errores pero no
de v + 1 errores.
Recordemos nuestro ejemplo al inicio de esta seccion. Si solo pretendemos detectar
errores con ese c
odigo cuantos podemos detectar? Supongamos que es enviada la
palabra c1 = 0000000000 y que es recibida la palabra x4 = 1111000000, en este caso
podemos percatarnos de que han ocurrido errores. El receptor no sabe cuantos, de hecho
si decodifica usando el vecino mas proximo se equivocara suponiendo que le fue enviada
c2 , pero si no decodifica y solo quiere reportar errores, en este caso podra hacerlo bien.
Si hubiera cinco unos al principio de la palabra recibida ya no podra hacerlo, es decir
si hubieran ocurrido cinco errores. En ese caso la palabra recibida es una de las del
c
odigo (c2 ) y no habra por que dudar de que esa fuera la palabra enviada. As que
podemos detectar cuatro errores sera ese el mnimo n
umero de errores detectables con
el c
odigo del ejemplo? ciertamente lo es. En general si la distancia mnima de un c
odigo
es d significa que las palabras mas cercanas difieren en d posiciones y que si se cometen
d errores justo en esas posiciones entonces no seran detectables, el n
umero m
aximo de
errores detectables de d 1.
Ahora bien, el mnimo n
umero de errores que puede corregir es 2. Por que? bueno,
porque como vimos si la palabra recibida es x1 = 1100000000 todo sale bien, pero no
cuando es x2 = 1110000000 y eso ocurre porque el tercer uno cambia la palabra de
c
odigo que es vecino m
as cercano de la palabra. La distancia mnima del codigo es 5 y
si observamos x1 nos damos cuenta de que es una palabra que esta entre c1 , la palabra
enviada, y c2 pero m
as cercana a la primera. Es decir si nos fijaramos en algo as como
el punto medio entre c1 y c2 resulta que x1 esta en la mitad mas proxima a c1 , su
distancia a c1 es menor que la mitad de la distancia entre c1 y c2 , que por cierto es la
distancia mnima del c
odigo. Cuando la palabra recibida es x2 nos pasamos a la mitad
dominada por c2 , cambia el vecino mas cercano y por tanto la decodificacion es err
onea.
Con esto en mente podemos formalizar.

Lema 4.4.2 Un codigo C es detector de u errores si y solo si d(C) u + 1.


Demostraci
on:
Supongamos que C es un codigo detector de u errores, eso significa que si se enva
una palabra cualquiera c C y ocurren k u errores entonces la palabra recibida
x no est
a en C. Dado que x se obtiene de c alterando k posiciones cualesquiera,
entonces la distancia de Hamming entre x y c es tal que d(x, c) = k u. Dado
que x no est
a en C eso significa que en el codigo no hay ninguna palabra que diste
k unidades de c (x puede ser cualquiera de las palabras que distan k de c).

4.3 Distancia mnima, capacidad de deteccion y correccion

85

Lo anterior ocurre ademas para cualquier palabra enviada c C, as que entre


las palabras del codigo no hay ning
un par que diste k u unidades, por lo que la
distancia mnima del codigo debe ser d(C) > u, lo que podemos reescribir como
d(C) u + 1
Supongamos ahora que tenemos un codigo C tal que d(C) u + 1. Es decir, para
toda pareja de palabras c, c0 C ocurre que d(c, c0 ) u + 1.
Sea c C una palabra cualquiera enviada y supongase que ocurren k u errores
por lo que es recibida una palabra x tal que d(c, x) = k u. Pero acabamos de
concluir que en C no existe ninguna palabra c0 tal que: d(c, c0 ) u, as que x 6 C.


Lema 4.4.3 Si c es una palabra de un (n, M, d)-codigo C, tal que d(C) > 2v con 2v n y x
es una cadena de longitud n tal que d(c, x) v entonces c es la palabra del c
odigo C
m
as cercana a x.
Demostraci
on:
Por reducci
on al absurdo.
Supongamos que tenemos un codigo C tal que d(C) > 2v. Sean c C y x tal que
d(c, x) v. Supongamos tambien que existe otra palabra c0 C tal que d(c0 , x) v y
c 6= c0 .
Por la desigualdad del triangulo:
d(c, c0 ) d(c, x) + d(x, c0 ) v + v = 2v
Pero esto significa que hay dos palabras de C, c y c0 que distan a lo m
as 2v, lo que
contradice que la distancia mnima del codigo es mayor que 2v.


Lema 4.4.4 Un codigo C es corrector de v errores si y solo si d(C) 2v + 1


Demostraci
on:
Por reducci
on al absurdo.
Supongamos que C es un codigo de palabras de longitud n, corrector de v errores,
es decir: siempre que al enviar una palabra se cometen v errores o menos, la decodificaci
on de vecino mas cercano entrega justo la palabra enviada. Supongamos
tambien que: d(C) < 2v + 1, es decir: d(C) 2v. Esto significa que existen dos
palabras cr , ct C, tales que d(cr , ct ) 2v.
Como C es corrector de v errores entonces ademas debe ocurrir que d(cr , ct ) > v,
porque de otra forma cr podra transformarse en ct al ser enviada y sufrir a lo
m
as v errores, lo que significa que los errores no podran ser detectados y mucho
menos corregidos.

86

Codificacion para detectar y corregir errores

As que tenemos que hay dos palabras cr , ct C, tales que:


v < d(cr , ct ) 2v
Sea m = d(cr , ct ). Podemos reescribir la desigualdad como:
v + 1 m 2v

(4.6)

Podemos clasificar las n posiciones de las cadenas en dos subconjuntos:


El subconjunto D = {i1 , i2 , . . . , im } de m = d(cr , ct ) posiciones en las que cr
difiere de ct .
El subconjunto E = {1, 2, . . . , n} \ D de las n m posiciones en las que cr
coincide con ct .
Sea x una cadena con las siguientes caractersticas:
1. Coincide con cr en las posiciones del conjunto E. Es decir, en todas las
posiciones en que cr coincide con ct .
2. Difiere de cr en un subconjunto D1 de v posiciones, contenidas en D (el
conjunto en que cr difiere de ct ).
3. Difiere de ct en un subconjunto D2 de m v posiciones, contenidas en D.
Supongamos que en alg
un momento se enva la palabra cr a traves de un canal
y que, luego de v errores se recibe justamente la cadena x, que hemos definido
arriba y que satisface d(cr , x) = v.
Por otra parte x difiere de ct en m v posiciones. Por la expresion 4.6 tenemos
que:
1 d(ct , x) = m v v
Tenemos entonces una palabra x que difiere de cr , la palabra enviada en v posiciones y que difiere de ct en, a lo m
as v posiciones. As que la decodificaci
on
de vecino m
as cercano puede dar un resultado erroneo eligiendo ct en vez de la
palabra enviada, lo que contradice que C sea un codigo corrector de v errores.
Supongamos que C es un codigo tal que d(C) 2v + 1. Sea c una palabra de C
enviada y alterada por a lo mas v errores resultando x la cadena recibida. Entonces
d(c, x) v. Por el lema 4.3 c es la palabra de codigo mas cercana a x y por tanto
la decodificaci
on de vecino mas cercano sera correcta.

Los lemas 4.2 y 4.4 los podemos sintetizar en el siguiente teorema.

Teorema 4.5 Si C es un (n, M, d)-codigo entonces es detector de exactamente d 1 errores y


corrector de exactamente b d1
2 c errores.

4.3 Distancia mnima, capacidad de deteccion y correccion

87

Demostraci
on:
Por el lema 4.2 tenemos que C es detector de u errores, donde d u + 1. Es decir
u d 1. Si es detector de exactamente u errores significa que no es detector de u + 1
as que u adquiere su valor maximo, es decir u = d 1.
Por el lema 4.4 tenemos que C es corrector de v errores donde d 2v + 1, de donde:
v

d1
2

(4.7)

Para que sea corrector de exactamente v errores no debe ser corrector de v + 1 as que
v debe tener el valor mas grande posible que satisfaga 4.7, es decir:


d1
v=
(4.8)
2


EJEMPLO 4.6
Un metodo hist
oricamente importante para detectar errores en la transmisi
on o almacenamiento de informacion es el de a
nadir bits de paridad a los datos.
Supongamos que nuestro codigo de n bits consiste en todos los n
umeros expresables
en binario en n bits. La distancia mnima del codigo es entonces 1 (la distancia entre el
0 y el 1 es 1, por ejemplo). As que nuestro codigo puede detectar 1 1 = 0 errores.
Los esquemas de a
nadir bit de paridad a cada palabra son dos posibles: paridad par
y paridad impar. En ambos esquemas se cuentan el n
umero de unos en la palabra a
enviar, este n
umero de unos puede ser par o impar y dependiendo de ello se a
nade un bit
adicional en 1 o en 0. En el esquema de paridad par se a
nade un 1 a todas las palabras
que en el c
odigo original tienen un n
umero impar de unos y un cero a las restantes,
el objetivo es completar un n
umero par de unos en toda palabra del codigo con el bit
a
nadido. En el esquema de paridad impar el objetivo es el opuesto, se completa un
n
umero impar de bits en todas las palabras del nuevo codigo.
Supongamos que las palabras que deseamos enviar son las de la primera columna de
la tabla 4.1. Si bien la distancia en el codigo original era uno, en el codigo con bit de
paridad la distancia mnima es dos, lo que significa que ya es posible detectar 2 1 = 1
bit err
oneo por cada palabra de 4 bits.
El esquema de verificacion de paridad era muy usual en las comunicaciones digitales
durante las decadas pasadas y a
un hoy se utiliza para conexiones por modem en una lnea
telef
onica. Tambien las antiguas unidades de cinta magnetica utilizaban este esquema,
aunque con una variante que permite ya no solo detectar sino corregir algunos errores
Supongamos que utilizamos el codigo mostrado en la tabla (4.1). Cada palabra
posee su bit de verificacion. Ahora a
nadimos una palabra completa luego de cada tres

88

Codificacion para detectar y corregir errores

000
001
010
011
100
101
110
111

0000
0011
0101
0110
1001
1010
1100
1111

Tabla 4.1: Esquema de paridad par. A las palabras en el codigo original (columna
izquierda) se les a
nade un bit adicional para completar siempre un n
umero par de unos
en cada palabra del nuevo codigo (columna derecha). Con negrita se denota el bit de
paridad agregado.

palabra 1
palabra 2
palabra 3
palabra de verif.

0101
1001
0110
1010

bits de verificacin
horizontal (por palabra)

bits de verificacin
vertical
Figura 4.2: Verificacion de paridad horizontal y vertical

palabras del c
odigo, de tal forma que cada bit de la palabra a
nadida verifique los bits
verticalmente tal como lo hacen los bits de paridad de cada palabra, como se muestra en
la figura 4.6, en la que hay tres palabras a enviar a las que se a
nade una cuarta cuyos bits
verifican verticalmente los de cada palabra en una posicion determinada. Supongamos
que en el bloque mostrado en la figura, el tercer bit mas significativo de la primera
palabra fuera alterado quedando: 0111. Al recibir esta palabra nos percataramos de
que es err
onea y m
as tarde cuando recibieramos la palabra de verificacion: 1010 nos
daramos cuanta de que hay un error en el tercer bit mas significativo, tenemos las
coordenadas: primera palabra, tercer bit y procedemos a negar el bit que se encuentre
en esa posici
on, lo que corregira el error.
Por supuesto si se cometen dos errores en el renglon y dos en una misma columna
entonces el error en la interseccion pasa desapercibido.

89

4.4 C
odigos maximales

EJEMPLO 4.7
Otro ejemplo de c
odigo detector de errores es el llamado International Standard Book
Number o ISBN. El ISBN es un (10, 109 , 2)-codigo por lo que puede detectar un error
en alguno de sus dgitos, que por cierto son decimales. Para comprender este c
odigo
pongamos un ejemplo: El ISBN de un libro podra ser 0412786907. El cero inicial
significa que el libro fue producido en los Estados Unidos de Norteamerica, el 412 que
le sigue es el c
odigo de la editorial (Chapman & Hall) los siguientes cinco dgitos son el
c
odigo del libro en la editorial y el u
ltimo dgito es de verificacion. Para calcularlo se
ejecuta el algoritmo siguiente:
1. Para cada dgito i del codigo ISBN del libro (salvo el u
ltimo i = 10 que es el que
queremos calcular) sumar el valor de los anteriores i 1 dgitos. Llamemos a este
n
umero si .
i
X
si =
dj
j=1

.
2. Calcular S =

P9

i=1 si .

En nuestro ejemplo S = 154.

3. Encontrar el valor de x mas peque


no tal que: S + s9 + x 0 (mod 11). Es decir
S + s9 + x debe ser el m
ultiplo mas peque
no posible de 11. En nuestro ejemplo
S + s9 = 154 + 37 = 191.
El proceso completo para el libro de Baylis se muestra en la tabla 4.2. En sntesis se
requiere el valor m
as peque
no de x tal que 191 + x sea m
ultiplo de 11, el m
ultiplo de 11
m
as cercano a 191 es 198, por lo que x = 7 es la solucion y el valor del u
ltimo dgito del
c
odigo ISBN. N
otese que la operacion es modulo 11, as que un posible residuo (valor
para el u
ltimo dgito) es 10, para escribir el 10 en un solo dgito se representa en romano
con una X.

4.4 +Codigos maximales


Recordemos el codigo analizado en el ejemplo 4.5. Ese codigo es capaz de corregir,
ocasionalmente, m
as errores de los que garantiza que puede corregir siempre (como

90

Codificacion para detectar y corregir errores

Dgito
0
4
1
2
7
8
6
9
0

Suma
0
4
5
7
14
22
28
37
37

Suma de suma
0
4
9
16
30
52
80
117
154

Tabla 4.2: C
alculo del u
ltimo dgito de un codigo ISBN. En la columna izquierda se
muestran los primeros 9 dgitos del codigo, en la columna de en medio la suma acumulada
parcial de los dgitos y en la columna derecha la suma acumulada parcial de las sumas
de la columna previa.

cuando la palabra recibida es x3 y la enviada es c1 , en este caso se pueden corregir tres


errores, lo que es superior a los dos garantizados). Esto no ocurrira si en el c
odigo
estuviera incluida la palabra c4 = 0000011111, en ese caso x3 sera decodificada como
c4 y no como c1 . Vamos a especificar bajo que condiciones un codigo puede corregir
solamente el n
umero de errores garantizados y nunca mas que esos.

Definici
on 4.10 Un (n, M, d)-codigo C es maximal si no esta contenido en un codigo mas
grande con la misma distancia mnima. Es decir si no existe un (n, M + 1, d)-c
odigo, C 0
0
tal que C C .

Teorema 4.6 Un (n, M, d)-codigo C, sobre un alfabeto A es maximal si y solo si para toda
x An \ C existe c C tal que d(x, c) < d.
Demostraci
on:
Por reducci
on al absurdo.
Sea C un (n, M, d)-codigo maximal y supongamos que existe x An \ C tal que
para toda c C ocurre que d(x, c) d.
Si esto es cierto entonces el codigo C 0 = C {x} es un (n, M + 1, d)-c
odigo, ya
que la distancia mnima no se vera afectada por la inclusion de x.
Entonces C C 0 por lo que C no es maximal, lo que contradice nuestra hip
otesis.
Sea C un (n, M, d)-codigo. Supongamos que para toda x An \C existe una palabra
del c
odigo c C tal que d(x, c) < d. Esto significa que la inclusion de cualquier
palabra x que no este en el codigo reduce la distancia mnima de C, porque en el

4.5 Probabilidad de error al decodificar

91

c
odigo ya sabemos que existe alguna c tal que su distancia a x es menor que el
mnimo actual d.

Tener c
odigos maximales tiene su ventaja y su desventaja. La ventaja es que en
un c
odigo maximal tenemos el mayor n
umero posible de cadenas con una distancia
mnima dada. Entonces tenemos el acervo mas grande posible de palabras y por tanto
el poder m
aximo de representatividad del codigo. La desventaja es que con un c
odigo
no maximal ocasionalmente podemos detectar/corregir un n
umero mayor de errores de
los que indica la distancia mnima.

4.5 +Probabilidad de error al decodificar


Por lo visto en la seccion antepasada ahora ya sabemos exactamente cu
antos errores
es capaz de detectar o corregir un codigo en funcion de su distancia mnima. Ahora
bien, que tan u
til es realmente un codigo capaz de corregir v errores? Por supuesto la
respuesta depende de la tasa de error del canal que se este utilizando. Nuestros modelos
de canal son probabilsticos, as que necesariamente la medida de la utilidad de un
c
odigo en particular estara dada tambien en terminos de probabilidad, concretamente,
en terminos de la probabilidad de que al decodificar no acertemos a la palabra que fue
enviada. Nos abocaremos a calcular dicha probabilidad.
La probabilidad de que ocurran k n errores en una palabra de longitud n transmitida por un canal simetrico binario con probabilidad de error p es:


n
pk (1 p)nk
(4.9)
Pk =
k
(el n
umero de posibles selecciones de k posiciones de un total de n que tiene la palabra
por la probabilidad de que esas k posiciones sean erroneas y las restantes n k no).
La ocurrencia de error en una posicion de la palabra es un evento independiente, por
lo que la probabilidad de que ocurran d o mas errores en una palabra queda expresado
en el lado derecho de la siguiente expresion:

n 
X
n
P (error decodif icaci
on)
pk (1 p)nk
k

(4.10)

k=d

lo que queremos expresar con el lado izquierdo de la expresion es la probabilidad de


que al decodificar no se obtenga la palabra enviada, es decir, la probabilidad de error
al decodificar, lo que en un codigo de distancia mnima d ocurre cuando el n
umero de
errores excede la distancia mnima, de all los lmites de la suma.

92

Codificacion para detectar y corregir errores

que no hay error


Por otra parte un (n, M, d)-codigo puede corregir hasta b d1
2 c as
d1
al decodificar una palabra que tenga b 2 c o menos errores.
d1
bX
c

2
n
pk (1 p)nk
P (decodif icar correctamente)
k

(4.11)

k=0

de donde:
d1
bX
c

2
n
P (error decodif icaci
on) 1
pk (1 p)nk
k

(4.12)

k=0

Es posible sintetizar 4.10 y 4.12 en un teorema, que de hecho acabamos de demostrar.

Teorema 4.7 Para un canal simetrico binario y usando decodificacion de vecino mas cercano,
la probabilidad de error al decodificar una palabra, esto es, la probabilidad de que la
palabra decodificada no sea la enviada, satisface:

n 
X
n
pk (1 p)nk P (error decodif icaci
on)
k
k=d

d1
bX
c

2
n
1
pk (1 p)nk
k

(4.13)

k=0

4.6 +Codigos de Hamming: idea e implementacion


Los c
odigos de Hamming fueron descubiertos en 1949 por Golay y en 1950 por
Richard Hamming. La distancia mnima de estos codigos siempre es 3. De donde
determinamos f
acilmente, por lo visto en este captulo, que son detectores de hasta
dos errores y correctores de un error (un bit erroneo) por palabra. Estos codigos los
retomaremos un poco mas adelante y con mayor generalidad mas adelante, cuando
sepamos algo de c
odigos lineales, pero es conveniente entrar en contacto con ellos.
La idea central de los codigos de Hamming es, como explica el mismo Hamming
en [5], a
nadir a cada palabra de longitud n tantos bits como sea necesario para poder
expresar cualquier n
umero entre 0 y n + 1, de tal forma que sea posible expresar en
esos bits el ndice del bit equivocado, suponiendo que solo sea uno. Para hacer esto se
generaliza el concepto de bit de paridad que ya revisamos. Por cada palabra se a
naden
varios bits de paridad, cada uno de ellos verifica la paridad de un subconjunto de bits

4.6 C
odigos de Hamming: idea e implementacion

93

de la palabra. Estos subconjuntos tienen intersecciones no vacas pero ninguno de ellos


puede ser obtenido sumando algunos otros.
Si un bit de paridad, por ejemplo, verifica las posiciones 2, 3 y 5 de una palabra,
otro verifica las posiciones 1, 3 y 7, y otro mas las posiciones 3, 4 y 6, y los tres bits de
paridad dicen que alguno de los bits que verifican esta mal, evidentemente el bit err
oneo
es el 3. Este es el objetivo de que los conjuntos verificados por cada bit de paridad no
sean ajenos. Pero si, por ejemplo, tenemos un bit que verifica las posiciones 1, 3, 4 y 5,
otro que verifica las posiciones 2, 3, 4 y 6 y un tercero que verifica las posiciones 1, 2, 5 y
6; entonces el tercer bit es completamente in
util, no proporciona informaci
on adicional,
si sumamos las posiciones verificadas por los otros dos obtenemos las del tercero.
Nos abocaremos a describir un ejemplo sencillo de codigo de Hamming, el de palabra
de longitud siete. Cuantos bits son necesarios para decir cualquier n
umero entre 0 y 7
inclusive? tres. As que en el codigo de Hamming de longitud 7, tres de los bits son de
verificaci
on de paridad y por tanto los cuatro restantes son utilizados para almacenar el
dato verdadero que se quera enviar o almacenar. El proceso en general es el siguiente:
1. El emisor recibe entonces una cuarteta de bits a enviar o almacenar, con base en
estos bits calcula tres bits mas, los bits de paridad.
2. El emisor forma una palabra de siete bits intercalando los bits de paridad en la
cuarteta de bits de datos, como veremos mas adelante. Esta es la palabra de
c
odigo.
3. Se enva la palabra de codigo de siete bits a un receptor.
4. El receptor recibe los siete bits y procede a hacer el calculo de un n
umero de tres
bits (estos tres bits no son los mismos que los de paridad ya mencionados, s
olo
dependen de ellos). Este n
umero de tres bits es llamado sndrome.
5. El sndrome, en el caso particular de los codigos de Hamming, resulta ser: cero si
no se detect
o ning
un error (la palabra recibida es del codigo) o bien, si est
a entre
1 y 7, el ndice del bit erroneo en caso de que haya ocurrido solo un error.
6. Con base en el valor del sndrome se procede a negar el bit de la palabra recibida
indicado por el o bien nada.
7. Se recuperan los cuatro bits de datos de la palabra recibida y corregida.
En la tabla 4.3 aparecen todos los posibles sndromes de tres bits. Salvo el 000 los
dem
as son ndices de la palabra de siete bits, que se
nalan el bit erroneo. Prestemos
atenci
on al bit menos significativo de los n
umeros que aparecen en la tabla (este es el
procedimiento adoptado por Hamming en [5]), este bit esta prendido en los ndices 1,
3, 5 y 7, es decir, cuando el bit erroneo es el 1, 3, 5 o 7 de la palabra debe valer 1 el bit
menos significativo del sndrome. Si ahora nos fijamos en el bit de en medio notaremos
que est
a prendido en los ndices 2, 3, 6 y 7, as que cuando el bit erroneo sea alguno

94

Codificacion para detectar y corregir errores

Indice
0
1
2
3
4
5
6
7

Sndrome
000
001
010
011
100
101
110
111

Tabla 4.3: Los posibles sndromes en un codigo de Hamming de siete bits.

de esos debe prenderse el segundo bit del sndrome. Siguiendo el mismo procedimiento
vemos que el bit m
as significativo del sndrome debe prenderse cuando el bit err
oneo
sea el 4, 5, 6 o 7.
Perfecto, ahora sabemos que posiciones deben ser verificadas por cada bit de paridad. Pondremos un bit de paridad en la posicion 1 de la palabra (es decir el bit m
as
significativo de ella), ese bit de paridad completa un n
umero par de unos considerando
las posiciones 1, 3, 5 y 7. El segundo bit de paridad aparece en la posicion 2 y hace que
el n
umero de unos de las posiciones 2, 3, 6 y 7. El u
ltimo bit de paridad se pone en la
posici
on 4 y completa un n
umero par de unos en las posiciones 4, 5, 6 y 7.
Al momento de recibir una palabra de siete bits debemos obtener su sndrome: hay
tres maneras de hacerlo, por supuesto las tres son equivalentes solo que dos de ellas son
atajos para hacerlo f
acil. Formalmente hablando hay que multiplicar la palabra recibida
(escrita como vector columna, el bit mas significativo arriba) por la matriz siguiente,
conocida como H2 (3) (matriz de Hamming binaria de tres renglones):

0 0 0 1 1 1 1
0 1 1 0 0 1 1
(4.14)
1 0 1 0 1 0 1
Esto es equivalente a calcular el bit de paridad que debera estar en la posici
on 1
(que corresponde a las posiciones 1, 3, 5 y 7), si es igual al que viene en la palabra
recibida entonces poner un cero como bit menos significativo del sndrome, si no poner
1. Calcular el de la posicion 2 (posiciones 2, 3, 6 y 7), si coincide con el que viene en
la palabra recibida poner cero en el segundo bit del sndrome, si no poner 1. Calcular
el u
ltimo (posiciones 4, 5, 6 y 7), y si coincide con el bit 4 de la palabra recibida poner
0 de bit m
as significativo del sndrome, de otro modo poner 1. Esto es equivalente a
calcular el xor de la terna de paridad calculada sobre la palabra recibida y la terna de
paridad recibida. Lo que podemos abreviar usando el tercer metodo para calcular el
sndrome.
Desde un punto de vista practico, orientado a la implementacion del c
odigo en

95

4.7 Esferas y c
odigos perfectos

circuitos digitales, es posible calcular el sndrome de la siguiente manera: Llamemos r a


la palabra recibida considerada como vector binario, con r[i] denotamos el i-esimo bit de
la palabra, el ndice 1 corresponde al bit mas significativo, el siete al menos significativo.
Sea s el sndrome de tres bits considerado como vector.
s[1] = r[4] r[5] r[6] r[7]
s[2] = r[2] r[3] r[6] r[7]
s[3] = r[1] r[3] r[5] r[7]
Llamemos c a la cuarteta de bits de datos que se quieren enviar y e a la palabra
enviada.
e[1] = c[1] c[2] c[4]
e[2] = c[1] c[3] c[4]
e[3] = c[1]
e[4] = c[2] c[3] c[4]
e[5] = c[2]
e[6] = c[3]
e[7] = c[4]

EJEMPLO 4.8
Supongamos que deseamos enviar 1101. Entonces la palabra enviada es: 1010101.
Supongamos que se estropea el bit 6 de la palabra, es decir, se recibe la cadena 1010111.
Por lo que el sndrome es:

1
0


1
0 0 0 1 1 1 1

0 1 1 0 0 1 1 0 = (110)
(4.15)

1
1 0 1 0 1 0 1

1
1
lo que por cierto es un seis escrito en binario. Para corregir el bit erroneo podemos
hacer una m
ascara llena de ceros, salvo el bit de ndice especificado por el sndrome, es
decir, el sexto bit: 0000010 y hacer un xor de esto con la palabra recibida, el xor tiene
la cualidad de que si se usa una mascara con unos en ciertas posiciones como operando,
entonces el resultado del xor es el otro operando con los bits que tiene prendidos la
m
ascara negados. As en este caso: 1010111 0000010 = 1010101 que es justo lo que
nos enviaron.

96

Codificacion para detectar y corregir errores

4.7 +Esferas y codigos perfectos


Hemos estado tratando con cadenas de codigo y luego, ayudados por la noci
on
de distancia, adoptamos reglas de decision que mapean cualquier cadena recibida de
longitud n sobre nuestro alfabeto, a una cadena valida del codigo, la mas cercana a
la recibida. Es conveniente formular mas formalmente estas nociones de vecindad de
una palabra, un concepto que abarque todas las cadenas que distan de la palabra central
en menos que una cierta distancia.

Definici
on 4.11 Sea x una cadena en Znr y sea % 0. La esfera Srn (x, %) con centro en x y
radio % es el conjunto de todas las cadenas en Znr cuya distancia a x es, a lo m
as, %.
Srn (x, %) = {y Znr | d(x, y) %}

EJEMPLO 4.9
En Z32 la esfera Srn (101, 2) = {101, 001, 111, 100, 011, 000, 110}

Por supuesto podemos hablar del volumen de una esfera.

Definici
on 4.12 El volumen de una esfera Srn (x, %) es el numero de cadenas en ella.
Por supuesto el volumen de una esfera de un cierto radio no depende de la cadena
en la que la esfera est
a centrada, solo del radio, la longitud de las cadenas y el alfabeto.
El n
umero de cadenas r-arias de longitud n que distan k unidades de otra es:


n
(r 1)k
k
As que el volumen de una esfera de radio % es:
Vrn (%)


% 
X
n
=
(r 1)k
k
k=0

en Zn2
V2n (%)


% 
X
n
=
k
k=0

Ahora tenemos un concepto u


til: sabemos que un codigo tiene cierta capacidad de
detectar y corregir errores. Que corrija errores significa que cuando una palabra es

4.7 Esferas y c
odigos perfectos

97

recibida luego de haber sido alterada por el canal, el resultado es una palabra diferente
de aquella que fue enviada, si ocurrieron k errores durante la transmision la palabra
recibida estar
a a una distancia k de la palabra de codigo enviada, si k es menor que
nuestro famoso n
umero v = b d1
o un n
umero de errores que es
2 c significa que ocurri
posible corregir, la palabra recibida esta en una esfera de radio menor a v, que como
veremos tiene nombre especial.

Definici
on 4.13 Sea C un (n, M, d)-codigo r-ario. El radio de empaque de C, que denotaremos
con Pr(C) es el radio mas grande posible para un conjunto de esferas disjuntas centradas,
dada una, en una palabra de codigo. El conjunto de esferas Srn (ci , Pr(C)) (ci C), es
llamado las esferas de empaque para C.
Por supuesto el valor del radio de empaque depende de la distancia mnima del
c
odigo. Necesitamos encontrar el radio mas grande posible tal que ninguna esfera de
ese radio, Pr(C), se intersecte con otra. Habra en el codigo dos palabras cuya distancia
es la mnima de las distancias entre las palabras del codigo, cada una de ellas tendr
a
a su alrededor una esfera de radio Pr(C) y deseamos que las esferas no se intersecten,
as que el radio de empaque tiene que ser menor a la mitad de la distancia entre esas
dos palabras. Si fuera exactamente la mitad o mas, las esferas alrededor de la pareja de
palabras de c
odigo mas cercanas, se intersectaran.

Teorema 4.8 El radio de empaque de un (n, M, d)-codigo es Pr(C) = b d1


2 c.
Demostraci
on:
Sea d la distancia mnima de un codigo C, sean x y y las dos palabras de c
odigo m
as
cercanas en C:
d = d(x, y)
Si d es par el radio d/2 hace que las esferas se intersecten en una cadena en el punto
medio. El radio de empaque de C debe ser b d1
2 c con lo que las esferas alrededor de x
y y no se intersectan (de hecho hay una palabra de codigo que no pertenece a ninguna
de las dos esferas).
Si d es impar el radio de empaque debe ser d1
2 con lo que ambas esferas permanecen
disjuntas y no queda ninguna cadena fuera de esfera entre ambas.
Ambos casos quedan contemplados en Pr(C) = b d1

2 c.
Tenemos ahora un nuevo lenguaje con el que se puede reformular un teorema ya
conocido.

Corolario 4.4.9 Un codigo es corrector de exactamente v errores si y solo si Pr(C) = v.


En la demostracion del teorema ya vimos que es posible que algunas cadenas de
Znr no esten contenidas en algunas de las esferas de empaque, podran salirse muchas
de ellas, si sale una entre las palabras mas cercanas entonces sale al menos una por

98

Codificacion para detectar y corregir errores

cada pareja. Cuando esto no ocurre, cuando el radio de empaque logra que las esferas
contengan a todo Znr , se dice que el codigo es perfecto: el radio de empaque es impar y
la distancia entre parejas de palabras de codigo es la misma.

Definici
on 4.14 Un (n, M, d)-codigo r-ario C = {c1 , . . . , cM } con alfabeto Zr es perfecto si
las esferas de empaque son una particion de Znr .
Si las esferas de empaque son una particion entonces el volumen sumado de ellas
debe ser la cardinalidad total de Znr .

Vrn



d1
2



= rn

o lo que es lo mismo:
d1
bX
c

2
n
(r 1)k = rn
M
k

k=0

EJEMPLO 4.10
Sea C = {00000, 11111} a un codigo como este se le denomina c
odigo de repetici
on en
este caso de longitud 5. En un alfabeto r-ario un codigo de repeticion de longitud n,
denotado Repr (n), consta de r palabras, cada una con n repeticiones de cada uno de
los smbolos del alfabeto. En nuestro caso C = Rep2 (5). En nuestro caso d(C) = 5, (en
general en un c
odigo de repeticion la distancia mnima es la longitud de las palabras).
La suma de las cadenas dentro de las esferas de empaque de radio b 51
2 c = 2 es:

2 
X
5
2
= 32
k
k=0

que es justamente el n
umero total de cadenas binarias de longitud 5, por lo tanto el
c
odigo de repetici
on Rep2 (5) es perfecto. En general el codigo de repeticion es perfecto
cuando r = 2 y n = 2m + 1.

99

4.8 Equivalencia de c
odigos

4.8 +Equivalencia de codigos

EJEMPLO 4.11
Sea C = {c1 = 00100, c2 = 00011, c3 = 11111, c4 = 11000}, C1 es un (5, 4, 3)-c
odigo
binario.
Tambien D = {d1 = 00000, d2 = 01101, d3 = 10110, d4 = 11011} es un (5, 4, 3)c
odigo binario.
As que, con lo que sabemos hasta ahora, en cualquier aplicacion en la que es u
til C
es igualmente u
til D. Tienen la misma capacidad de deteccion y correccion de errores,
son equivalentes.
Formalmente hablando la nocion de equivalencia de codigos es un poco m
as estricta,
no es cierto que todos los (n, M, d)-codigos sean equivalentes. En particular nuestros
c
odigos C y D realmente lo son.

Definici
on 4.15 Sean M y M0 las matrices cuyos renglones son las palabras de los codigos
C y C 0 respectivamente. Se dice que C es equivalente a C 0 si es posible obtener M0 a
partir de M haciendo las siguientes operaciones:
1. Cambiar el orden de las columnas de M.
2. Dada una columna de M y una permutacion de los smbolos en el alfabeto A del
c
odigo (es decir, una funcion biyectiva de A en A), aplicar la permutaci
on a los
elementos de la columna.
3. Intercambiar renglones de M.

EJEMPLO 4.12
Retomemos nuestro ejemplo anterior. Si
obtenemos:

0
0
C=
1
1

acomodamos las palabras de C en una matriz


0
0
1
1

1
0
1
0

0
1
1
0

0
1

1
0

100

Codificacion para detectar y corregir errores

Si cambiamos el renglon 3 por el 4 (la numeracion de los renglones y de las columnas


se comienza en 1), obtenemos:

0 0 1 0 0
0 0 0 1 1

1 1 0 0 0
1 1 1 1 1
Ahora cambiamos la columna 2 por la

0 0
0 1

1 0
1 1
Ahora, aplicando la operacion que
bits de la columna 3.

0
0

1
1

4:
1
0
0
1

0
0
1
1

0
1

0
1

puede parecer mas extra


na, invertimos todos los

0 0 0 0
1 1 0 1

0 1 1 0
1 0 1 1

Por cierto los renglones de esta u


ltima matriz corresponden a las palabras en el
c
odigo D del ejemplo anterior, lo que confirma que C y D son equivalentes.
Hay que notar que en el codigo C no tiene la palabra 0 y el codigo D s.

Teorema 4.10 Si el alfabeto A de un codigo contiene el smbolo 0 entonces cualquier codigo


sobre A es equivalente a uno que contiene la palabra 0.

4.9 +Tasa de transmision y de correccion


Que caractersticas son deseables en un codigo? Es bueno tener una gran expresividad, poder decir muchas cosas, mientras mas palabras de codigo tengamos mejor. As
que dada la longitud n de las palabras de un codigo r-ario nos gustara tener un n
umero
de palabras cercano a rn .
Por otra parte nos gustara tener un codigo muy versatil, que pueda ser usado en
una gran variedad de canales, con muchas tasas de error diferentes, esto es, nos gustara
tener un c
odigo que pueda corregir y/o detectar muchos errores, es decir, con una gran
distancia mnima.

101

4.9 Tasa de transmisi


on y de correccion

Por una parte entonces queremos tener muchas palabras de codigo, tantas como sea
posible, mientras m
as nos acerquemos a An mejor. Pero por otra parte deseamos tener
una gran distancia mnima, conforme mas nos acerquemos a An la distancia mnima se
reduce. As que hay un compromiso entre las dos cualidades deseables en un c
odigo:
eficiencia y robustez.
Para medir ambas cosas de manera relativa a la longitud de las palabras necesitamos
un par de definiciones:

Definici
on 4.16 La tasa de transmision de un (n, M )-codigo C, r-ario es:
R(C) =

logr M
1
n

N
otese que logr M nos dice que tantos smbolos, que longitud de palabra, es realmente necesaria para expresar M cosas en base r y n es la longitud de palabra que
realmente tenemos.

Definici
on 4.17 La tasa de correccion de error de un (n, M, d)-codigo C, es:
(C) =

b d1
2 c
n

N
umero de errores que pueden corregirse en cada palabra entre el tama
no total de
la palabra.

EJEMPLO 4.13
Recordemos nuestros codigos de repeticion, aquellos que solo tienen dos palabras una
hecha puramente de 0 y otra de 1. El codigo binario de repeticion de longitud n, Rep2 (n)
tiene las siguientes caractersticas:
R(Rep2 (n)) =

1
n

para n impar, de la forma n = 2u + 1


(Rep2 (n)) =

u
1
=
n
2+

1
u

cuando n crece, u tambien lo hace y (Rep2 (n)) tiende a 1/2. Es decir, en el lmite es
capaz de corregir tantos errores como la mitad de la longitud de palabra.

Ahora podramos preguntarnos: dados ciertos valores para la longitud de palabra,


n, y para la distancia mnima, d, cual es el codigo mas grande (con m
as palabras)

102

Codificacion para detectar y corregir errores

que podemos tener? n y d son los valores que determinan la eficiencia y la robustez de
un c
odigo as que esos son los valores que le interesaran a cualquiera que dise
nara un
c
odigo.
Lo que deseamos encontrar es:
Ar (n, d) = max{M | existe un (n, M, d) c
odigo r ario}
Este es uno de los problemas mas importantes en teora de codigos y por supuesto es
tema de investigaci
on permanente. Hasta ahora se conocen solo unos pocos resultados,
(vease por ejemplo [10]):
A2 (4, 3) = 2
o
A2 (5, 3) = 4
Algunos otros resultados evidentes:
Ar (n, d) rn
Ar (n, 1) = rn
Ar (n, n) r

4.10 +El teorema de la codificacion con ruido


Al igual que el teorema de la codificacion sin ruido, el de la codificacion con ruido se lo
debemos Claude Shannon. Aparecio en el mismo trabajo de 1948 que constituye la tesis
doctoral de Shannon. No nos daremos a la tarea de demostrarlo, solo lo enunciaremos
y procuraremos motivarlo.
Supongamos que tenemos un (24, 4096, 8)-codigo binario y que lo utilizamos sobren
un canal simetrico binario con probabilidad de error de 0.1. El valor esperado de bits
err
oneos por cada palabra de codigo es 2.4, as que nuestro codigo es bastante u
til, en
promedio tendremos menos bits erroneos de los que nuestro codigo puede corregir. Si
el canal tuviera una probabilidad de error de 0.13 entonces estaramos en problemas,
el valor esperado de bits alterados por palabra es de 0.13 24 = 3.12 lo que excede
la capacidad del c
odigo para corregir errores (3). Ah! pero en ese caso podramos
usar un c
odigo de Hamming. Pero que dices insensato?, pensara probablemente el
lector: el c
odigo de Hamming tiene distancia mnima 3, puede corregir hasta 1 error.
Ciertamente, un error en una palabra de siete bits es decir 1/7 = 0.1428. Nuestro canal
tiene una probabilidad de error de 0.13, es decir, en una palabra de siete bits se espera
que haya 0.13 7 = 0.91 < 1 errores, as que resulta bastante u
til.

103

4.10 El teorema de la codificacion con ruido

De lo que estamos hablando aqu es, por una parte, de la ya mencionada tasa de
transmisi
on de un codigo. Si esta es suficientemente baja entonces nuestro c
odigo es
u
til. Por otra parte estamos hablando de que tan ruidoso es el canal. Para continuar
debemos definir la informacion mutua entre dos smbolos.

Definici
on 4.18 La informacion mutua de los smbolos ai y bj , I(ai , bj ) es:

I(ai , bj ) = log2

1
p(ai )


log2

1
p(ai | bj )



Hay que notar que I(ai , bj ) es tanto mas grande cuanto mas peque
no sea log2 p(ai1|bj ) ,
es decir cuanto m
as grande sea p(ai | bj ), es decir, mientras mas frecuente sea la ocurrencia de ai luego de que ha ocurrido bj , o sea, mientras mas ligados esten ai y bj . Si
casi siempre que ocurre bj ocurre ai , entonces p(ai | bj ) es grande y entonces cuando
vemos que ha ocurrido bj sabemos que es muy probable que haya ocurrido ai . Otra
manera de verlo es: la informacion mutua de ai y bj es el n
umero de preguntas que hay
que hacer, a partir de nada, para deducir ai menos el n
umero de preguntas que hay que
hacer para deducir ai si ya sabemos que ha ocurrido bj . Si nos fijaramos en el
arbol de
decisi
on para determinar ai , hay un cierto n
umero de aristas que recorrer si partimos
de la raz, pero si ya sabemos que ha ocurrido bj , si ya tenemos algo de informaci
on
previa, probablemente ya llevemos algo del recorrido hecho y estemos parados en alg
un
nodo cercano al asociado a ai , el camino que resta, desde donde estemos hasta ese nodo
es la informaci
on adicional que necesitamos para determinar ai a partir de bj , mientras
m
as peque
no sea ese camino adicional significa que ai y bj estan mas ligadas, bj nos da
mucha informaci
on acerca de ai .
Si nos fij
aramos ahora en la informacion de cada posible cadena en n (donde
es el alfabeto), con base en la de sus smbolos constitutivos y luego nos fij
aramos en el
promedio de la informacion conjunta de dos cadenas cualesquiera, una de ellas en un
c
odigo y la otra en todo An podemos pensar en:
I(A, B) = H(A) H(A | B)
donde A est
a en el codigo y B puede o no estarlo.
Imaginemos ahora que B en la expresion anterior es una palabra recibida, est
a en
n
, y A es una palabra del codigo. Si el canal es casi completamente confiable, sin
ruido, entonces las probabilidades condicionales son casi cero y por tanto H(A | B) es
casi cero y entonces I(A, B) es casi H(A) la entropa de la fuente original que produce
los datos que entran al canal. Si en cambio el canal no es confiable H(A | B) crece y
I(A, B) disminuye. I(A, B) es entonces una manera de cuantificar que tan confiable es
un canal, que tanto trasmite ntegramente la informacion que entra en el. A esto se le

104

Codificacion para detectar y corregir errores

llama la capacidad del canal cuando se toma el maximo.

Definici
on 4.19 La capacidad de un canal C es:

Cap(C) =

max

distrib. de entrada

I(A, B)

donde A es una cadena de entrada y B es una cadena de salida.


Lo que hemos estado diciendo en esta seccion es que, dado un canal con cierta
capacidad, es posible corregir los errores que el canal introduce si el codigo usado para
transmitir la informaci
on tiene suficiente redundancia, es decir, si la tasa de transmisi
on
del c
odigo es suficientemente baja.
Por cierto, la capacidad de un canal arbitrario no es trivial de calcular. Pero para
un canal simetrico binario con probabilidad de error p es:

Cap(p) = 1 + p log2 (p) + (1 p) log2 (1 p)

Teorema 4.11 (De la codificacion ruidosa para un canal simetrico binario) Para un canal
simetrico binario con probabilidad de error p y capacidad Cap(p). Si R < Cap(p),
entonces para toda > 0 existen n suficientemente grande y un (n, M )-codigo C tal que
la tasa de transmisi
on de C es, al menos, R y P (error de decodif icaci
on) < .

4.11 +Codigos de Golay: idea e implementacion


M
as adelante retomaremos los codigos de Golay, pero por ahora veremos como implementar uno de ellos. El codigo de Golay que revisaremos es un (24, 4096, 8)-c
odigo y
se le utiliz
o para transmitir las fotografas a color enviadas por las sondas Voyager en
la decada de los 1980.
El c
odigo est
a relacionado con la matriz A siguiente, en la que hemos puesto . para

105

4.11 C
odigos de Golay: idea e implementacion

denotar un 0 por claridad:

. 1 1 1 1
1 1 1 . 1

1 1 . 1 1

1 . 1 1 1

1 1 1 1 .

1 1 1 . .
A=
1 1 . . .

1 . . . 1

1 . . 1 .

1 . 1 . 1

1 1 . 1 1
1 . 1 1 .

1
1
1
.
.
.
1
.
1
1
.
1

1
1
.
.
.
1
.
1
1
.
1
1

1
.
.
.
1
.
1
1
.
1
1
1

1
.
.
1
.
1
1
.
1
1
1
.

1
.
1
.
1
1
.
1
1
1
.
.

1
1
.
1
1
.
1
1
1
.
.
.

1
.
1
1
.
1
1
1
.
.
.
1

(4.16)

Si con I12 denotamos la matriz identidad de orden 12 entonces a la matriz que resulta
de colocar unidas la identidad de orden 12 y la matriz 4.16 le llamaremos G24 = (I12 |
A), esta es la matriz de Golay de 24 columnas y 12 renglones.
Hay que notar que la matriz A es simetrica (es igual a su transpuesta) y tambien la
identidad lo es. As que si en vez de poner la identidad a la izquierda y A a la derecha
pusieramos la identidad arriba y la matriz A abajo obtendramos Gt24 , la transpuesta
de G24 .
Si multiplic
aramos un vector x de 12 entradas binario, dispuesto como un rengl
on,
t
por G24 obtendramos un vector columna c de 24 entradas tambien binario. Esto es lo
que hay que hacer para obtener el codigo de Golay G24 de x. Es decir, el c
odigo de x es
el producto c = Gt24 x. As que tomamos 12 bits de datos, los codificamos en 24 bits y
los enviamos.
Codificar es f
acil, pero decodificar ya no lo es tanto. El codigo de Golay que estamos revisando tiene distancia mnima 8, por lo que puede corregir hasta 3 errores. El
procedimiento en general es el siguiente:
1. Determinar, a partir de la palabra recibida d, de 24 bits, la palabra que se debi
o
haber recibido c (o mejor dicho, la que consideremos que es mas probable que se
nos haya enviado), tambien de 24 bits.
2. Buscar en una lista la palabra c para obtener los 12 bits de datos reales.
Por supuesto lo difcil es hacer lo primero y para hacerlo necesitamos calcular el
patr
on probable de error. Es decir, una palabra e de 24 bits de longitud, con unos en
las posiciones de error probables y cero en las correctas, de tal forma que e d = c.
Para determinar el patron de error se hace lo siguiente:
1. Se calcula el sndrome s = G24 d
2. Si w(s) 3 (el n
umero de unos en el sndrome es, a lo mas, tres), entonces el
patr
on de error es s desplazado 12 bits a la izquierda e = s << 12.

106

Codificacion para detectar y corregir errores

3. Si w(s) > 3 entonces buscamos un ndice i {0, . . . 11} tal que la columna (o
rengl
on, al cabo es simetrica) i-esima de la matriz A difiera de s en, a lo m
as,
2. Si existe dicha columna el patron de error es e = ((s A[i]) << 12) + I12 [i],
donde + denota el or bit a bit.
4. Si no hubo tal columna obtenemos s1 = As
5. S w(s1 ) 3 entonces e = s1
6. Si w(s1 ) > 3 entonces buscamos un ndice i {0, . . . 11} tal que la columna (o
rengl
on) i-esima de la matriz A difiera de s1 en, a lo mas, 2. Si existe dicha
columna el patr
on de error es e = (s1 A[i]) + (I12 [i] << 12), donde + denota el
or bit a bit.
7. Si esto no ocurre estamos perdidos, ocurrieron muchos errores.

+Ejercicios
4.1 Que se debera hacer con un canal simetrico binario cuya probabilidad de error
es mayor que 0.5?
4.2 Sea C = {000, 001, 111} un codigo cuyas palabras son enviadas a traves de un
canal simetrico binario con probabilidad de crossover p = 0.01. Usando la definici
on de
regla de decisi
on de m
axima verosimilitud (la que maximiza las forward probabilities),
decodifique 010.1
4.3 Retomando el ejercicio anterior. Si P (x) = 1/3 es la probabilidad de que una
palabra x cualquiera del conjunto C sea enviada a traves del canal por un emisor, c
omo
decodificara un observador ideal la palabra 010?, que condicion se debe cumplir para
que un decodificador de maxima verosimilitud coincida con un observador ideal?
4.4

Sea C = {001, 011} un codigo cuyas palabras viajan por un canal binario tal que:

1. p(0 recibido | 0 enviado) = 0.1


2. p(1 recibido | 0 enviado) = 0.9
3. p(1 recibido | 1 enviado) = p(0 recibido | 1 enviado) = 0.5
1

(0.99)2 (0.01) = 0.009801, (0.99)(0.01)2 = 0.000099

EJERCICIOS

107

calcule las probabilidades a posteriori, p(000 recibido | 001 enviado) y


p(000 recibido | 011 enviado) coincide el esquema de decodificacion de m
axima verosimilitud con el de vecino mas cercano?, por que?, es decir que condiciones debe
satisfacer el canal para que coincidan?
4.5 Sea C = {0000000000, 1111100000} Diga cuantos errores es capaz de detectar y
de corregir? Esto es, diga cuanto valen u y v para decir que es un codigo detector de
exactamente u errores y corrector de exactamente v. Que entrega una regla de decisi
on
de vecino m
as cercano si se recibe 0000001111, suponga que se envio 0000000000 se
corrigieron los errores?, contradice esto su calculo de v?, explique.
4.6 Muestre que un codigo perfecto debe tener distancia mnima impar. Diga si C =
{00000000, 00001111, 11111111} es perfecto.
4.7 Suponga que se utiliza el codigo de Hamming de 7 bits descrito en el texto. Decodifique las siguientes palabras:
1. 0011001
2. 0011011
3. 1011001
4.8

Son equivalentes los codigos generados

0 0

0 1
M1 =
1 1

0 1
M2 = 1 0
1 0

por las siguiente matrices?

1 1
1 0
0 0

0 1
0 1
1 0

4.9 Hemos presentado el cdigo de Golay de 24 bits. Existen otros codigos de Golay, en
particular un (11, 64, 5)-codigo ternario y un (23, 4096, 7)-codigo binario. Demuestre que
cualquier (23, 4096, 7)-codigo binario y cualquier (11, 64, 5)-codigo ternario son perfectos.
4.10 En 1694 Isaac Newton y David Gregory discutan acerca de un problema relacionado con nuestras esferas de empaque. Se preguntaban cual sera el maximo n
umero
de esferas s
olidas indeformables e indenticas que pueden ponerse alrededor de una de
ellas. Newton pensaba que eran 12, Gregory que deban ser 13. El problema es referido
frecuentemente como el problema del n
umero de esferas besadoras (en ingles se oye un
poco menos ridculo: The kissing number problem) o el problema de las 13 esferas. En
una dimensi
on la respuesta es, claramente, 2, en 3 dimensiones se sabe que la respuesta
es la de Newton (12), en 4 es 24, se sabe tambien que en 8 dimensiones la respuesta2
2

J.H. Conway y N.J.A. Sloane, Sphere Packings, Lattices and Groups, 3a. ed., Springer, 1998. O
bien: http://en.wikipedia.org/wiki/Kissing number

108

Codificacion para detectar y corregir errores

es 240 y en 24 es 196560. Cual es este n


umero en 2 dimensiones?, esto tambien est
a
relacionado con la reutilizacion de frecuencias en una red celular. Investigue m
as a
fondo.

C
odigos lineales

5.1 +Definicion, caractersticas


Hasta ahora nuestro analisis general acerca de codigos para detectar y corregir errores
no ha supuesto gran cosa acerca del conjunto de palabras del codigo. No hemos exigido
ning
un requisito a este conjunto, salvo el de que todas las palabras sean del mismo
tama
no y que constituyan un espacio metrico (con la distancia de Hamming). Pero
en este captulo le daremos al conjunto de las palabras de codigo una estructura m
as
interesante, con la que podemos hacer deteccion y correccion de errores de manera m
as
eficiente.

Definici
on 5.1 Un codigo C Znp (con p primo) es un codigo lineal si C es un subespacio

vectorial de Znp . Si C tiene dimension k y distancia mnima d se dice que es un [n, k, d]c
odigo.
Por supuesto esta definicion implica que Znp es un espacio vectorial, los escalares que
estaremos usando son elementos de Zp y las operaciones (suma y producto) se realizan
tambien sobre Zp . Un espacio vectorial tiene definidas operaciones de suma y producto
por escalares, existe el neutro aditivo (vector cero, que denotamos 0) y el inverso aditivo
de cualquier elemento, el producto por escalar es asociativo y distribuye a la suma. El
hecho de que un c
odigo sea un subespacio vectorial significa que es, por s mismo, un
espacio vectorial, lo que significa que debe contener al vector cero.
Hay que notar que en la notacion para codigos lineales no se pone la cardinalidad
del c
odigo, s
olo su dimension, es decir, el n
umero mnimo de elementos en una base del
109

110

Codigos lineales

subespacio vectorial que constituye el codigo. Pero evidentemente estas dos cantidades
est
an relacionadas.
Si se tienen k vectores en la base de un codigo, {x1 , x2 , . . . , xk }, cualquier otra
palabra del c
odigo x debe ser expresable como combinacion lineal de los vectores de la
base, es decir, deben existir 1 , 2 , . . . , k Zp tales que:
x = 1 x1 + 2 x2 + . . . + k x k
como cada i est
a en Zp , hay p posibles valores para elegirla, as que en total hay
k
M = p palabras de c
odigo.
Hemos demostrado el siguiente teorema:

Teorema 5.1 Un [n.k, d]-codigo sobre Zp , es un (n, pk , d)-codigo

EJEMPLO 5.1
C1 = {0000, 1011, 0110, 1101} en Z42 es un codigo lineal y una base para el es B =
{1011, 0110} as que es un [4, 2]-codigo y un (4, 4)-codigo.

Para determinar la distancia mnima de un codigo arbitrario hay que calcular la distancia entre cualesquiera dos palabras de el y seleccionar la mnima de estas distancias,
es decir, hay que calcular:


M
2
distancias. En un c
odigo lineal esta labor es mas sencilla, basta con contar el n
umero
de unos (el peso), de la palabra distinta de la palabra (vector) cero, que menos unos
tenga y ese n
umero, llamado el peso del codigo, es la distancia mnima del mismo. S
olo
hay que calcular M pesos.

Definici
on 5.2 El peso de un codigo C, denotado w(C), es el mnimo peso de las palabras
distintas de cero en C.

Teorema 5.2 Si C es un codigo lineal d(C) = w(C).


Demostraci
on:
Sea C un c
odigo lineal y sean c, d C tales que d(C) = d(c, d). Como c y d est
an en
un c
odigo lineal y este es un subespacio vectorial, entonces c d C. Pero c d es
una palabra que tiene cero en las posiciones en las que c y d coinciden y algo distinto

111

5.2 La matriz generadora

de cero en las que difieren. As que c d es una palabra del codigo y su peso es
w(c d) = d(c, d), por lo tanto:
d(C) = d(c, d) = w(c d) w(C)
Por otra parte como w(C) es el mnimo peso de una palabra en C, debe existir una
palabra e en C tal que w(e) = w(C), entonces:
w(C) = w(e) = w(e 0) = d(e, 0) d(C)
dado que la palabra 0 tambien esta en el codigo y por tanto e 0 tambien.

5.2 +La matriz generadora


Dado que un c
odigo lineal es un subespacio vectorial de dimension k, entonces queda
completamente descrito si se dan k vectores que constituyan una base del c
odigo. Es
decir, para especificar completamente un codigo lineal basta con dar k palabras de el
y no las pk que lo constituyen en su totalidad. El resto de las palabras son todas las
combinaciones lineales de la base.

Definici
on 5.3 Sea C un codigo lineal con base B = {b1 , b2 , . . . , bk } si bi = bi1 bi2 . . . bin
denota la i-esima palabra de la base, entonces la

b11 b12 . . .
b21 b22 . . .

..
..
.
. ...

matriz de k n:

b1n
b2n

..
.

bk1 bk2 . . . bkn


es la matriz generadora de C.
De nuestro curso introductorio de algebra lineal sabemos que la cualidad de los
elementos de una base de un espacio vectorial es que son vectores linealmente independientes, ninguno de ellos puede escribirse como combinacion de los demas. As que el
siguiente teorema es evidente.

Teorema 5.3 Sea G una matriz con elementos en Zp . G es una matriz generadora de un
c
odigo lineal si y s
olo si las cadenas en los renglones de G vistas como vectores son
linealmente independientes.

EJEMPLO 5.2

112

Codigos lineales

Los renglones de la matriz:




0 1 2 1
2 2 1 0

son linealmente independientes sobre Z3 , as que forman una base para un [4, 2]-c
odigo
lineal ternario C. De hecho:
C = {(0121) + (2210) | , Z3 }

Dado un conjunto de vectores V = {a1 , a2 , . . . , as } denotaremos como ha1 , a2 , . . . , as i


el conjunto de todas las palabras que pueden expresarse como combinacion lineal de los
elementos de V , este es el subespacio generado por V .

EJEMPLO 5.3
Sea C = h1101, 01101, 10100i. Los vectores dentro de los parentesis triangulares no son
linealmente independientes, por ejemplo:
10100 = 1 11001 + 1 01101
as que no son una base. En cambio el conjunto B = {11001, 01101} s lo es, as que:
C = h1101, 01101, 10100i = h11001, 01101i
De ver la cardinalidad de B podemos decir que C es un codigo bidimensional, es
decir, es un [5, 2]-c
odigo.
Su matriz generadora esta formada, como ya lo hemos dicho, por las palabras en
una base de C (como las de B), por ejemplo:


1 1 0 0 1
0 1 1 0 1
De hecho: C = {00000, 11001, 01101, 10100}

Algo importante que hay que notar porque lo usaremos con frecuencia, es el hecho
de que un c
odigo lineal C esta constituido por todas las combinaciones lineales de
elementos en la base de C (que por cierto, como lo hemos dado a entender, no es u
nica).
Si sumamos dos elementos cualesquiera de C el resultado estara en C porque la suma
tambien puede escribirse como combinacion lineal de los elementos de la base. Si en
cambio, sumamos dos elementos que no estan en el codigo, o uno que s esta y otro que
no, la suma tiene dos opciones:

113

5.3 Correcci
on de errores

1. No est
a en el codigo.
2. S est
a en el c
odigo y es la palabra 0.
Es decir, la u
nica posibilidad de que la suma de dos elementos este en el c
odigo, dado
que al menos uno de los sumandos no esta en el, es que la suma sea cero.

5.3 +Correccion de errores


Ya sabemos que el metodo de decodificacion de maxima verosimilitud es el de vecino
m
as cercano. As que dada una palabra recibida x, como encontramos la palabra del
c
odigo m
as cercana a x? En un codigo general tendramos que calcular la distancia
de x a todas y cada una de las palabras del codigo (en general s, aunque podramos
detenernos antes si encontramos una palabra con distancia uno), eso significa calcular
M distancias, donde M es el n
umero de palabras en el codigo. En un codigo lineal la
soluci
on es m
as simple.
Comenzaremos con un ejemplo.

EJEMPLO 5.4
Sea C = {0000, 1011, 0110, 1101}, entonces el complemento de C es el conjunto:
C = Z42 \ C = {1000, 0100, 0010, 0001, 0011, 0101, 1001, 1010, 1100, 1110, 0111, 1111}
N
otese que hemos puesto los elementos ordenados por peso.
Construyamos ahora una tabla. En el primer renglon de la tabla ponemos a todos los
elementos de C y luego, procedemos a poner los elementos de C colocando el elemento
de menor peso que podamos encontrar y que no haya sido incluido ya, al inicio de cada
rengl
on. El resto del renglon lo determinamos sumando el elemento que encabeza la
columna con el que encabeza el renglon.
0000
1000
0100
0001

1011
0011
1111
1010

0110
1110
0010
0111

1101
0101
1001
1100

En la tabla hay 16 elementos, todos distintos, as que tenemos a todo Z42 . Adem
as
si elegimos a cualquier elemento de la tabla, el vecino mas cercano a el que est
a en el
c
odigo es el que encabeza la columna donde aparece.

114

Codigos lineales

A la tabla mostrada en el ejemplo anterior se le denomina el arreglo est


andar del
1
c
odigo. A cada rengl
on se le denomina coset y al elemento inicial de cada rengl
on se le
llama lder del coset.
Interesante, si tenemos un codigo lineal simplemente construimos su arreglo est
andar
como sigue:
1. El primer rengl
on del arreglo estandar son todas las palabras del codigo empezando
por la palabra 0.
2. El primer elemento del renglon i-esimo es aquel elemento de peso mnimo de entre
aquellos que est
an en Znp \ C y que a
un no han sido incluidos en el arreglo.
3. El elemento en la columna j del i-esimo renglon se calcula sumando el primer elemento del rengl
on (lder del coset) con el que encabeza la columna j (un elemento
del c
odigo, por cierto).
y luego, cada vez que se recibe una palabra x la buscamos en el arreglo y suponemos
que en realidad nos fue enviada la palabra que encabeza la columna donde encontramos
a x.
Es interesante analizar el tercer renglon del arreglo estandar en nuestro ejemplo.
Notar
a el lector que el tercer elemento del renglon es 0010 una palabra que bien podra
haber aparecido al inicio del renglon, o al inicio de alg
un otro renglon, fue solo por azares
del destino que no fue elegida para encabezar un renglon dado que tiene el mismo peso
que el resto de los lderes de coset. Esto engendra una ambig
uedad, si recibimos 0010
decodificamos como 0110, pero bien podra ser 0000, al fin y al cabo la palabra recibida
dista lo mismo de cualquiera de las dos posibilidades. Esta ambig
uedad no puede ser
evitada a menos que ning
un elemento en un renglon i tenga el mismo peso que su lder.
M
as adelante veremos que se necesita para que esto ocurra.
El arreglo est
andar se genera sumando elementos del codigo con elementos que no
est
an en el. Adem
as los elementos que sumamos a los del codigo son siempre lo m
as
ligeros posible. Decodificamos un elemento como el encabezado de su columna. Lo que
estamos haciendo es suponer que en realidad nos fue enviado el elemento que encabeza
la columna y que los errores que ocurrieron en el camino hicieron que esta palabra
se modificara hasta quedar la cosa que recibimos. Para que esto ocurra debieron de
ocurrir los errores justo en el patron especificado por el lder del coset. Si lo analizamos
en binario es m
as f
acil de ver: supongamos que nos fue enviada la palabra 0110 con el
c
odigo de nuestro ejemplo anterior y que recibimos 0111 eso significa que el patr
on de
error es 0001, la palabra que sumada a la enviada nos da la recibida.
Hay algunas caractersticas del arreglo estandar que conviene hacer notar:
1. Est
an todas las cadenas de Znp por construccion.
1

Acr
onimo de Complete Ordered Set un conjunto completamente ordenado: dados dos elementos
cualesquiera podemos decir si uno es mayor o igual que el otro.

115

5.3 Correcci
on de errores

2. Como hay pk columnas y en total deben ser pn entradas, debe haber pnk renglones.
3. Como est
an todos los elementos de Znp y solo aparecen una vez entonces el conjunto
de renglones constituye una particion de Znp , por supuesto el conjunto de columnas
tambien. Cada elemento en una columna esta en la misma clase de equivalencia
del encabezado de la columna, equivalentemente cada elemento en un rengl
on est
a
en la misma clase de equivalencia del lder del coset.

Teorema 5.4 Dos palabras x, y Znp estan en el mismo coset si y solo si x y es una palabra
de c
odigo.
Demostraci
on:
Sean x y y dos palabras de Znp \ C en el mismo coset. Es decir, x = fi + cj y
y = fi + cr , n
otese que fi , el lder de coset, es com
un a ambas expresiones.
Entonces:
x y = cj cr C
Sean x, y Znp \ C tales que x y C. x y y deben estar en el arreglo est
andar, as
que las podemos escribir como x = fi + cj y y = fr + cs . Entonces sabemos que:
(fi + cj ) (fr + cs ) = c C
de donde:
fi + cj fr cs = c C
fi fr = c cj + cs
el lado derecho de la igualdad esta en C porque es resultado de operar con elementos de C. As que fi fr esta en C. Pero ning
un lder de coset est
a en C por
definici
on, as que estas f s no estan en C. La u
nica manera en que puede estar
en C una suma (resta) de elementos que no estan en C es que la suma sea cero,
as que:
fi fr = 0
de donde
fi = fr
por lo que x y y tienen entonces el mismo lder de coset y por tanto est
an en el
mismo coset.


116

Codigos lineales

umero de errores que un


Ahora es oportuno recordar nuestro conocido v = b d1
2 c, el n
c
odigo con distancia mnima d puede corregir. Transportado a nuestro contexto actual
significa que entre los lderes de coset deben estar aquellas palabras de peso menor o
igual a v y si el c
odigo es perfecto entonces todos los lderes de coset tienen peso menor
o igual a v. Por cierto si el codigo es perfecto no ocurre la ambig
uedad mencionada a
prop
osito del ejemplo, las esferas de empaque, que se ven como columnas del arreglo
est
andar, tienen intersecciones vacas.

5.4 +Probabilidad de decodificar correctamente


Para c
odigos en general tenemos expresiones que acotan por arriba y por abajo la
probabilidad de decodificar correctamente. En el caso de codigos lineales es posible
obtener el valor exacto de esta probabilidad. Otra ventaja mas de tener estructura.
Sea C un [n.k]-c
odigo lineal con arreglo estandar:
0
c2
...
cM
f2 f2 + c2 . . . f2 + cM
..
..
..
.
.
.
fq fq + c2 . . . fq + cM

(5.1)

Supongamos que tenemos un canal simetrico binario con probabilidad de error de


smbolo p. Si un lder de coset tiene peso w(fi ) entonces la probabilidad de que una
palabra de c
odigo tenga errores precisamente en las posiciones donde fi es distinto de
cero es:
P (fi = error) = pw(fi ) (1 p)nw(fi )

(5.2)

Ahora podemos sintetizar esto en el siguiente teorema.

Teorema 5.5 Sea C un [n, k]-codigo y sean f1 , f2 , . . . , fq los lderes de coset del arreglo estandar
de C. Si se transmite a traves de un canal simetrico binario con probabilidad de error
p entonces la probabilidad de que una palabra recibida sea decodificada correctamente
es:
q
X
P (decodif icar correctamente) =
pw(fi ) (1 p)nw(fi )
(5.3)
i=0

Si contamos el n
umero de lderes de coset de peso i y lo llamamos wi entonces
podemos reescribir 5.3 como:
P (decodif icar correctamente) =

n
X
i=0

wi pi (1 p)ni

117

5.5 Complemento ortogonal, codigo dual

EJEMPLO 5.5
Sea C = {0000, 1011, 0110, 1101}, el mismo codigo de nuestro ejemplo anterior. El
arreglo est
andar de este codigo es:
0000
1000
0100
0001

1011
0011
1111
1010

0110
1110
0010
0111

1101
0101
1001
1100

hay una sola palabra con peso cero, tres con peso uno y cero con peso cuatro entre los
lderes de coset. As que la suma 5.3 es:
P (decodif icar correctamente) = 1(1 p)4 + 3p(1 p)3 = (1 p)3 (1 + 2p)
si p = 0.01
P (decodif icar correctamente) = 0.9897
lo que resulta mayor que la probabilidad de decodificar correctamente si solo usamos los
dos bits indispensables para decir cuatro cosas diferentes. En ese caso la probabilidad
de decodificar correctamente es la de que no se cometa ning
un error, es decir: (1 p)2 =
0.9801.

En el caso de un codigo perfecto es a


un mas facil. Sabemos
 que los lderes de coset
n
son cadenas de peso v = b d1
cadenas de peso i
2 c o menor y hay exactamente
i
en Zn2 as que el n
umero de lderes de coset de peso i es:

w(i) =

n
i

El n
umero de lderes de coset de peso mayor a v es cero, as que en sntesis, para un
c
odigo perfecto y un canal simetrico binario con probabilidad de crossover p:
d1
bX
c

2
n
P (decodif icar correctamente) =
pi (1 p)ni
i

i=0

118

Codigos lineales

5.5 +Complemento ortogonal, codigo dual


As que el conjunto de todas las cadenas ortogonales a una cadena arbitraria cualquiera a en un espacio vectorial Znp es un codigo lineal. Entonces evidentemente el
conjunto de las cadenas ortogonales a todas las cadenas de un codigo lineal es tambien
un c
odigo lineal, aquel definido por la interseccion de los subespacios ortogonales a cada
una de las cadenas.

Teorema 5.6 El complemento ortogonal A de un codigo A es un codigo lineal llamado el


c
odigo dual de A.
Sea A = {a1 , a2 , . . . , as } un codigo lineal, entonces A = {a1 , a2 , . . . , as } = {a1 }
{a2 } . . . {as } es el codigo dual de A.
Hay que notar que el codigo dual de A esta hecho de todas aquellas cadenas que
son ortogonales simult
aneamente a todas las cadenas en A. Es decir, un vector x =
x1 x2 . . . xn est
a en el c
odigo dual de A si satisface:
a11 x1 + a12 x2 + . . . + a1n xn = 0
a21 x1 + a22 x2 + . . . + a2n xn = 0
..
..
.
.
as1 x1 + as2 x2 + . . . + asn xn = 0

(5.4)

donde a1 = a11 a12 . . . a1n , a2 = a21 a22 . . . a2n , ..., as = as1 as2 . . . asn son los vectores
de A.
A las ecuaciones en 5.4 se les denomina las ecuaciones de verificaci
on de paridad de
A . Si pensamos en base 2 el nombre es evidente, si hay un n
umero par de unos en las
posiciones en las que un vector ai coincide con x el resultado de la suma es 0.
Podemos reescribir el sistema de ecuaciones 5.4 en notacion matricial:

a11 a12 . . . a1n


x1
0
a21 a22 . . . a2n x2 0


(5.5)
..
..
..
.. .. = ..
.

.
.
.
. .
as1 as2 . . . asn

xn

La matriz de s n de la izquierda es llamada la matriz de verificacion de paridad


para A .

Teorema 5.7 Sea A un codigo y x = x1 x2 . . . xn una cadena en Znp . x esta en A si y solo si:
Ax = 0
donde A es la matriz de verificacion de paridad para A .

5.5 Complemento ortogonal, codigo dual

119

EJEMPLO 5.6
Sean a1 = 1110 y a2 = 1001 las dos cadenas de un codigo. Las ecuaciones de verificaci
on
de paridad para el codigo dual son:
x1 + x2 + x3 +
=0
x1 +
x4 = 0

(5.6)

Las soluciones de la segunda ecuacion son:


1. x1 = x + 4 = 0 en este caso hay dos soluciones para la primera:
(a) x2 = x3 = 0
(b) x2 = x3 = 1
2. x1 = x4 = 1 en este caso tambien hay dos soluciones para la primera:
(a) x2 = 1, x3 = 0
(b) x2 = 0, x3 = 1
en sntesis: {0000, 0110, 1101, 1011}

Hay que notar que en la matriz de verificacion de paridad de un codigo no necesariamente sus renglones son linealmente independientes, pero puede ocurrir.
Algunas cosas interesantes:
Si C y D son dos codigos y C D entonces D C
Si G es la matriz generadora de un [n, k]-codigo C, entonces tambien es la matriz
de verificaci
on de paridad de C .
Si C es un [n, k]-codigo C es un [n, n k]-codigo (la dimension del dual es n k).
Si C es un c
odigo lineal C = C.

EJEMPLO 5.7

C = {0000, 1011, 0110, 1101} subespacio de Z42 , base = {1011, 0110}, matriz generadora:


1 0 1 1
G=
0 1 1 0

120

Codigos lineales

Entonces C est
a determinado por las soluciones al sistema:
x1 +

x3 + x4 = 0
x2 + x3
=0

Las soluciones son {1110, 0111, 1001, 0000} = C = h1110, 1001i

Con lo que sabemos podemos afirmar:


Cualquier matriz es la de verificacion de paridad de alg
un codigo lineal.
Cualquier matriz con renglones linealmente independientes es la matriz generadora
de alg
un c
odigo y la de verificacion de paridad de alg
un otro.
Una matriz generadora para un codigo C es la de verificacion de paridad para C .
Cualquier c
odigo lineal C tiene un matriz de verificacion de paridad. En particular,
una matriz generadora para el codigo dual C es una matriz de verificaci
on de
paridad para C.

5.6 +Decodificacion de sndrome


En el captulo anterior presentamos un caso particular de codigo de Hamming. Por
cierto los c
odigos de Hamming son lineales. Recordara el lector que para decodificar
determinamos el ndice del bit erroneo, en caso de haberlo, multiplicando una matriz
por el vector (palabra) recibido. A este producto se le denomina sndrome, como ya
hemos se
nalado. En los codigos lineales en general es posible y u
til calcular el sndrome.

Definici
on 5.4 Sea P una matriz de verificacion de paridad de un codigo C Znp . El sndrome
S(x) de una cadena x Znp , es el producto Px.

Esta definici
on nos hace pensar en que la matriz que usamos en el captulo anterior
al presentar el c
odigo de Hamming, la matriz H2 (3), es la de verificacion de paridad
de el c
odigo de Hamming de siete bits, algo que debe parecernos claro, dado que nos
permite calcular la paridad de tres diferentes subconjuntos de los siete bits de la palabra
recibida.

EJEMPLO 5.8

121

5.6 Decodificaci
on de sndrome

Recurriremos a nuestro ya muy usado codigo:


C = {0000, 1011, 0110, 1101}
Una matriz generadora para C es:


1 0 1 1
G=
0 1 1 0

(5.7)

y la matriz generadora de C y por tanto verificadora de paridad de C:




1 1 1 0
P=
1 0 0 1

(5.8)

Sea x = 0111. El sndrome de esta palabra es:

0

 


1 1 1 0
1 = 0
S(x) = Px =
1
1 0 0 1 1
1
El sndrome es la cadena 01, notese que la palabra 0111 no esta en el c
odigo.
Si en cambio calculamos el sndrome de la palabra 1011 que s esta en el c
odigo:

 
 1


1 1 1 0
0 = 0
S(x) = Px =
0
1 0 0 1 1
1
el resultado es la palabra 00.

La curiosidad mostrada en el ejemplo es algo que siempre ocurre. El sndrome de


una palabra del c
odigo siempre es cero y el de una palabra que no esta en el c
odigo
es distinto de cero. En el caso particular del los codigos de Hamming, adem
as de no
ser cero, el sndrome de una palabra que no esta en el codigo nos dice cual bit hay que
modificar para transformarla en la mas cercana a ella que s esta en el codigo, pero esto
s
olo ocurre para los codigos de Hamming.
En el caso de los codigos de Golay, que tambien son lineales, la matriz de verificaci
on
de paridad es la G24 y el sndrome nos indica directa o indirectamente el patr
on de error,
el lder del coset donde se encuentra la palabra recibida.
Por que siempre ocurre que el sndrome de una palabra del codigo es cero? Bueno, la
matriz de verificaci
on de paridad de un codigo C es equivalente2 a la matriz generadora
del c
odigo dual C , es decir, el subespacio generado por la matriz generadora del dual
Se puede llegar de la matriz de verificaci
on de paridad a una generadora para C mediante reducci
on
de Gauss-Jordan.
2

122

Codigos lineales

y el generado por la matriz de verificacion de paridad son el mismo y son, de hecho, el


dual de C. Por definici
on el dual de C es el conjunto de todos los vectores ortogonales
a todos los elementos de C, lo que significa que si efectuamos el producto interior de un
vector en el dual de C con uno de C el resultado es 0. En particular los renglones de
la matriz de verificaci
on de paridad de C estan en C , as que el producto interior de
cualquier rengl
on de la matriz con un elemento de C es cero porque son ortogonales.
De nuestros conocimientos de algebra lineal sabemos que S(x) es, de hecho, una
transformaci
on lineal. Es decir:
1. S(x + y) = S(x) + S(y).
2. S(x) = S(x).
Estas caractersticas hacen del sndrome algo a
un mas u
til. No solo sirve para saber
si una palabra est
a o no en el codigo, nos puede dar mas informacion.

Teorema 5.8 Sea C un codigo lineal. Dos cadenas x y y estan en el mismo coset si y solo si
tienen el mismo sndrome.
Demostraci
on:
Sea C un c
odigo con arreglo estandar:
0
c2
...
cM
f2 f2 + c2 . . . f2 + cM
..
..
..
.
.
.
fq fq + c2 . . . fq + cM

(5.9)

Sean x = fi + cr y y = fj + cs . supongamos que:


S(x) = S(y)

(5.10)

Por una parte tenemos que:


S(x) = S(fi + cr ) = S(fi ) + S(cr ) = S(fi )
la u
ltima igualdad de la cadena se debe a que el sndrome de cr es cero dado que esta
palabra est
a en el c
odigo.
An
alogamente:
S(y) = S(fj + cs ) = S(fj ) + S(cs ) = S(fj )
As que 5.10 es cierta si y solo si:
S(fi ) = S(fj )
de donde:
0 = S(fi ) S(fj ) = S(fi fj )

123

5.6 Decodificaci
on de sndrome

Ah! algo cuyo sndrome es cero, eso significa que el algo esta en el codigo, es decir:
fi fj C.
Ahora tenemos una suma de dos elementos que no estan en el codigo (recordemos
que las f son lderes de coset y no estan en el codigo) y cuya suma s esta, como habamos
dicho la u
nica posibilidad de que esto ocurra es que fi fj = 0, de donde finalmente:
fi = fj
lo que significa que x y y estan en el mismo coset.

As que dos elementos con el mismo sndrome estan en el mismo coset del arreglo
est
andar, esto significa dos cosas u
tiles:
Tienen el mismo lder de coset y por tanto el mismo patron de error.
Cada coset esta caracterizado por el sndrome de sus elementos ya que es el mismo
para todos. As que no es necesario guardar todo el arreglo estandar, basta guardar
la lista de los sndromes y los lderes de coset.
Excelente! Ahora para decodificar tendramos que hacer lo siguiente:
1. En vez de almacenar todo el arreglo estandar del codigo C que se usar
a, simplemente se guarda una tabla con dos columnas: los lderes de coset y los valores de
sndrome de cada coset.
2. Dada una cadena x recibida, calculamos S(x).
3. Buscamos S(x) en la tabla hasta encontrar un lder de coset fi tal que S(fi ) = S(x).
4. fi es el patr
on de error, as que decodificamos a vecino mas cercano entregando
c = x fi .

EJEMPLO 5.9
En nuestro ejemplo recurrente C = {0000, 1011, 0110, 1101}, el arreglo est
andar es:
0000
1000
0100
0001
de donde obtendramos la tabla:

1011
0011
1111
1010

0110
1110
0010
0111

1101
0101
1001
1100

124

Codigos lineales

Lder
0000
1000
0100
0001

Sndrome
00
11
10
01

Si recibimos x = 1110 que no esta en C, su sndrome es: Px = 11, en nuestra tabla


el lder de coset con sndrome 11 es 1000 as que decodificamos: 1110 1000 = 0110 que
es la palabra que suponemos que nos fue enviada.

Hay una caracterstica curiosa mas en la matriz de verificacion de paridad que nos
ser
au
til. Resulta que la distancia mnima del codigo es justamente el n
umero mnimo
de columnas de la matriz de paridad linealmente dependientes. Es decir: cualquier
subconjunto de columnas con cardinalidad estrictamente menor a la distancia mnima
del c
odigo es un conjunto linealmente independiente.

Teorema 5.9 Sea P la matriz de verificacion de paridad de un [n.k.d]-codigo lineal, C. La


distancia mnima, d, es el entero mas peque
no r para el que hay r columnas linealmente
dependientes en P .
Demostraci
on:
El producto de matriz de verificacion de paridad por un vector c = c1 c2 . . . cn es:


p11 p12 . . . p1n
c1
p11 c1 + p12 c2 + . . . + p1n cn
p21 p22 . . . p2n c2 p21 c1 + p22 c2 + . . . + p2n cn


Pc = .
..
.. .. =
..
..
..
.
.
.
. .
.
.
.
pq1 pq2 . . . pqn

cn

(5.11)

pq1 c1 + pq2 c2 + . . . + pqn cn

esto lo podemos reescribir como:


Pc = c1 P1 + c2 P2 + . . . + cn Pn

(5.12)

donde Pi es la i-esima columna de P.


Sea r el mnimo n
umero de columnas linealmente dependientes. Es decir, existe
c = c1 , c2 . . . cn Zp tal que r de sus componentes son distintas de cero y:

c1
c2

P . = 0
(5.13)
.
.
cn
As que w(c) = r w(C) = d.
Por otra parte si c = c1 c2 . . . cn C es de peso mnimo entonces d = w(c) = w(C).
Dado que c est
a en el codigo y P es la matriz de verificacion de paridad, ocurre 5.13;

5.6 Decodificaci
on de sndrome

125

de donde se deduce que las d columnas que estan multiplicando a los elementos de c
distintos de cero son linealmente dependientes (el producto es cero sn que todos ellos
sean cero) as que r d.


126

Codigos lineales

5.7 +Codigos de Hamming y Golay revisados


Con el u
ltimo teorema formulado podemos hacer un analisis de los codigos de Hamming en general.
Ya mencionamos que todo codigo de Hamming tiene una distancia mnima de 3.
En terminos de nuestro u
ltimo teorema esto significa que existe un conjunto de tres
columnas de la matriz de verificacion de paridad de cualquier codigo de Hamming que
resulta ser linealmente dependiente y ese es el mnimo n
umero de columnas que es
posible encontrar con esa propiedad. Lo que significa que cualquier conjunto de dos
columnas de la matriz de verificacion de paridad resulta ser linealmente independiente,
es decir, cualquier pareja de columnas es linealmente independiente: ninguna columna
es m
ultiplo de otra.
En un c
odigo de Hamming binario como el tratado en el captulo anterior esta
propiedad es evidente: la i-esima columna es la representacion binaria del n
umero i,
que no puede ser obtenida multiplicando por un bit cualquiera, alguna otra columna.
En c
odigos de Hamming p-arios ya no es tan trivial.
Para p = 3 por ejemplo, podemos incluir la columna 001 si pretendemos construir
una matriz de verificacion de paridad de tres renglones, pero entonces no podemos
incluir la columna 002 que se obtiene multiplicando por 2 la anterior. Si se incluye la
columna 012 ya no puede ser incluida la 021 ya que se obtiene de 012 multiplic
andola
por 2. Si analizamos esto con cuidado nos percataremos de que es posible construir una
matriz de verificaci
on de paridad para un codigo de Hamming p-ario de h renglones si
incluimos en ella s
olo las columnas cuya posicion mas significativa sea 1. Por ejemplo
H3 (3) la matriz de Hamming ternaria de tres renglones:

0 0 0 0 1 1 1 1 1 1 1 1 1
H3 (3) = 0 1 1 1 0 0 0 1 1 1 2 2 2
1 0 1 2 0 1 2 0 1 2 0 1 2
Dados p, la base del codigo y h el n
umero de renglones, podemos determinar n, el
n
umero de columnas, es decir, la longitud de las palabras del codigo.
Supongamos que la posicion mas significativa de una columna es m {1, . . . h} (de
arriba hacia abajo). As que la posicion m de la columna es 1, antes de eso, las primeras
m 1 posiciones son cero, y hacia abajo, las restantes h m posiciones pueden ser
cualesquiera dgitos de Zp . Hay p posibilidades en cada una de esas posiciones, as que
en total hay phm columnas que pueden y deben estar en la matriz de verificaci
on de
paridad. Ahora sumemos sobre todos los posibles valores de m:
n = ph1 + . . . + p1 + p0 =

ph 1
p1

Ahora bien, cu
antas palabras tiene el codigo? La longitud de cada palabra es n,
la que acabamos de calcular, el n
umero de bits de verificacion que se incluyen en una

EJERCICIOS

127

palabra es justamente el n
umero de renglones en la matriz de verificacion de paridad,
nh
h. As que hay en total p
palabras de codigo, esto es un subespacio de dimensi
on
n h. Hemos demostrado el siguiente teorema.

Teorema 5.10 La matriz de Hamming en base p y con h renglones es la matriz de paridad


de un [n, k, d]-c
odigo lineal con parametros:k = n h, d = 3 y
n=

ph 1
p1

Por supuesto cualquier codigo de Hamming puede corregir hasta un error exactamente, como habamos dicho. En el caso binario los parametros se convierten en: n = 2h 1,
k = n h y d = 3.
Por cierto en el caso general el sndrome de una palabra erronea en un c
odigo de
Hamming en base p 6= 2 no es el ndice del smbolo erroneo, eso solo funciona en el
caso binario, pero s proporciona un m
ultiplo de la posicion, solo hay que buscar una
columna de la matriz de verificacion tal que el sndrome sea un m
ultiplo de ella y el
ndice de esa columna s es la posicion del error.
Los c
odigos de Hamming son perfectos y u
nicos, en el sentido de que cualquier c
odigo
con par
ametros de la forma especificada en el teorema anterior resulta ser equivalente
a un c
odigo de Hamming.
En lo que respecta al codigo de Golay presentado en el captulo anterior, G24 hay
, verificar esto implica mucho
que a
nadir que es un codigo auto-dual, es decir, G24 = G24
trabajo porque hay que calcular el producto interior de cualesquiera dos renglones dis . Luego, dado que la dimensi
tintos de G24 . Con lo que se concluye que G24 G24
on de
ambos subespacios debe ser 12, entonces deben ser el mismo subespacio. Adem
as como
la matriz G24 es la de verificacion de paridad de G24 y este es igual a su dual entonces
tambien su generadora. G24 no es un codigo perfecto, pero su hermano cercano con
palabras de 23 bits G23 s lo es.
Cualquier rengl
on de la matriz G24 tiene un peso divisible por 4, de hecho cualquier
palabra de G24 tiene la misma propiedad. G24 es un [24, 12, 8]-codigo lineal binario. Eso
significa que puede corregir hasta 3 errores.

+Ejercicios
5.1 Sea S Znp . Demuestre que si el vector cero esta contenido en S entonces S es
linealmente dependiente.
5.2

Los siguientes conjuntos, son subespacios vectoriales?

128

Codigos lineales

1. {000, 100, 010, 110, 020, 200, 220, 210, 120} Z33
2. {100, 010, 001, 110, 011, 101, 111} Z32
3. {0000, 1234, 2413, 3142, 4321} Z45
5.3

Es un subespacio vectorial de Z42 el conjunto de todas las cadenas con peso par?

5.4 Los siguientes conjuntos, son liealmente independientes?, en tal caso cu


al es el
subespacio generado por cada uno?
1. {1001, 0100} en Z2 .
2. {1001, 0100, 0010} en Z2 .
3. {1001, 0100, 0010, 0001} en Z2 .
4. {100, 021} en Z3 .
5. {2100, 0010, 1220, 0202} en en Z3 .
5.5 El conjunto de palabras de Z42 con peso par es un codigo lineal?, en tal caso
proporciona una base del mismo.
5.6 Sean a y b dos cadenas binarias con la misma paridad (i.e. ambas tienen un
n
umero par de unos o ambas tienen un n
umero impar). Pruebe que el peso de Hamming
de la cadena c = a + b es par.
5.7

Encuentre todas las palabras del codigo binario generado por la matriz:


0 0 0 1
M=
1 0 0 0

5.8

Elabore el arreglo estandar para el codigo generado por:

0 0 1 1
M1 = 0 1 1 0
1 1 0 0

5.9 Encuentre una base para el codigo {0000, 0011, 0110, 1100, 0101, 1111, 1010, 1001}
en Z42 .
5.10 Se dice que la matriz generadora G de un codigo lineal de dimension r en Zn2
est
a en forma can
onica si es de la forma G = [I : A] donde I es la matriz identidad de
r r y A es una matriz arbitraria de r (n r). Encuentra la forma canonica de la
matriz generadora del codigo {00000, 00001, 00110, 00111, 11000, 11001, 11110, 11111}.
5.11 Un metodo para encontrar la matriz de verificacion de paridad P de un c
odigo,
se basa en que al multiplicar la generadora G por la transpuesta de dicha matriz el

EJERCICIOS

129

T
resultado
 T es la matriz cero: G P = 0. Si se esta trabajando sobre Z2 , resulta que
P = A : I , donde A es la matriz descrita en el ejercicio previo. Encuentre la matriz
de verificaci
on de paridad del codigo del ejercicio anterior, verifique que al multiplicarla
por la generadora el resultado es cero.

C
odigos cclicos

6.1 +Definicion, asociacion con polinomios


A lo largo del texto hemos revisado varios tipos diferentes de codigos. Hemos a
nadido
paulatinamente mayor estructura a los conjuntos de palabras que los constituyen y, con
base en esto, hemos simplificado notablemente las operaciones fundamentales como la
codificaci
on o decodificacion. Solo nos resta por revisar, superficialmente claro est
a, los
llamados c
odigos cclicos. Un estudio a fondo de estos codigos requiere por s solo de un
libro completo y una buena dosis de algebra moderna.

Definici
on 6.1 Dada una cadena x = x1 x2 . . . xn1 xn , la rotacion derecha de x, denotada
rod (x), es la cadena xn x1 x2 . . . xn1 . La k-esima rotaci
on derecha de x es la cadena
rod (x, k) = xnk+1 xnk+2 . . . xn x1 . . . xnk . De manera analoga se definen la rotaci
on
izquierda y la k-esima rotaci
on izquierda de la cadena como: roi (x) = x2 x3 . . . xn x1 y
roi (x, k) = xk+1 xk+2 . . . xn1 xn x1 . . . xk .
Es decir, en una rotacion derecha se desplazan todos los smbolos que constituyen
la cadena un lugar a la derecha y el u
ltimo smbolo sale por la derecha y se introduce
por el otro extremo. Con base en esta definicion se puede formular la siguiente.

131

132

Codigos cclicos

Definici
on 6.2 Un codigo lineal C es un codigo cclico si, para toda c C, ocurre que
rod (c) C.
Esto u
ltimo implica que, siempre que una palabra esta en un codigo cclico, tambien lo est
an todas sus rotaciones derechas o, equivalentemente, toda ssus rotaciones
izquierdas.

EJEMPLO 6.1
El c
odigo
C 0 = {00000, 00101, 01010, 10100, 01001, 10010, 01111, 11110, 11101, 11011, 10111}
no es cclico. Lo parece, porque dada cualquier palabra en el, todas sus rotaciones
izquierdas o derechas estan tambien en el. Sin embargo no cumple con el requisito de
ser lineal. La suma de las palabras octava y novena dan como resultado 00011, que no
est
a en C 0 y debera de estar si C 0 fuera lineal. Podemos, claro esta, a
nadir esta palabra
y por tanto todas sus rotaciones. El resultado es:
C = {00000, 00011, 00110, 01100, 11000, 10001,
00101, 01010, 10100, 01001, 10010,
01111, 11110, 11101, 11011, 10111}
que, en efecto es lineal y cclico. Es el codigo de paridad par de longitud 5.

Recordaremos ahora lo que revisamos en nuestro captulo de preliminares al principio


del libro, particularmente lo referente a polinomios. Podramos considerar a nuestras
palabras de c
odigo como la representacion implcita de un polinomio en Pn (Z2 ). La
intenci
on al hacer esto es montarnos, como solemos hacerlo, en un conjunto que posee
una estructura algebraica bien definida y poderosa, de la que podamos luego aprovecharnos para simplificarnos la vida. Si suponemos que cada palabra de un codigo es una
representaci
on de un polinomio P (x) Pn (Z2 ) y se multiplica a este por x, la palabra
de c
odigo asociada con el resultado de la multiplicacion parece ser, a primera vista,
la asociada con P (x) rotada un lugar a la izquierda. De hecho aparentemente P (x)
multiplicado por xk tiene asociada la palabra de codigo que resulta de rotar k lugares
a la izquierda la palabra asociada con P (x). Un analisis mas profundo nos obliga a
percatarnos de algo desagradable: si nos restringimos a polinomios de grado menor a n
y la mayor potencia de P (x), a la que llamaremos m, es tal que m + k n, el resultado
ya no pertenece al conjunto de polinomios de grado menor a n; las palabras asociadas con las multiplicaciones no son rotaciones en estricto sentido, solo desplazamientos.

133

6.2 Polinomio generador

Si queremos restringirnos a un grado n fijo entonces los coeficientes que salen por
la izquierda no regresan por la derecha, nos estamos saliendo del conjunto, nuestro
conjunto no es cerrado bajo la multiplicacion.
Para asegurarnos de que la multiplicacion corresponda realmente a una rotaci
on,
lo que significa que no nos salimos del conjunto de polinomios de grado menor a n,
debemos asegurarnos de que los coeficientes que rebasan el borde izquierdo de la palabra
regresen por la derecha. Tenemos entonces que usar operaciones modulares, como las
que mostramos en el primer captulo, de hecho usaremos xn 1 como el tama
no del
m
odulo y llamaremos Rn (Z2 ) al subconjunto de Pn (Z2 ) con las operaciones modulares.
Con esto logramos que nuestro conjunto de polinomios (palabras de codigo), con las
operaciones modulares de producto y suma, se comporte como un anillo y los c
odigos
lineales en el son lo que en algebra se denomina un ideal.

EJEMPLO 6.2
Tomemos los polinomios p14 = x4 + x3 + x2 + 1 y q = x2 en P5 (Z2 ), su producto m
odulo
5
x 1 es:
(x4 + x3 + x2 + 1)(x2 )

(mod (x5 1)) = (x6 + x5 + x4 + x2 )


= (x5 x + x5 1 + x4 + x2 )

(mod (x5 1))

(mod (x5 1))

= x4 + x2 + x + 1
Hay que recordar que en R5 (Z2 ): x5 = 1. El polinomio p14 corresponde a la decimocuarta palabra del codigo C del ejemplo anterior y su producto por q es la decimosexta,
que justamente es la que le corresponde a p14 rotada dos lugares a la izquierda, tal como
lo indica el grado del monomio q.

6.2 +Polinomio generador


Ahora observemos un muy u
til fenomeno que ocurre en nuestros codigos cclicos
pensados como polinomios.

EJEMPLO 6.3
Cu
al es el resultado de multiplicar el polinomio g = x + 1 por f12 = x2 + 1, m
odulo

134

Codigos cclicos

N
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Factor
0
1
x
x2
x3
x4
x+1
x2 + x
x3 + x2
x4 + x3
x4 + 1
x2 + 1
x3 + x
x4 + x2
x3 + 1
x4 + x

Producto
0
x+1
x2 + x
x3 + x2
x4 + x3
x4 + 1
x2 + 1
x3 + x
x4 + x2
x3 + 1
x4 + x
3
x + x2 + x + 1
x4 + x3 + x2 + x
x4 + x3 + x2 + 1
x4 + x3 + x + 1
x4 + x2 + x + 1

Palabra
00000
00011
00110
01100
11000
10001
00101
01010
10100
01001
10010
01111
11110
11101
11011
10111

Tabla 6.1: Los elementos del codigo C del ejemplo 6.1 obtenidos a partir de g = x + 1
en P5 (Z2 ).

x5 1? Veamos:
(x + 1)(x2 + 1)

(mod (x5 1)) = (x3 + x2 + x + 1)

(mod (x5 1))

= x3 + x2 + x + 1
g corresponde a la segunda palabra de C, mientras que el producto corresponde a la
decimosegunda. Si esta la multiplicamos por x, lo que equivale entonces a multiplicar
g por x3 + x, obtendramos la decimotercera. Si el factor de g fuera x4 + x2 , o bien
si multiplic
aramos la decimotercera por x nuevamente, obtendramos la decimocuarta.
Realmente podemos obtener todas las palabras de C escogiendo el polinomio factor,
por el que se debe multiplicar a g, como se muestra en la tabla 6.1.
Entonces si multiplicamos a g por cualquier polinomio de grado menor que 5, m
odulo
x5 1 obtenemos siempre un polinomio asociado a una palabra del codigo C!

A un polinomio que hace lo que g en nuestro ejemplo se le denomina polinomio


generador, formalmente:

Definici
on 6.3 Sea C un codigo lineal cclico asociado con un conjunto C Rn (Z2 ). Si g C
es un polinomio tal que, para todo elemento w C existe f Rn (Z2 ) tal que w = f g,
se dice que g es un generador de C y por tanto de C, lo que denotaremos como C = hgi.

135

6.2 Polinomio generador

Abusando de la notacion tambien escribiremos C = hgi.


No es fortuito que el polinomio generador en nuestro ejemplo sea el de menor grado
de los que est
an asociados con el codigo.

Teorema 6.1 Sea C 6= {0} un codigo lineal cclico identificado con C Rn (Z2 ). Si g es el
polinomio m
onico y distinto de cero con el menor grado en C, entonces:
1. C = hgi.
2. g es u
nico.
3. g divide al m
odulo, es decir, g | (xn 1).
Demostraci
on:
(1) Como C tiene al menos una palabra distinta de 0, entonces en C hay al menos un
polinomio distinto del polinomio cero. Cada uno de los polinomios de C es m
onico (salvo
el cero) y existe entre ellos uno con el menor grado. Sea g este polinomio y m su grado.
Sea
hgi = {q(x) g(x) | q(x) Rnm (Z2 )}
Por supuesto, como C es lineal y cclico, entonces hgi C. Hay que comprobar que
tambien C hgi.
Sea c(x) C. Usando el algoritmo de la division, existen q(x), r(x) Rn (Z2 ), tales
que
c(x) = q(x) g(x) + r(x)
donde grado (r(x)) < m = grado (g(x)).
De esto se desprende:
r(x) = c(x) q(x) g(x)
En el lado derecho de esta expresion tenemos dos sumandos: c(x), que est
a en C y
al producto q(x) g(x) que esta en hgi y por tanto en C. As que todo el lado derecho
es un elemento de C y por tanto r(x) C. As que r(x) resulta ser un polinomio en C
con grado menor que g(x), lo que contradice que g(x) es el polinomio monico con grado
menor de C, a menos que r(x) = 0.
Por tanto c(x) = q(x) g(x) hgi, como se quera demostrar.
(2) Si hubiera otro polinomio h(x) C monico con el mnimo grado m entonces, por
lo que acabamos de probar, existe q(x) tal que h(x) = q(x) g(x). Pero dado que
m = grado (g(x)) = grado (h(x)) entonces q(x) tiene grado cero, es decir, debe ser
una constante. C
omo tanto h como g son monicos, entonces, de hecho q(x) = 1 por lo
que resulta que h(x) = g(x).
(3) Nuevamente, por el algoritmo de la division, existen q(x) y r(x) tales que:
xn 1 = q(x) g(x) + r(x)

136

Codigos cclicos

donde r(x) es el polinomio cero o bien grado (r(x)) < g(x). Pero en Rn (Z2 ), xn 1 es
de hecho el polinomio cero, as que:
r(x) = q(x) g(x) C
como en C no hay un polinomio distinto de cero de grado menor que g entonces r(x) = 0,
por lo que:
xn 1 = q(x) g(x)
lo que equivale a decir que g | (xn 1).

Esto nos proporciona una inusitada manera de representar a todos los elementos
del c
odigo. Cuando hablamos de codigos lineales nos aprovechamos de su estructura
para representarlos usando solamente los vectores en la base del codigo, de hecho los
escribimos en lo que denominamos la matriz generadora del mismo; ahora poseemos
el mismo poder de expresividad en una sola palabra, la que corresponde al polinomio
generador. Claro, como este polinomio es el monico de menor grado de aquellos que
est
an en el c
odigo tendramos que saber ademas o el tama
no de las palabras del c
odigo,
o equivalentemente, el modulo con el que se trabaja.

6.3 +Matriz generadora


Podemos, sin embargo retomar nuestra conocida matriz generadora.

Teorema 6.2 Sea C un codigo cclico sobre Rn (Z2 ) con generador g(x) = gk xk + . . . g1 x + g0
de grado k, entonces el conjunto:
B = {g(x) xnk1 , . . . , g(x) x, g(x)}
es una base para C y la matriz

g0 g1
0 g0

0 0

G= .
..
..
.

0 0
0 0
es la matriz generadora de C.

de n columnas y n k renglones:
g2 . . . gk 0
0
0
g1 g2 . . . gk 0
0
g0 g1 g2 . . . gk 0
.. .. .. .. ..
.
.
.
.
.
0 . . . g0 g1 g2 . . .
0 . . . 0 g0 g1 g2

...
...
...

0
0
0
..
.

gk 0
. . . gk

6.4 Polinomios irreducibles y factorizacion

137

Demostraci
on:
Para probar que G es la matriz generadora probaremos primero que sus renglones son
linealmente independientes y luego que cualquier palabra de codigo es una combinaci
on
lineal de ellos.
Sea {a1 , . . . , ank } un conjunto de n k escalares en el campo donde se encuentran
los coeficientes de los polinomios. Sea ri el i-esimo renglon de la matriz G.
La ecuaci
on:
a1 r1 + a2 r2 + . . . + ank rnk = 0

(6.1)

cuyo lado izquierdo es una combinacion lineal de los renglones de G, implica que, considerando la u
ltima columna de G y por tanto la u
ltima entrada del vector resultante
de la combinaci
on lineal:
0 a1 + 0 a2 + . . . + ank gk = 0

(6.2)

Sabemos que gk es distinto de cero (de hecho vale 1) porque g(x) es el polinomio
m
onico de grado menor de C, as que para satisfacer 6.2 se requiere que ank = 0. Lo
que anula todo el u
ltimo factor a la izquierda de la expresion 6.1. De esto, siguiendo
el razonamiento analogo podemos concluir que ank1 = 0 y continuar hasta que,
finalmente, a1 = 0. De modo que la expresion 6.1 implica que todos los escalares deben
ser cero, es decir, el conjunto de reglones de G es linealmente independiente.
Sea c(x) una palabra de codigo en C (aqu abusamos un poco del lenguaje, realmente c(x) es el polinomio asociado a la palabra de codigo). Sabemos que existe alg
un
polinomio p(x) Rn (Z2 ) tal que:
c(x) = p(x) g(x)

(6.3)

Sabemos tambien que g(x) | xn 1 y que, de hecho xn 1 es el cero en Rn (Z2 ). As


que existe m(x) Rn (Z2 ) de grado n k tal que:
xn 1 = g(x) m(x) = 0

(6.4)

Si usamos este m(x) como divisor de p(x) tenemos:


p(x) = q(x) m(x) + r(x)
con 0 grado (r(x)) < grado (m(x)) (i.e. grado (r(x)) n k 1).
Si reemplazamos esto en 6.3:
c(x) = g(x) p(x) = g(x) q(x) m(x) + g(x) r(x)
por 6.4:
c(x) = g(x) r(x)
La palabra de c
odigo c(x) se puede escribir entonces como:
c(x) = r0 g(x) + r1 x g(x) + . . . + rnk1 xnk1 g(x)
que es una combinacion lineal de elementos de B. As que B genera a C.

138

Codigos cclicos

6.4 +Polinomios irreducibles y factorizacion


Hemos demostrado que el polinomio generador debe dividir al modulo xn 1. Pero
a
un hay m
as, de hecho la reversa es tambien verdadera.

Teorema 6.3 Si g(x) Rn (Z2 ) es polinomio monico de grado de grado k < n y g(x) | xn 1,
entonces g(x) es el polinomio generador de un codigo cclico C.
Demostraci
on:
Supongamos que g(x) = g0 +g1 x+g2 x2 +. . . gk xk , que en esta expresion gk = 1 (m
onico)
y que existe m(x) Rn (Z2 ) tal que:
xn 1 = g(x) m(x)

(6.5)

claro est
a que grado (m(x)) = n k.
Sea B = {g(x), x g(x), x2 g(x), . . . , xnk1 g(x)}, este es un conjunto linealmente
independiente, as que podemos decir que existe un codigo lineal C = hgi = hBi.
Sea entonces p un polinomio cualquiera en C, es decir, p es una combinaci
on lineal
de elementos de B:
p(x) = p0 g(x) + p1 x g(x) + . . . + pnk1 xnk1 g(x)
Este polinomio tiene la forma:
p(x) = p0 g0 + p0 g1 x + p0 g2 x2 + . . . + p0 gk xk +
p1 g0 x + p1 g1 x2 + p1 g2 x3 + . . . + p1 gk xk+1 +
..
.
pnk1 g0 xnk1 + pnk1 g1 xnk + pnk1 g2 xnk+1 + . . . + pnk1 gk xn1
= p0 g0 + (p0 g1 + p1 g0 )x + (p0 g2 + p1 g1 + p2 g0 )x2 + . . . +
+(pnk2 gk + pnk1 gk1 )xn2 + pnk1 gk xn1
Para demostrar que C es cclico habra que probar que xp(x) esta tambien en C.
Entonces:
xp(x) = p0 xg(x) + p1 x2 g(x) + . . . + pnk2 xnk1 g(x) + pnk1 xnk g(x) (6.6)
= (p0 x + p1 x2 + . . . pnk2 xnk1 + pnk1 xnk ) g(x)

(6.7)

El primer termino de 6.6 es de grado k + 1, el segundo de k + 2 y as sucesivamente,


hasta el u
ltimo que, en principio, es de grado n k + k = n.
(1) Si en esta expresion el coeficiente del u
ltimo termino es pnk1 = 0 entonces el
grado de xp(x) es, de hecho, n 1 y entonces:
xp(x) = xp(x)

(mod xn 1) C =< B >=< g >

6.4 Polinomios irreducibles y factorizacion

139

que es lo que debemos probar.


(2)Si, en cambio, pnk1 = 1 entonces realmente grado (xp(x)) = n. Adem
as, como
g(x) es m
onico ocurre que el coeficiente de su u
ltimo termino es gk = 1, por lo que
el u
ltimo termino de xp(x) se convierte en: pnk1 gk xn = 1 1 1 y entonces xp(x)
(mod xn 1) = r(x) donde:
r(x) = p0 xg(x) + p1 x2 g(x) + . . . + pnk2 xnk1 g(x) + 1
= xp(x) + 1 1
= xp(x) + pnk1 (xn 1)

(6.8)

Usando pnk1 = 1 y 6.7:


r(x) = (p0 x + p1 x2 + . . . pnk2 xnk1 + pnk1 xnk ) g(x) + (xn 1)
usando 6.5:
r(x) = (p0 x + p1 x2 + . . . pnk2 xnk1 + pnk1 xnk ) g(x) + m(x)g(x)
h
i
= p0 x + p1 x2 + . . . pnk2 xnk1 + pnk1 xnk + m(x) g(x)
(6.9)
El grado de m(x) es n k, lo que hace a r(x) una combinacion lineal de elementos
de B y por tanto elemento de C. As que C es un codigo cclico.

Esto trae consigo el hecho de que cualquier codigo cclico en Rn (Z2 ) debe corresponder con alguno de los posibles k factores de xn 1, o alguno de sus 2k productos, por
cada factor o producto de ellos hay un codigo cclico y viceversa. As que (a) el n
umero
de c
odigos cclicos esta limitado por el n
umero de factores del modulo y (b) si se tiene
la factorizaci
on del modulo se pueden generar todos los codigos cclicos. Por supuesto
los factores deben ser lo mas simples posibles, formalmente hablando:

Definici
on 6.4 Un polinomio no constante p(x) Rn (Z2 ) es irreducible si siempre que se puede
escribir como el producto de dos factores p(x) = q1 (x) q2 (x), con q1 (x), q2 (x) Rn (Z2 ),
al menos uno de los factores es constante.
Ahora podemos decir, con toda propiedad, que los codigos cclicos en Rn (Z2 ) est
an
identificados con los factores irreducibles del modulo xn 1 y sus productos.

EJEMPLO 6.4
En R5 (Z2 ):
x5 1 = (x + 1)(x4 + x3 + x2 + x + 1)
As que s
olo hay cuatro posibles codigos en R5 (Z2 ), a saber:
1. El generado por x + 1, que es justamente el utilizado en el ejemplo 6.3.

140

Codigos cclicos

2. El generado por x4 + x3 + x2 + x + 1, que a la sazon resulta trivial, solo posee la


palabra 11111, ya que coincide con sus rotaciones.
3. El generado por el factor implcito 1, es decir, el polinomio constante g(x) = 1,
que tambien resulta trivial dado que genera todo Z52 .
4. El generado por el producto (x + 1)(x4 + x3 + x2 + x + 1) que sabemos resulta en
x5 1. Este, claro esta, tambien es trivial dado que es el codigo que solo contiene
a la palabra 0.

Sera entonces provechoso tener un catalogo de los posibles codigos o, mejor dicho,
de todos los posibles generadores de codigos cclicos de diversas longitudes. Bastara
poseer la factorizaci
on de los modulos respectivos. Sin embargo, tal como ocurre con los
n
umeros naturales y en los campos finitos, factorizar no es trivial en general y es tanto
m
as difcil cuanto mayor sea el exponente de xn 1.

EJEMPLO 6.5
En R7 (Z2 )
x7 1 = (x + 1)(x3 + x + 1)(x3 + x2 + 1)
El n
umero de polinomios irreducibles que factorizan al modulo x7 1 es tres, as que
hay un total de 23 = 8 posibles codigos cclicos en R7 (Z2 ), a saber, los generados por:
1. g0 (x) = 1. Este es el codigo trivial C0 = Z72 .
2. g1 (x) = x + 1. Este es el analogo a nuestro ejemplo 6.1, el codigo de paridad par
de 7 bits.
3. g2 (x) = x3 + x + 1.
4. g3 (x) = (x + 1)(x3 + x + 1) = x4 + x3 + x2 + 1.
5. g4 (x) = x3 + x2 + 1.
6. g5 (x) = (x + 1)(x3 + x2 + 1) = x4 + x2 + x + 1.
7. g6 (x) = (x3 + x + 1)(x3 + x2 + 1) = x6 + x5 + x4 + x3 + x2 + x + 1. Este es el
c
odigo trivial C6 = {1111111}.
8. g7 (x) = (x+1)(x3 +x+1)(x3 +x2 +1) = x7 1. Este es el codigo trivial C7 = {0}.
El c
odigo generado por g3 (x) resultara particularmente interesante en el futuro cercano.

6.5 Polinomio y matriz de verificacion de paridad

141

6.5 +Polinomio y matriz de verificacion de paridad


Como en todos los codigos lineales, en los cclicos hay una matriz de verificaci
on de
paridad y como puede sospecharlo el lector, este puede ser generada por las rotaciones
de un polinomio al que llamaremos, por supuesto, de verificacion de paridad.

Definici
on 6.5 Sea g(x) Rn (Z2 ), el polinomio generador de un codigo cclico C. El polinomio
v(x) tal que:
xn 1 = v(x) g(x)
es llamado el polinomio de verificaci
on de paridad de C.
Por lo que sabemos de la seccion anterior podemos decir que el polinomio de verificaci
on est
a bien definido: si g es un generador, entonces divide al modulo, y como g es
u
nico entonces tambien v lo es.
Que un polinomio g sea generador de C significa que todo elemento c C, visto
como el polinomio c(x), puede escribirse como c(x) = g(x) p(x) para alg
un polinomio
p(x) Rn (Z2 ). Eso significa que si multiplicamos a c(x) por el polinomio de verificaci
on
de C tenemos v(x) c(x) = v(x) g(x) p(x) lo que, por definicion de v resulta ser cero. La
afirmaci
on inversa tambien es cierta.

Teorema 6.4 Sea C un codigo cclico en Rn (Z2 ) con polinomio generador g(x) y polinomio verificador v(x). Un polinomio dado c(x) esta en C (formalmente hablando en el conjunto
de polinomios asociado a C) si y solo si v(x) c(x) = 0 Rn (Z2 ).
Demostraci
on:
Lo hicimos en el parrafo previo.
Supongamos que c(x)v(x) = 0 Rn (Z2 ). Dividamos c(x) por g:
c(x) = q(x) g(x) + r(x)
donde r(x) = 0 (lo que resolvera nuestro problema) o bien grado (r(x)) < grado (g(x)),
supongamos esto u
ltimo. Si multiplicamos por v(x), por hipotesis tenemos:
0 = c(x) v(x) = q(x) g(x) v(x) + r(x) v(x)
El primer sumando a la derecha, de todos modos es cero, as que el segundo debe
serlo tambien:
r(x) v(x) = 0

(6.10)

Por otra parte, recordando que g(x) v(x) = xn 1 y que estamos suponiendo que
grado (r(x)) < grado (g(x)) tenemos:
grado (r(x) v(x)) < grado (g(x) v(x)) = grado (xn 1) = n

(6.11)

142

Codigos cclicos

La u
nica manera de satisfacer simultaneamente 6.10 y 6.11 es que r(x) = 0, as
que c(x) = q(x) g(x) C

Bien, ahora es claro por que llamamos a v el polinomio de verificacion de paridad de
C, hace la misma labor que ya conocamos para las matrices verificadoras de paridad
de los c
odigos lineales. De hecho si v(x) = v0 + v1 x + v2 x2 + . . . + vk xk es el polinomio
de verificaci
on del c
odigo C, de grado k, entonces la matriz de verificacion de paridad
de C es:

vk vk1 vk2 . . .
v0
0
0
0
... 0
0
vk vk1 g2
...
v0
0
0
... 0

0
0
vk vk1 vk2 . . .
v0
0
... 0

V = .
..
..
..
..
..
..
..
..
.
.
.
.
.
.
.

0
0
0
...
vk vk1 vk2 . . . v0 0
0
0
0
...
0
vk vk1 vk2 . . . v0
Seguramente el lector ha notado ya que el polinomio de verificacion de paridad,
por ser tambien divisor del modulo, es tambien el generador de otro codigo cclico y
entonces tenemos una situacion analoga a que tenamos con los codigos lineales: el
polinomio generador de un codigo es el de verificacion de paridad de otro y viceversa.

EJEMPLO 6.6
Retomando nuestro ejemplo anterior. El polinomio g2 (x) = x3 + x + 1 genera el c
odigo:
C2 = { 0000000, 0001011, 0010110, 0101100,
1011000, 0110001, 1100010, 1000101,
0011101, 0111010, 1110100, 1101001,
1010011, 0100111, 1001110, 1111111}
Su matriz generadora es, por tanto:

1 1
0 1
M2 =
0 0
0 0

0
1
1
0

1
0
1
1

0
1
0
1

0
0
1
0

0
0

0
1

Como x7 1 = (x3 + x + 1)(x4 + x2 + x + 1) entonces el polinomio de verificaci


on
4
2
de C2 es v2 (x) = x + x + x + 1 y la matriz de verificacion de paridad de el, es:

1 0 1 1 1 0 0
V2 = 0 1 0 1 1 1 0
0 0 1 0 1 1 1

6.6 Codificaci
on y decodificacion

143

Si consideramos cada columna de V2 como un n


umero binario escrito con el bit
m
as significativo arriba y el menos significativo abajo, entonces tenemos en ella todo
el conjunto {1, 2, . . . , 7}, si las acomodamos en orden creciente de izquierda a derecha
obtenemos:

0 0 0 1 1 1 1
V20 = 0 1 1 0 0 1 1
1 0 1 0 1 0 1
que el lector reconocera como la matriz H2 (3) mostrada en la expresion 4.14: la matriz
de verificaci
on del c
odigo de Hamming binario de longitud 7.
En efecto, el c
odigo C2 es equivalente al codigo de Hamming binario de longitud 7.
En general cualquier codigo de Hamming binario resulta equivalente a un c
odigo cclico.

6.6 +Codificacion y decodificacion


Por supuesto conviene aprovechar la estructura algebraica que proveen los c
odigos
cclicos adicional a la que ya poseen por el hecho de ser lineales.
Para codificar, por ejemplo, basta con multiplicar por el polinomio generador. Supongamos que tenemos a C = hg(x)i, un codigo cclico binario con palabras de longitud
n y dimensi
on n r, donde r es el grado de g. Este codigo es capaz de codificar palabras
binarias de longitud n r justamente. Los restantes r bits constituyen, por tanto, la redundancia a
nadida a las palabras para poder detectar y corregir errores. Para codificar
procedemos como sigue:
1. Sea m = m0 m1 . . . mnr1 la cadena binaria que constituye el mensaje a enviar.
2. Consideramos a m como el polinomio m(x) = m0 +m1 x+m2 x2 +. . .+mnr1 xnr1 .
3. Se calcula c(x) = m(x)g(x).
4. La palabra binaria c asociada a c(x) se enva.
Veamos, como c(x) = g(x) m(x) entonces, por supuesto, c(x) C y adem
as podemos
asegurar que al multiplicar esto por el respectivo polinomio de verificacion el resultado
es cero: v(x) c(x) = m(x) (v(x) g(x)) = m(x) 0 = 0. As que el receptor puede certificar
que lo recibido es una palabra del codigo con solo multiplicar por el polinomio de
verificaci
on de paridad de C.
Pero que ocurre si hubo errores en el camino? En ese caso esperamos que el producto
de v(x) por la palabra recibida, digamos d(x), no sea cero (i.e. esperamos que los errores
no hayan transformado una palabra de C en otra). En este caso podemos suponer que

144

Codigos cclicos

la palabra enviada c(x) fue alterada al sumarse con una cierta palabra o polinomio de
errores y que es esto lo que hace que el producto no sea cero. Es decir, se nos envi
o
c(x) = m(x) g(x) y recibimos d(x) = c(x) + e(x). Esto nos da pie para hablar de una
nueva faceta del concepto de sndrome que ya mencionamos a proposito de los c
odigos
lineales.

Definici
on 6.6 Sea C = hg(x)i un codigo cclico de longitud n, donde grado (g(x)) = r y.
El sndrome del polinomio d(x) Rn (Z2 ), denotado S(d(x)) es el polinomio de grado
menor que r que se obtiene como residuo de dividir d(x) por g(x).
Al igual que en los c
odigos lineales, podemos entonces construir nuestra tabla con los
sndromes posibles indexada por los lderes de coset, que son nuestros posibles patrones
de error e(x).
Entonces para decodificar:
1. Sea d(x) el polinomio asociado con la cadena binaria recibida.
2. Si v(x) d(x) = 0 entonces la palabra decodificada es c(x) = d(x). Se recupera el
mensaje original dividiendo c(x) por g(x).
3. Si no es as, dividiendo d(x) por g(x) se obtienen los polinomio q(x) y S(d(x)) de
la expresi
on: d(x) = q(x) g(x) + S(d(x)) con grado (S(d(x))) < r = grado (g(x)).
S(d(x)) es el sndrome de d(x).
4. La palabra decodificada es c(x) = d(x) + e(x) donde e(x) es el lder del coset en
el que se encuentra el sndrome S(d(x)).

EJEMPLO 6.7
Para nuestro c
odigo C2 tenemos la tabla de decodificacion 6.2.
Recordemos qe g2 (x) = x3 + x + 1 y que, por tanto, podemos codificar polinomios
hasta de grado 3 (i.e. palabras de longitud 4). El polinomio de verificacion de paridad
es v2 (x) = x4 + x2 + x + 1.
Supongamos que se nos desea enviar el mensaje m = 0101 que equivale al polinomio
m(x) = x2 + 1.
La palabra enviada estara asociada al polinomio:
c(x) = g2 (x) m(x) = (x3 + x + 1)(x2 + 1) = x5 + x2 + x + 1
por lo que ser
a c = 0100111.
Si esta palabra fuera recibida del otro lado, al multiplicar el polinomio asociado a
ella por el polinomio verificador obtendramos:
c(x) v2 (x) = (x5 + x2 + xx + 1)(x4 + x2 + x + 1) = 0

145

6.6 Codificaci
on y decodificacion

Lder
0
1
x
x2
x3
x4
x5
x6

Sndrome
0
1
x
x2
x+1
x2 + x
x2 + x + 1
x2 + 1

Tabla 6.2: La tabla de decodificacion del codigo C2 .

como puede verificar el lector facilmente.


Si, por el contrario se recibiera d = 0110111 con un error en el tercer bit de izquierda
a derecha, es decir, el coeficiente del monomio x4 . El polinomio correspondiente sera:
d(x) = x5 + x4 + x2 + x + 1.
Procedemos entonces a hacer la division de d(x) por el generador g2 (x).
x2 + x 1
x3 + x + 1)

x5 + x4
+ x2 + x + 1
x5
x3 x2
x4 x3
+x
x4
x2 x
x3 x2
+1
x3
+x+1
x2 + x + 2

Como estamos trabajando en Z2 entonces x2 +x1 = x2 +x+1 y x2 +x+2 = x2 +x,


por lo que el sndrome resultante es S(d(x)) = x2 + x. Si lo buscamos en la tabla 6.2
observamos que el lder de su coset es x4 , por lo que debemos cambiar el bit asociado
con ese monomio, obteniendo c(x) = x5 + x2 + x + 1 o lo que es lo mismo: 0100111.

146

Codigos cclicos

+Ejercicios
6.1

Diga cu
ales de los siguientes codigos son cclicos:

1. {00000, 11111}
2. {000, 110, 011, 101}
3. {000, 100, 111, 011}
6.2 El polinomio x4 + x + 1 es irreducible en R15 (Z2 ) y ademas es factor de el m
odulo
x15 1, as que es un polinomio generador de un codigo. Cual?
6.3 En el ejemplo 6.5 se encontro que g2 (x) = x3 + x + 1 es un factor irreducible de
x7 1. Construya el c
odigo cclico asociado con el: sea la raz del polinomio, es decir,
3 + + 1 = 0 o equivalentemente 3 = + 1. Tomando en cuenta esto calcule las
palabras del c
odigo generado por las 7 diferentes potencias de mas el cero (claro est
a
usando 3 bits). Es cclico el codigo resultante?
6.4 x3 1 tiene dos factores, uno de ellos es x + 1, encuentre el otro. Encuentre
tambien el c
odigo generado por el.
k

6.5 Trabajando sobre Z2 resulta que x2 n 1 = (xn 1)2 . Usando esto y la factorizaci
on del ejercicio anterior, encuentre los factores de x6 1.
6.6

Calcule todos los codigos cclicos binarios de longitud 5.

6.7

Cu
al es el c
odigo generado por la

0
G= 0
1

siguiente matriz?

0 1 0 1
1 0 1 0
0 1 0 0

6.8 Encuentre el polinomio generador y el de verificacion de paridad del codigo anterior.


6.9 Sea p(x) = x2 + x + 1 en R6 (Z2 ) el polinomio generador de un codigo cclico.
Determine el polinomio verificador de paridad y la matriz generadora del mismo.
6.10 Suponga que tiene dos codigos cclicos C1 y C2 , generados por sendos polinomios
g1 (x) y g2 (x). Cu
al es el polinomio generador del codigo cclico mas peque
no que
contiene a C1 C2 ?

Bibliografa
[1] Biggs, Norman L., Codes: An Introduction to Information Communication and
Cryptography, Springer Verlag, 2008.
[2] Bressoud, David y Stan Wagon, A Course in Computational Number Theory, Key
College Publishing-Springer Verlag, 2008.
[3] Cover, Thomas M. y Joy A. Thomas, Elements of Information Theory, 2a ed.,
Wiley, 2006.
[4] Gray, Robert M., Entropy and Information Theory, Springer Verlag, 2011.
[5] Hamming, Richard, Coding and Information Theory, Prentice Hall, 1980.
[6] Held, Gilbert, Data Compression, Techniques and Applications, Hardware ans Software Considerations, 2a. ed., John Wiley & Sons, 1987 (con software elaborado por
Thomas Marshall).
[7] Koblitz, Neal, A Course in Number Theory and Cryptography, 2a ed., Springer
Verlag, 1994, Graduate Texts in Mathematics.
[8] Baldoni, M. Welleda, Ciro Ciliberto y G.M. Piacentini Cattaneo, Elementary Number Theory, Cryptography and Codes, Springer Verlag, 2008.
[9] McIlroy, M. D., The number of 1s in binary integers: bounds and extremal properties, SIAM Journal of Computing, 3, 255, 1974.
[10] Roman, Steven, Introduction to Coding and Information Theory, Springer Verlag,
1996, Undergraduate Texts in Mathematics.
[11] Togneri, Roberto y Christopher J.S. deSilva, Fundamentals of Information Theory
and Coding Design, Chapman and Hall - CRC, 2003.

147

S-ar putea să vă placă și