Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
Escuela Politécnica Nacional
FACULTAD DE INGENIERÍA ELÉCTRICA
"COMPRESIÓN DE ARCHIVOS DE TEXTOCODIFICANDO EL ALFABETO FUENTE"
Tesis previa a la obtención del título deIngeniero en Electrónica y Telecomunicaciones
RUTH AMPARO LÓPEZ PÉREZ
Quito, Agosto de 1994
Certifico que ta presente Tesis ha
sido elaborada en su totalidad por ta
Sra. Ruth Amparo Lópezlpérez.
fng. Cario&fgas
AGRADECIMIENTO
Agradezco especialmente a DIOStodopoderoso, y a todas laspersonas que de una u otra manerame ayudaron desinteresadamentepara la culminación de esta tesis, yen especial al Ing. Carlos Egas porsu valiosa dirección.
DEDICATORIA
En mi depositaron la confianza dealcanzar una meta más, y fueposible gracias a! sacrificio yabnegación de mis padres, Antonioe Hilda; a la valiosa compañía de miesposo Víctor Hugo; y a la dulce yalegre existencia de mi pequeña hijaPriscila Alejandra. Por eso lesdedico este trabajo resultado de miesfuerzo.
Ruth Amparo
ÍNDICE
Introducción I
CAPITULO I
CONCEPTOS BÁSICOS
1.1 Puntes de información 1
1.1.1 Fuentes de información de memoria nula 2
1.1.2 Fuentes de información de Markov 4
1.2 Codificación de fuentes de información 5
1.2.1 Propiedades de los códigos 7
1.2.2 Primerteorema de Shannon 14
1.3 Conceptos generales de la compresión de datos 16
1.3.1 Redundancia 17
1.3.2 El radio de compresión 19
1.3.3 Clases de compresión de datos 21
1.4 Técnicas de compresión de datos 24
1.4.1 Codificación transformativa 24
1.4.2 Codificación predecible 24
1.4.3 Codificación de muestras no redundantes 25
1.4.4 Codificación de fuentes binarias 25
1.4.5 Codificación en cascada 26
1.4.6 Consideraciones para el diseño de las técnicas
de Compresión 26
1.4.7 Parámetros a considerar en la descompresión
de datos 28
1.5 Aplicaciones de la compresión de datos 30
CAPITULO II
CÓDIGOS PARA COMPRIMIR ARCHIVOS DE TEXTO FUENTE
2.1 Propiedades de los códigos Huffman 33
2.1.1 Eficiencia y redundancia 34
2.1.2 Tasa de compresión 38
2.1.3 Propiedades de codificación 39
2.1.4 Propiedades de decodificación 53
2.2 Propiedades de los códigos BNO 56
2.1.1 Eficiencia y redundancia 57
2.2.2 Tasa de compresión 59
2.2.3 Propiedades de codificación 59
2.2.4 Propiedades de decodificación 62
CAPITULO III
COMPRESIÓN Y DESCOMPRESIÓN DE ARCHIVOS DE TEXTO
3.1 Procesos de compresión de archivos de texto 64
3.1.1 Compresión con el código Huffman 66
3.1.2 Compresión con e! código BNO 78
3.2 Procesos de descompresión de archivos de texto 91
3.2.1 Descompresión con el código Huffman 92
3.2.2 Descompresión con el código BNO 93
3.3 Implementación del programa 93
3.3.1 Diagramas de flujo 94
3.3.2 Definiciones funcionales 111
3.3.3 Pruebas dei programa 112
3.4 Interpretación de los resultados 120
3.4-. 1 Tamaño comprimido, mayor que el tamaño original 120
3.4.2 Número total de caracteres leídos menor que el ta-
maño que el tamaño en bytes del archivo fuente 124
3.4.3 Gráficos de la codificación Huffman y BNO, en rela-
ción al valor teórico l(si) 144
3.4.4 Cantidad de información con respecto a la fuente 145
3.4.5 Longitud media del código, mayor que la longitud
mínima 146
3.4.6 Valores de compresión con respecto a la codificación 146
3.4.7 La eficiencia del código 149
3.4.8 El máximo radio de compresión 151
3.4.9 Los valores de la longitud media 152
3.4.10 Cantidad de reducción en los requerimientos de memorial 53
3.4.11 Tiempos de ejecución 153
CONCLUSIONES Y RECOMENDACIONES 159
Bibliografía 163
Anexo 1 Manual de Usuario
Anexo 2 Manual del Programador
INTRODUCCIÓN
Desde, que el hombre empezó a manejar !a información sintió la necesidad
de transmitirla de la forma rnás rápida, segura y confiable, esta es ia razón
por la cual en el siglo XIX desarrolló el Código Morse, que resultó una
eficiente forma de transmisión.
Esta técnica de transmisión dio paso a desarrollar las primeras formas de
codificación, es decir, realmente es el primer código de longitud variable
utilizado en comunicaciones.
Con el avance de la tecnología se crearon diferentes técnicas de conversión
de señales analógicas a digitales que facilitó el manejo de cualquier tipo de
información. De tal manera que, en la década anterior se empezó a
manipular grandes cantidades de información digital y, los procesos de
codificación poco a poco fueron pasando de la teoría a la práctica.
Debido a que en la actualidad crece cada vez más el volumen de
información, es un requerimiento indispensable comprimirla para poder
transmitirla o almacenarla más rápidamente y aumentar la eficiencia del
sistema de comunicación.
Todo proceso de codificación cuyo objetivo es optimizar el sistema de
comunicación, se basa en la Teoría de la Información, siendo la
COMPRESIÓN, una área que últimamente ha adquirido mucha importancia.
Actualmente es imprescindible la compresión de datos ya que el volumen de
información en un computador personal o en cualquier otro dispositivo de
almacenamiento, es un parámetro importante a considerar en sistemas de
comunicaciones.
En la presente Tesis, se tratará solamente, la compresión de la información
contenida en archivos de texto, es decir aquella información almacenada con
caracteres ASCII, donde cada una de sus 256 palabras código, son
representadas por ocho bits.
Teniendo en claro este aspecto, el programa a desarrollarse, será
exclusivamente para los archivos de texto, asf como también los resultados
obtenidos, al final del proceso.
El método a utilizar para la compresión, es la reducción de la redundancia,
mediante la codificación de los símbolos del alfabeto fuente, en función de
las probabilidades de ocurrencia, utilizando el código Huffman y el código
BNO; los cuales, teóricamente proveen el máximo radio de compresión.
i
Estos códigos tienen como característica común, el poseer palabras código
de longitud variable, razón por la cual se analizará un método práctico, para
limitar exactamente la longitud de cada palabra código.
El lenguaje de programación utilizado en los procesos de codificación,
compresión decodíficación y descompresión, es el C++, por su característica
de lenguaje estructurado orientado a objetos.
Se desarrollan las ideas fundamentales de la Teoría de la Información,
introducción II
especialmente sobre su medida e interpretación, considerando un tipo
particular pero importante de información; la información binaria.
Todos estos conceptos se aplica a la compresión de archivos de texto; por lo
tanto, durante todo el desarrollo de la presente tesis se establece un punto de
encuentro entre la Teoría de la Información y los parámetros elementales
para lograr una buena compresión.
Finalmente, como Schumann dijo:" No tengas miedo a las palabras 'teoría",
"bajo cifrado", "contrapunto", etc.; vendrán a tu encuentro si haces lo mismo
con ellas."1
ILOS GRANDES COMPOSITORES, Introducción a la música, pág. 1
Introducción
CAPITULO I
CONCEPTOS BÁSICOS
1.1 FUENTES DE INFORMACIÓN
La medida de la información depende de las probabilidades de los símbolos
que sirven para representarla, y, esta cantidad de información obedece a
ciertas propiedades y leyes fundamentales que se detallan a continuación.
CANTIDAD DE INFORMACIÓN
Sea E un suceso que puede presentarse con probabilidad P(E). Cuando E
tiene lugar, se dice que se ha recibido I(E) unidades de ¡nformación.-donde:
0-1)
I(E) = cantidad de información
P(E) = probabilidad de ocurrencia
Dependiendo de la base del logaritmo empleado en la definición se obtiene
una determinada unidad, así:
Con el logaritmo de base 2 la unidad se denomina bit.
bits
Empleando logaritmos naturales, la unidad es el nat.
I (E) = In—!— Tjats (1-3)V P(E) '
En el caso de logaritmos de base 10, la unidad de información es el Hartiey.
~ 4)
En general empleando logaritmos de base r,
/(-£) = loa, unidades de orden r (1-5)r P(E)
Todos los conceptos que a continuación se mencionan, pueden ser
encontrados en cualquier libro de Teorfa de la Información por lo cual se
enunciarán los conceptos más fundamentales.
1.1.1 FUENTES DE INFORMACIÓN DE MEMORIA NULA
Una fuente de información discreta se caracteriza por emitir una secuencia
de sfmbolos pertenecientes a un alfabeto de q símbolos.
El conjunto de sfmbolos que genera la fuente se llama alfabeto fuente y, se lo
representa de ta siguiente manera:
Cap/Tuto / 2
í-V
j,: símbolo de la foente
' = 1,2,3, .......... ,q
Los símbolos emitidos sucesivamente se eligen de acuerdo con una ley fija
de probabilidades, y cuando son estadísticamente independientes se trata de
una fuente de memoria nula, las probabilidades de ocurrencia de los
símbolos, se representan pon
P(s,} donde / = 1,2,3,.... ...... ,q (1-7)
Puede describirse completamente a la fuente de memoria nula mediante el
alfabeto fuente y las probabilidades con que los símbolos se generan.
ENTROPÍA
La información media suministrada por una fuente de información de
memoria nula es:
-A _ „ . T . . unidades de información ., rt>}P(st)I(s,) - (1-8)¡~f símbolo de S
P(»l) : probabilidad del símboto s¡
l(8|) : cantidad de información generada cuando se emite el sfmbolo s\a magnitud que es la cantidad media de información por símbolo de la
fuente, recibe el nombre de entropía de la fuente de memoria nula, y se
Capitulo I 3
representa como H(S).
(1 - 9)/-i - w
La base del logaritmo determina las unidades a utilizarse.
PROPIEDADES DE LA ENTROPÍA
Existe una relación entre el número de símbolos del alfabeto fuente con la
cantidad de información que se ha generado.
Para una fuente de memoria nula con un alfabeto fuente como el descrito en
la ecuación (1-6) y con probabilidades según (1-7), se cumple que:
Hr(s)ílo&q (1-10)
El valor máximo de la entropía es igual a logaritmo de q, y ese valor se
alcanza si todos los símbolos, de la fuente son equiprobables.
1.1.2 FUENTE DE INFORMACIÓN DE MARKOV
Un tipo de fuente de información de q símbolos más general que la de
memoria nula, consiste en aquella en que la presencia de un determinado
símbolo S¡ depende de un número finito m de símbolos precedentes.
A esta fuente se la conoce como fuente de Markov de orden m y viene
definida por su alfabeto según la ecuación (1-6), y el conjunto de
Capitulo I ' 4
probabilidades condicionales que determinan la ocurrencia de cada símbolo
viene dado por
í = U,3, .............. ,q
jr =12,3, ............ }m
En otro tipo de fuente se define el estado, como el número de símbolos de
que depende la emisión del siguiente.
1.2 CODIFICACIÓN DE FUENTES DE INFORMACIÓN
La tabla 1-1 muestra un ejemplo sencillo que codifica en función de los
símbolos binarios O y 1 , fuentes de Información discreta.
TABLA 1-1 Codificación Binarla de los Dígitos Decimales
DÍGITO REPRESENTACIÓNDECIMAL ' BINARIA
0 00001 00012 00103 00114 01005 01016 01107 01118 10009 1001
Capitulo I
La correspondencia entre los dígitos decimales y binarios constituye un
ejemplo de código. Las 10 secuencias binarias se denominan palabras
código y los 10 dígitos decimales, símbolos de la fílente a codificar
(mensajes).
CÓDIGO
Si se tiene un conjunto de símbolos de un alfabeto dado según la ecuación
(1-6), se define un código como la correspondencia de todas las secuencias
posibles de símbolos de S, a secuencias de símbolos de algún otro alfabeto
X S recibe el nombre de alfabeto fuente y X alfabeto código.
,xr] alfabeto código (1-12)
LONGITUD MEDIA DE UN CÓDIGO
Es el número promedio de símbolos del alfabeto código utilizado para
codificar un símbolo del alfabeto fuente y, se lo calcula con la siguiente
expresión:
(1-13)(-1
pt: probabilidad de los
símbolos de la fuente
//; longitud de la palabra código
asociado al sfmbolo con pt
Cap/fufo
1.2.1 PROPIEDADES DE LOS CÓDIGOS
CÓDIGO BLOQUE
Un código bloque es aquel que asigna cada uno de los símbolos del alfabeto
fuente S a una secuencia fija de símbolos del alfabeto Código X. Esas
secuencias fijas reciben el nombre de palabras código.
La tabla 1-2 muestra un ejemplo de código bloque binario
TABLA 1-2 Código Bloque Binario
SÍMBOLOS PALABRASDE LA FUENTE CÓDIGO
s-j Os2 1153 00
CÓDIGO BLOQUE NO SINGULAR
Un código bloque se denomina no singular si todas sus palabras código son
distintos.
En la tabla 1-3 se da un ejemplo.
Al analizar este ejemplo, se nota que si se recibe la secuencia 011 puede
Capitulo I 7
corresponder a s-|S2 o a 5354.
TABLA 1-3 Código Bloque no Singular
SÍMBOLOS CÓDIGODE LA FUENTE
s-j O
54 01
Si bien se puede realizar una decodificación correcta de un código no
singular, cuando se transmite una por una las palabras código; existen
problemas para realizar una decodificación correcta cuando se transmiten
secuencias de palabras código en forma continua,
CÓDIGOS UNÍVOCAMENTE DECODIFICABLES.
EXTENSIÓN DE UN CÓDIGO
La n-ésima extensión de un código es simplemente todas las posibles
combinaciones de n símbolos códigos de la fuente original asociadas a las
correspondientes combinaciones de sus n palabras código.
Partiendo de la tabla 1-3 se enuncia un ejemplo de la segunda extensión del
código bloque, el cual se ilustra entabla 1-4
Un código bloque se dice unívocamente decodificable si, y solamente si, su
extensión de orden n es no singular para cualquier valor finito de n. En la
Capítulo I 8
tabla 1-5 se muestra un ejemplo.
TABLA 1-4 Extensión del Código Bloque
SÍMBOLO FUENTE
S1S1
S1S2
«1S3S1S4S2$1S2s2
S2S3
S2S4
S3S1S3S2S3S3S3S4S4S1S4S2
S4S35454
CÓDIGO
000110100111011111111101101111110101001110110101
TABLA 1 -5 Código Unívocamente Decodificable
SÍMBOLO? CÓDIGODE LA FUENTE
s-j OS2 0183 011SA 0111
Con este código se puede transmitir secuencias de palabras código sin que
se produzca una decodificación errónea.
Capitulo I
CÓDIGOS INSTANTÁNEOS
Un código unívocamente decodificable se denomina instantáneo cuando es
posible decodificar las palabras de una secuencia sin precisar el
conocimiento de los símbolos que les suceden.
Es útil sin embargo disponer de una regla general que permita decir cuándo
un código es instantáneo. Se enuncia a continuación primero el concepto de
prefijo y luego la regla.
PREFIJO
Sea: una palabra código representada
Se denomina prefijo de esta palabra código a la secuencia de símbolos
(VA ..... V O-15)dona e j<,m ¡
REGLA DEL CÓDIGO INSTANTÁNEO
La condición necesaria y suficiente para que un código sea instantáneo es
que ninguna palabra del código sea prefijo de otra.
Ej.; La palabra código 01 1 1 tiene cuatro prefijos, 01 1 1 , 01 1 , 01 , y 0.
En la tabla 1-6 se muestra un ejemplo de código instantáneo.
Capitulo! 10
TABLA 1 -6 Código Instantáneo
SÍMBOLOSDE LA FUENTE
CÓDIGO
54
O10
110111
CLASIFICACIÓN DE LOS CÓDIGOS
En el siguiente esquema se resume ías diferentes clases de códigos
enunciados, notándose una marcada ramificación. Para obtener una
subclase de código en especia!, es necesario que cumpla con todas las
condiciones de las subclases precedentes.
FIGURA 1-1
SUBCLASES DE CÓDIGOS
No Bloque
CCCHGOSSingular
BloqueNo Unívoco
No Instantáneo
Urivoco
Instantáneo
CÓDIGOS COMPACTOS
Un código unívoco será compacto con respecto a la fuente a codificar si su
Capitulo I 11
longitud media es igual o menor que la longitud media de todos los códigos
unívocos que pueden aplicarse a la misma fuente con el mismo alfabeto
código.
Se puede relacionar la longitud media de un código con la entropía de la
fuente de información de la siguiente manera:
(1-16)
Aplicando a ésta ecuación las propiedades de los logaritmos para una fuente
binaria, se tiene;
(1-17)
En donde:
H2(S) : Entropía [bits/símbolo]
Hf{S) : Entropía obtenida cuando la base del logaritmo utilizado es r
r : Número se símbolos del alfabeto código.
L : Longitud media.
De ésta expresión se desprende que L alcanzará su valor mínimo si y
solamente si, pueden elegirse las longitudes de las palabras l¡, iguales a logr
(1/P¡), es decir para que:
ffr(s) = L (1-18)
debe cumplirse que:
Capitulo I 12
— (1-19)Pt
para iodo i-1,2,3, 3q
Una condición necesaria para la construcción de un código compacto ,es
que la longitud debe ser un número entero, y muchas veces en la condición
de igualdad el valor de l¡ no es entero.
INECUACIÓN DE KRAFT
La inecuación de Kraft da las condiciones para la existencia de un código
instantáneo, ésta ecuación le dice cuando la longitud de la palabra código
permite la formación de un código instantáneo,
TEOREMA
Una condición necesaria y suficiente para la existencia de un código
instantáneo S de q símbolos, sg (i=1,2,....,q) con palabra codificadas de
longitud:
es que:
r-*<n (1-21)/-i
Capitulo I 13
donde:
r : Número de símbolos del alfabeto código.
La inecuación condiciona las longitudes de las palabras y no las palabras
mismas.
En el caso del alfabeto binario, la inecuación de Kraft se transforma en:
¿2'* al (1-22)/-i
La inecuación (1-22) dice que puede existir un código binario instantáneo con
q palabras código de longitud l¡, siempre y cuando se cumpla esa inecuación..
1.2.2 PRIMER TEOREMA DE SHANNON
Como se mencionó anterionnente, la condición en la cual la longitud de un
código compacto era numéricamente igual al valor de !a entropía de la
fuente, se alcanzaba cuando, las longitudes de las palabras código según la
ecuación (1-19) generalmente no eran números enteros, El primer teorema
de Shannon da el criterio para alcanzar la longitud mínima igual a la entropía
solucionando este problema.
Al no resuttar un número entero el resultado de la ecuación (1-19), parece
lógico formar un código compacto eligiendo un l¡ igual al número entero
inmediatamente superior a ese valor, entonces:
Capitulo I 14
log, —áí-ílog,—+1 (1-23)Pi Pi
Multiplicando por p¡, y sumando para todos los valores de i, se tiene:
(1-24)í-l P¡ /-I i-\i /-I
con lo cual:
(1-25)
Esta úftirna ecuación (1-25), puede aplicarse a cualquier fuente de memoria
nula, por consiguiente para la extensión de orden n de la fuente original, se
tiene:
(1-26)
De la ecuación (1-26) se obtiene:
- (l-27<z)n n
(1-275)n
De modo que siempre será posible encontrar un valor de Lp/n tan próximo a
H^S) como se quiera, sin más que codificar la extensión de orden n de S, en
lugar de S.
Cap/fu/o / 15
La expresión Lp/n, indica que los símbolos Sj de la fuente se han codificado
en grupos de n, en lugar de independientemente.
A la ecuación (1-27a) se la conoce como el Primer Teorema de Shannon o
Teorema de la codificación sin ruido.
1.3 CONCEPTOS GENERALES DE LA COMPRESIÓN DE DATOS.
Al establecer cualquier tipo de comunicación es de vital interés que esta sea
lo más económica y rápida posible, es ahí donde entra la idea de la
compresión de información. En la actualidad existen y se están desarrollando
una gran cantidad de técnicas de compresión para cumplir este objetivo
La compresión de datos es la reducción de la cantidad de espacios de una
señal que debió ser asignado para enviar un mensaje dado o simplemente
poner un dato.
Este espacio que ocupa la señal podría ser un volumen físico ( un medio de
almacenamiento de datos), un intervalo de tiempo (el tiempo requerido para
transmitir un mensaje), o una porción de espectro electromagnético (el ancho
de banda requerido para transmitir un cierto mensaje).
Cada una de estas formas de espacio que ocupa la señal; volumen, tiempo
y ancho de banda, pueden relacionarse entre si de la siguiente manera:
Volumen = f(tiempo, ancho de banda) (1-28)
Esta expresión indica que una reducción en el volumen puede ser trasladado
Cap/fufo / 16
en una reducción del tiempo de transmisión o ancho de banda. Los
parámetros en los cuales se va a trabajar para realizar la compresión,
usualmente determina cuales de las técnicas de compresión de información
deberán implementarse en el sistema.
Al principio hubo gran interés en reducir el ancho de banda requerido para
transmitir señales analógicas. Tales como en telefonía. Más tarde en
sistemas como el facsímil llegó a ser de suma importancia incrementar la
velocidad de transmisión y finalmente ahora el volumen de ios datos es el
parámetro crítico que necesita de reducción o compresión en muchos
sistemas, especialmente en sistemas digitales, teniendo como ultimo fin el
disminuir el costo del diserto e implementación del sistema de
comunicaciones.
En la actualidad existen grandes volúmenes de información que necesitan ser
transmitidos y almacenados, lo cual influye en el costo de los sistemas. Es
entonces cuando la compresión de datos se vuelve imperiosa ya que en
muchos casos el realizar la compresión no involucra el cambio de todos los
elementos del sistemas.
Existen dos nombres con los cuales suele llamarse a la compresión de datos
y son: compactacíón de datos y, codificación de la fuente.
1.3.1 REDUNDANCIA
La redundancia se refiere al flujo excesivo de información o a los bits
adicionales que se añaden a los datos originales, entonces la información
como tal puede entenderse como, la combinación de información valida e
Capítulo I 17
información redundante. Un ejemplo de esto son los bits de paridad que se
añade a la información como método de detección de errores.
Normalmente no se transmite la redundancia en un sistema de compresión
de datos, sin embargo es frecuentemente necesaria reinsertaría para la
descompresión, simplemente porque a falta de ella no se podría reconstruir
la información original.
Se debe definir la redundancia relativa para los dos modelos de fuentes:
modelos de Martcov y modelos estadísticamente independientes:
Para el caso de modelos de Markov cada muestra depende de cierto número
de muestras anteriores. Si se conociera esa dependencia, podría predecirse
la siguiente muestra con lo cual, se transmitiría !a información suficiente de
acuerdo a esa predicción, de tal manera que se pueda reconstruir la
secuencia de la muestra original en el receptor.
En modelos estadísticamente independientes no se podría predecir ni
eliminar las muestras dependientes. En lugar de ello se toma ventaja de la
típica distribución de probabilidad no uniforme.
La redundancia de una fuente de Información, se la define como sigue:
Redundancia = \o%rq-fír(S) (1-29)
donde:
q : Número de símbolos de la fuente a ser comprimida
Hr<S) : Entropía o cantidad de información media suministrada por la
Capítulo i 18
fuente a comprimir.
logrq: Cantidad de información máxima que podría suministrar esa
fuente.
r : Base del logaritmo utilizado.
Una fuente de redundancia cero tiene a:
(1-30)
La redundancia relativa se define en los siguientes términos:
D j. ¿ • T> r^. RedundanciaR edundancia R elatíva =
Aplicando la ecuación (1-29) en (1-31), se tiene:
Redundancia Relativa = = i - . (1_32)
Se define a RR: redundancia relativa, entonces:
1.3.2 EL RADIO DE COMPRESIÓN.
Para cualquier fuente se busca el máximo radío de compresión de tal forma
que, la fuente resultante de la codificación sea una fuente igual al radio de la
Capítulo! 19
entropía. La fórmula de! radio máximo de compresión teórico es:
ffr($)
Donde:
q : Número de símbolos de la fuente a ser comprimidos
H|<S) : Entropía o cantidad de información media suministrada por la
fuente a comprimir.
logrq : Cantidad de información máxima que puede suministrar esa
fuente.
Dándose una relación entre el radio máximo de compresión y la redundancia
relativa, que es:
(1-35)
De (1-35) resulta que el radio máximo de compresión es:
Entonces, si a una expresión se la forma de tal manera que su fuente tenga
una redundancia de 75%, una expresión equivalente sería aquella cuyo
máximo radio de compresión sea 4 a 1.
La tasa de compresión real, es la relación del número de símbolos/bit total de
Capítulo I 20
la palabra código después de la descompresión para el número de
símbolos/bit antes de la descompresión. Su expresión matemática es:
símbolos .fuente comprimida
tasa compresión . = - , - (1 - 37)"at ro símbolos , , - - ,
A» - juente originalbits
Hay a menudo una diferencia significativa entre el límite teórico del radio de
compresión que uno podría calcular y el verdadero radio de compresión que
uno obtiene en los diferentes sistemas prácticos; las unidades de Información
teóricas no suelen ser números enteros, en cambio en la práctica se guarda
la información en números enteros (1 bit).
1.3.3 CLASES DE COMPRESIÓN DE DATOS
No se podría hablar de una clasificación estrictamente como tal ya que a
pesar de los numerosos esfuerzos por agrupar las técnicas de compresión de
datos no se han puesto de acuerdo la gran cantidad de autores que tratan
sobre el tema, sin embargo, podemos enunciar dos grupos principales de
compresión:
REVERSIBLE IRREVERSIBLE
Codificación sin perdida Codificación con perdida
de información o de información o
Reducción de la redundancia Reducción de la entropía
Basándose en esta terminología, se hará referencia a cada uno de ellos. Se
trata de la primera clasificación usada en 1962 por Blasbalg y Van Blerkom.
Capitulo I 21
La operación de reducción de la entropía resurta en una reducción de la
información puesto que la entropía se define como la información media
suministrada por la fuente. La información perdida nunca será recuperada es
por eso que se trata de una operación irreversible.
Un ejemplo típico de una técnica con reducción de la entropía, es la DPCM
en donde la pérdida de información se da en el momento de muestreo la
serial análoga.
La información que se transmite o almacena, se le puede entender como la
combinación de información valida e información redundante. La operación
de reducción de la redundancia implica remover o al menos reducir la
redundancia en tal forma que pueda ser restituida la información
posteriormente. La reducción de la redundancia es siempre un proceso
reversible, de ahí que siempre será interesante y eficaz utilizar técnicas de
reducción de la redundancia.
Un simple ejemplo de reducción de la redundancia es la eliminación de datos
repetitivos. Si se envía un dato que no cambia por un largo período de
tiempo, entonces muchos datos simples consecutivos serán repetitivos. Una
técnica obvia para anular esto es contar el número de repeticiones entre
cambios en los valores simples y enviar solamente los cambios junto con las
cuentas de repetición que intervinieron. Con lo cual se aprecia claramente
que la estructura del dato original podrá siempre reconstruirse de esta
compresión de datos, no se perderá información.
En la figura 1-2 se muestra la clasificación de las técnicas de compresión de
datos partiendo de los dos aspectos analizados la reducción de la entropía y
Cap/futo; 22
o Q> •o
FIG
UR
A 1
-2
CLA
SIF
ICA
CIÓ
N
DE
LA
S T
ÉC
NIC
AS
DE
CO
MP
RE
SIÓ
N D
E D
AT
OS
Com
pre
sió
n d
e D
ato
s
I
Codific
ació
nIra
ns
f ot T
nerti
vw
Reducció
n R
edundancia
Codific
ació
nde m
uestr
as
no r
edundan.
Codific
ació
nde
fuente
sbin
arios
OT
RO
S
la reducción de la redundancia. Los códigos Huffman y BNO se encuentran
ubicados dentro de las técnicas de reducción de la redundancia.
1,4 TÉCNICAS DE COMPRESIÓN DE DATOS
A manera de introducción se enunciarán brevemente algunas técnicas de
compresión de datos, descritas en la figura 1-2. Estas técnicas darán una
idea de como forman parte dentro de los sistemas de compresión de datos; y
en que forma su desempeño puede ser cuantitativamente comparado, entre
el límite teórico de la función de la tasa de distorsión con la función de la
entropía en unos caso o con la función de la redundancia en otros.
1.4.1 CODIFICACIÓN TRANSFORMATIVA
Es una forma de cuantización por bloque, en la cual la correlación original cíe
muestras analógicas a un bloque, son luego correlacionadas por una
transformación lineal y después cuantizadas óptimamente. El tipo de
transformación lineal puede ser Fourier, Hadamard y Haar.
La transmisión de errores para este tipo de muestras transformadoras tendrá
un reducido efecto en la reconstrucción de las mismas.
1.4.2 CODIFICACIÓN PREDECIBLE
La codificación predecible es una forma de cuantización secuencia! en la
cual, la diferencia entre la muestra siguiente y el valor predecible se
cuantifica. Este enfoque se motivó por el hecho de que, para muchísimas
fuentes de datos, la diferencia en la variación por exceso fue menor que la
Capitulo I 24
variación del dato original, entonces se hace posible utilizar un pequeño
rango cuantizador con lo que se obtiene una compresión. Hay dos métodos,
la modulación delta y la modulación de código por pulso diferencial.
1.4.3 CODIFICACIÓN DE MUESTRAS NO REDUNDANTES
Excluir los valores repetitivos, es un concepto popular de como desarrollar
una compresión de datos, lo cual es un caso especial en este tipo de
codificación. Esta es una técnica que decide entre muestras que son
redundantes y no redundantes de acuerdo a algún algoritmo preasignado y
entonces transmiten las muestras de información no redundantes con
apropiada secuencia.
1.4.4 CODIFICACIÓN DE FUENTES BINARIAS
Cuando se trata de fuentes de datos binarios se requieren técnicas
especiales de compresión de datos.
Una de las razones es que se puede modelar una fuente binaria en un
sistema más realista que una fuente analógica, con modelos relativamente
simples. Con estos modelos se puede cuidadosamente diseñar esquemas de
compresión óptimos para fas fuentes binarias.
Algunas veces, las técnicas mencionadas anteriormente se usan
conjuntamente, puesto que ciertas aplicaciones requieren diseños y
adaptaciones especiales de cada una de ellas.
Capitulo I 25
1.4.5 CODIFICADORES EN CASCADA
Es considerable usar una disposición en cascada como técnica de
compresión de la información, un ejemplo de elío es el uso de codificadores
DPCM con un rango total de cuantización en el lazo de adelante, seguido de
un codificador Huffman. Una razón típica para tal disposición es evitar la
distorsión en imágenes.
En otros casos, dos o más algoritmos de compresión se ponen en cascada
para alcanzar el radio de compresión requerido, tales como en el caso de
reducción de la entropía seguida por la reducción de la redundancia que se
aplica en transmisión de imágenes.
La cantidad de arreglos en cascada que pueden ser hechos está limitada por:
la derivación de la entropía, máximo radio de compresión y complejidad del
sistema,
1.4.6 CONSIDERACIONES PARA EL DISEÑO DE LAS TÉCNICAS
DE COMPRESIÓN.
La incorporación de la compresión de datos en sistemas grandes, tiene que
ser planteado cuidadosamente con un número mínimo de restricciones,
considerando que la operación de compresión es para obtener el máximo
beneficio.
Si se comprime información binaria en ciertos puntos del sistema, es
necesario juntarla con los otros elementos del sistema, al no considerar este
simple hecho cuidadosamente, podría producirse efectos desastrosos, en el
Capítulo I 26
sistema de comunicación.
En general, al intentar diseñar sistemas, se debe garantizar que a más de
cumplir los requerimientos necesarios, sea de un costo real. Los
requerimientos necesarios se refieren a fa compresión en sf y a la
descompresión.
Los requerimientos a considerar en la compresión son de 2 tipos:
operabilidad del sistema y costo del sistema.
La compresión de la información debe ser utilizada como último recurso
después de haber intentado optimizar el sistema de comunicaciones con
otros diseños; por ejemplo en una situación de limitación del ancho de banda.
Si la compresión de la información reduce considerablemente el costo del
sistema, es a menudo una justificación suficiente para utilizaría.
Teniendo que hallar una verdadera necesidad de compresión de la
información, se examina a continuación los requerimientos que debe estar
sujeta fa descompresión, estos son: radio de compresión, distorsión y
complejidad1.
El requerimiento sobre el radio de compresión, usualmente indica si es
necesario aplicar la reducción de la entropía o la reducción de la
redundancia.
La complejidad de los algoritmos de compresión no depende solamente del
IDATA COMPRESSION TECHNIQUES AND APPLICATIONS, pág. e?Capitulo l 27
algoritmo en sí, sino que está sujeta a los requerimientos de: secuenciación
de la información, memoria intermedia (buffer) y control de errores^.
1.4.7 PARÁMETROS A CONSIDERAR EN LA DESCOMPRESIÓN DE
DATOS
RADIO DE COMPRESIÓN
El radio de compresión constituye quizás, el principal parámetro a
considerase, al decidir comprimir cualquier información.
Entonces, si se pretende alcanzar un gran radio de compresión, para lograr
tal objetivo se debería aplicar un poderoso algoritmo o en su defecto
concatenar algunos algoritmos, además, se podría alcanzar este propósito
con una apropiada consideración de la entropía de la información con lo cual,
no se introducirá ninguna distorsión o de lo contrario, se podría intentar con
otros métodos, pero a lo mejor esto implicaría perder parte de la información.
Recordando que:
: Número de símbolos a codificar
: Entropía
Se puede comparar este parámetro para distorsión cero con el radio de
compresión real si es o no el requerido.
2DATA COMPRESSION TECHNIQUES AND APPLICATIONS, pág. 67
Capitulo I 28
Si el valor que se requiere es menor que el máximo permitido se puede
utilizar exclusivamente la reducción de la redundancia.
SÍ se requiere que el radio de compresión se aproxime al máximo valor
entonces se hallaría una solución con cierta combinación de reducción de la
entropía y reducción de la redundancia.
Si lo básico es el costo del sistema, entonces el radio de compresión podría
ajustarse a un análisis de la descompresión. Sin embargo, si lo básico es la
operabilidad del sistema, entonces los requerimientos del radio de
compresión dominarían el diseño y no el factor económico,
DISTORSIÓN MEDIA
La distorsión media es la desviación aparente de la cantidad o la forma de los
mensajes del sistema, después de la descompresión. En otras palabras, es
el nivel de alteración media que la compresión provoca en los mensajes del
sistema después del proceso de la descompresión.
La distorsión media es típicamente la segunda consideración en los
requerimientos establecidos para la compresión de datos. Para muchos
usuarios este concepto no es muy claro porque la distorsión media no puede
ser cero en todos los casos.
Por supuesto quef si solamente se usa reducción de la redundancia, esto es
teóricamente posible, pero obviamente la reducción de la entropía introduce
distorsión e igualmente errores en el canal.
Cap/fu/o/ 29
De acuerdo a la aplicación dependerán los niveles aceptables de distorsión,
sin que peligre obtener una óptima compresión.
En muchos casos de reducción de la redundancia, la distorsión debicte a
errores del canal es un factor dominante en el diseño de sistemas puesto
que, si el sistema conduce a la necesidad de codificación con control de
errores, esto afectaría el actual radio de compresión.
COMPLEJIDAD
Se podría pensar que este requerimiento de complejidad se lo quiera
minimizar, pero la complejidad total de la descompresión dependerá del
grado de complejidad tanto de la codificación como de la decodificación y
estos son los factores importantes en la selección de los algoritmos de
compresión de datos. Algunos algoritmos tienen codificadores simples y
decodificaciones muy complicados y viceversa.
La necesidad de secuenciación de la información, memoria intermedia y
control de errores en ciertos esquemas en que se utiliza la reducción de la
redundancia, añaden al sistema total mayor complejidad, tanto que algunos
sistemas podrían ser prohibitivamente complejos, por el hecho de incluir
procesos de compresión3.
1.3 APLICACIONES DE LA COMPRESIÓN DE DATOS.
En el siglo XiX el Código Morse resultó una eficiente forma de transmisión de
datos, y hoy se le considera como el primer compresor de datos, dada la
3DATA COMPRESSION TECHNIQUES AND APPLICATIONS, pág. 202
Capítulo I 30
técnica de esos tiempos.
Es así como la modulación Delta inventada en 1946 y la técnica DPCM
(código por modulación de pulsos diferenciales) inventada en 1952, íueron
aplicadas en la compresión del ancho de banda para el habla y el video.
El código Huffman fue desarrollado en 1952, y desde esa fecha ha sido
usado como un código de longitud variable recomendable para muchas
aplicaciones, hasta la actualidad.
Asf mismo, las técnicas de transformación tales como Fourier, Hadamard y
otras tantas, fueron aplicadas en numerosas ocasiones, particularmente para
compresión de imágenes y habla en los años 60. Durante ese corto tiempo
las técnicas para muestras no redundantes tales como codificación de
longitud sucesiva se aplicó bastante incluyendo la transformación de datos en
telemetría.
Otras técnicas de compresión, son incesantemente diseñadas y adaptadas
para determinadas aplicaciones tales como: la voz, telemetría, televisión,
imágenes, base de datos, etc.
Es de gran interés una buena compresión de la señal de voz digitalizada ya
que se logra transmitir por medio de canales de estrecho ancho de banda.
En telemetría, es muy importante la compresión de datos sean estos control
de misiles, cohetes ó satélites ya que se caracterizan por tener períodos de
alta redundancia.
Capítulo I 31
Otro tipo de dato de telemetría que se comprime es, el registrado al
producirse un fenómeno sísmico y su objetivo es el facilitar el monrtoreo
remoto hacia la central de procesamiento. La más reciente aplicación de
compresión en telemetría ha sido en el campo de la medicina, donde la
información de electrocardiogramas ECG, es comprimida utilizada para
transmitirla mediante líneas telefónicas, lo cual permite diagnósticos de
especialistas situados a mucha distancia del paciente de forma rápida.
El requerimiento imperioso de reducir el ancho de banda especialmente en el
caso de PCM es lo que llevó a desarrollar la compresión en televisión, la cual
ha sido aplicada en vehículos piloteados remotamente y la más última
aplicación es en el campo de Videotex y en el de la TV de alta definición.
En los últimos años se ha tenido que transmitir imágenes al espacio a través
de los satélites y la compresión ha sido aplicada para reducir ei ancho de
banda requerido en la transmisión.
La compresión de base de datos no se usa solamente para reducir su
volumen que suele ser muy grande, sino también, para reducir el tiempo de
acceso al realizar consuítas en ella, por lo que ha sido aplicada en sus dos
partes básicas: los archivos de datos y los archivos índices.
Capitulo I 32
CAPITULOII
CÓDIGOS PARA COMPRIMIR ARCHIVOS DETEXTO FUENTE
Esencialmente existen dos formas de codificación de longitud sucesiva:
longitudes fijas, y longitudes variables (HUFFMAN y BNO).
En este trabajo se ha seleccionado el código HuUtnan y el código BNO, los
cuales en función de las probabilidades de ocurrencia desarrollan algoritmos
muy versátiles de reducción de la redundancia y proveen teóricamente el
máximo radio de compresión; la longitud de las palabras código resultantes,
son de longitud variable.
En la primera parte de este capítulo se desarrollará la teoría de los códigos
Huffman, y en la segunda parte los códigos BNO.
2.1 PROPIEDADES DE LOS CÓDIGOS HUFFMAN.
A principios de la década del 50, más exactamente en 1952 Huffman
desarrolló un procedimiento para codificar fuentes con símbolos
estadísticamente independientes; con lo cual, se logra representar a los
caracteres más frecuentes, con un reducido número de bits, y a los
caracteres menos frecuentes con un gran número de bits.
De tal manera, de producir la mínima longitud media de bits por símbolo
fuente, se está ante un código más eficiente que aquellos de longitud fija en
el sentido que, para representar cierta información se podrá utilizar menos
símbolos en promedio1.
Debido a su simplicidad, la codificación Huffman seguramente es el método
más conocido en la compresión de datos, como se podrá comprobar
posteriormente con más detalle2.
Para lograr la bondad que se avizora de éste código es necesario conocer
acerca del comportamiento estadístico de la información3.
2.1.1 EFICIENCIA Y REDUNDANCIA
EFICIENCIA DEL CÓDIGO
Este parámetro sirve para medir que tan válido es un código como método
de compresión, es decir, que tan poderoso y apto es para realizar la
compresión; se le conoce también como rendimiento del código.
Para obtener el valor de la eficiencia se necesita haber codificado la fuente y
cuantificado la longitud de cada palabra código, con estos valores se puede
aplicar la ecuación (2-1), la cual indica que la eficiencia de un código
depende de la entropía de la fuente y de su longitud media
1DATA COMPRESSION TECHNIQUES AND APPLICATIONS, pág 552Revtsta BYTE, LOSSLESS DATA COMPRESSION, pág 3093CODING AND INFORMATION THEORY, pág. 51
Capitulo II 34
(2-D
Donde, r, representa el número de símbolos del alfabeto código. Si el
alfabeto código es binario, se utiliza los símbolos O y 1 para realizar la
codificación, la expresión queda:
<?j -w — 'J . y n — i V y í"í O\ r — ¿ —r // — ( — Xj
Si se requiere de un rendimiento igual a 1, se estará ante un código
compacto de longitud media igual a la entropía, y en este caso la longitud
media a alcanzado su valor mínimo.
Esto se cumple, si y solamente sí, las longitudes de las palabras código son
iguales al logaritmo en base 2 del inverso de su respectiva probabilidad.
Si 7¡=l ' (2-3)=> Hi(S) = L (2-4)
donde Ih(S) =Z/**log/—]
y L ~"
No es posible conseguir un rendimiento Igual a uno, si l¡ no es un entero para
cualquier valor i, en otras palabras, l[ debe cumplir la siguiente condición para
que el rendimiento sea Igual a 1.
Cap/fufo II 35
(2-6)
donde a un número entero
Si estas condiciones se cumplen, se habrán encontrado las longitudes de las
palabras que constituyen un código compacto. Bastará con elegir:
(2-7)
Para una misma fuente, la cual, se codifica con un código Huffman, el
rendimiento tiende a crecer, al disminuir el número de símbolos del alfabeto
código dado porr.
FIGURA 2-1
0,75-f—i—i—>1 2 3 4 5 6 7 8 3 10 11 12 13
Número de símbolos del código
Se observa en la figura 2-1 que el crecimiento no es monótono. Aprecíese
los valores que adopta para r=2 y
Este gráfico ha considerado que: las probabilidades de los símbolos tiene la
Capitulo II 36
forma según la ecuación (2-6)4.
REDUNDANCIA DEL CÓDIGO
La codificación Huffman trata de crear un código con una mínima
redundancia, la cual minimiza el número promedio de dígitos para codificar
un símbolo de S5.
Las fuentes en la práctica contienen un gran número de mensajes y en
muchos casos hay un gran número de mensajes con muy poca probabilidad.
Con el código Huffman, palabras código grandes se asocian con mensajes
de poca probabilidad, entonces se tendría que manejar gran cantidad de
palabras código de longitudes muy extensas, y esto añade complejidad a los
requerimientos de programación y almacenamiento6.
La decodificación consiste en recuperar cada símbolo fuente a partir de su
palabra código. Como las palabras son de longitud variable surge el
problema de cómo limitar el fin de una palabra código y el principio de la
siguiente.
Para solventar este problema, se podría pensar en introducir una porción de
datos, pudiendo ser insertados con poca o ninguna distorsión residual, o si
no se desea introducir datos extras, se compensaría esta dificultad, con una
programación más sofisticada y a la vez se lograría reducir la redundancia
que por la naturaleza de la codificación Huffman se tendría.
4TEORlA DE LA INFORMACIÓN Y CODIFICACIÓN, pág. 1045THE CUsere JORNAL, DATA COMPRESSION USING HUFFMAN COD1NG, pág. 556THE CUsere JORNAL, DATA COMPRESSION USING HUFFMAN CODING, pág. 56
Capitulo II 37
Es decir que la técnica de reducción de ta redundancia tiene como meta
reducir el numero de bits requeridos para codificar en bíoque los datos con
cero o mínima distorsión.
Si la redundancia es:
Redundancia = \~ n = \ (2-g)
Para obtener una redundancia del código igual a cero, la longitud media por
sfmbolo debe ser igual a la entropía de la fuente.
La diferencia entre la longitud media por símbolo y la entropía de la fuente
constituirla fo que se puede comprimir.
2.1,2 TASA DE COMPRESIÓN
Para las fuentes estadísticamente independientes, como es el caso de los
códigos Huffman, la máxima tasa de compresión se da cuando la
probabilidad de cada símbolo es una potencia negativa de 2. Cuando esas
probabilidades no son una potencia negativa de 2 sino cualquier otro valor, el
código Huffman provee un atto radio de compresión.
En el código Huffman el radio de compresión es simplemente la relación del
número bits utilizados para codificar la fuente después de la compresión,
para el número de bits sin codificar la fuente antes de la compresión, por lo
tanto la fórmula para calcular esa tasa de compresión es:
Capitulo ¡I 38
TASA COMPRESIÓN = "° tí* deSJmés .100 (2-9)n° bits anies compresión
2.1.3 PROPIEDADES DE CODIFICACIÓN
PROPIEDADES QUE CUMPLE EL CÓDIGO HUFFMAN
CÓDIGO NO SINGULAR.- Esta es una propiedad muy Importante para
códigos de longitud variable, la cual consiste en que todas sus palabras
código sean distintas.
CÓDIGO UNÍVOCO.- La primera propiedad que se necesita es que, sea de
decodlficadón única, la recepción de mensajes debe tener una única posible
interpretación 7.
Esta es una condición necesaria y suficiente para que su decodiflcaclón sea
simple, pero difícilmente usual en los códigos de longitud variable8.
CÓDIGO INSTANTÁNEO.- El hecho de que el código Huffman sea
Instantáneo, permitirá que en el proceso de la decodificación se conozca
inmediatamente un mensaje codificado y no se espere otro u otros bits para
decidir a cual palabra código corresponde.
CODIFICACIÓN DE CÓDIGOS HUFFMAN
Primeramente se enuncia el concepto de fuentes reducidas, puesto que para
7CODING AND INFORMATION THEORY, pág. 528CODING AND INFORMATION THEORY, pág. 53
Capitulo It 39
la construcción del código Huffman, se forman secuencias de fuentes
reducidas, tantas como sean necesarias hasta conseguir una sola fíjente
reducida con un número de símbolos igual al del alfabeto código, que para la
aplicación es binario.
Fuentes Reducidas:
Se considera una fuente S, de q símbolos, y cada símbolo con su respectiva
probabilidad, asf:
(2-10)
P9
Se ordena los símbolos en función de las probabilidades en orden
ascendente, de tal forma que:
(2-11)
Al agrupar los dos úfómos símbolos en uno sólo, se obtiene una nueva fuente
de q-1 símbolos. Esta nueva fuente se la llama fuente reducida de S.
Ya que la codificación Huffman consiste en hallar la mínima longitud media
de la palabra código, es decir el código más eficiente, basándose en sus
probabilidades de ocurrencia, el primer paso para la codificación será
encontrar esa distribución de probabilidades de la fuente a comprimir.
El alfabeto código que se utiliza es un alfabeto binario, constituido por dos
símbolos: el bit O y el bit 1 . El procedimiento de codificación es el siguiente:
Capítulo II 40
1. Arreglar las probabilidades de la fuente en orden descendente de
mayor a menor.
2. Combinar las dos últimas probabilidades en una sola y ubicar ésta
suma en forma descendente dentro de las anteriores. Y continuar con
la construcción de fuentes reducidas hasta tener sólo dos
probabilidades equivalentes de la fuente.
3. Asignar un CERO y un UNO a los símbolos representados por las dos
últimas probabilidades.
4. Retroceder para cada par de probabilidades hasta el principio,
añadiendo O y 1 respectivamente.
5. Para cada mensaje escribir la secuencia de O con 1 de izquierda a
derecha9.
Los procedimientos de codificación Huffman, dan como resultado, códigos
de longitud variable, en los cuales, la longitud de las palabras código varían
aproximadamente inversamente con la probabilidad de los mensajes10.
Si las probabilidades de ocurrencia de los símbolos a codificar son
suficientemente diferentes, la codificación de longitud variable puede ser
significativamente más eficiente que la codificación en bloque como es el
caso del código ASCII, que usa 8 bits para todas las letras y símbolos.
9DATA COMPRESSION TECHNIQUES AND APPLICATIONS, póg 5710DATA COMPRESSION TECHNIQUES AND APPLICATIONS, pág 57
Capitulo II 41
CASOS DE CODIFICACIÓN HUFFMAN
Existe un número interesante de casos de codificación Huffman que se
enunciarán a continuación:
1. PRIMER CASO.- Si todos los símbolos a codificar, son igualmente
probables, y si existe exactamente:
q = 2m símbolos fuente
q : Número de símbolos de la fuente a codificar
m : Longitud de cada una de las palabras código
Entonces el código Huffman será un código bloque, y todas las
palabras código tendrán la misma longitud igual a m. Si no son
exactamente 2m símbolos a codificar, se obtendrá un código bloque
acortado.
Ejemplo: Para una fuente de cuatro símbolos con probabilidades
equiprobables se tiene:
V/>, / = 1,2,3,4 Pt=-^ = ~ -0.25
Entonces, se forman las fuentes reducidas tales que:
S Sí S2Sí pi Si pi Si p¡
s1 0.25^ s1 0.5xxsf 0.5s2 0.25^.y<s2 0.25)Xs2 0.5$3 0.25lA$3 0.25Js4 0.25J
Capítulo íl 42
Y aplicando la codificación regresiva, se tiene:
Se ha obtenido un código bloque, ía longitud de las palabras código es
única e igua! a 2 bits.
SEGUNDO CASO.- Si la suma de las probabilidades de los 2 últimos
símbolos menos probables es más grande que la de! símbolo más
probable, de acuerdo al proceso Huffman la correspondiente palabra
símbolo irá al tope del arreglo descendente de probabilidades, si se
presenta la siguiente condición:
Pq : Valor de la probabilidad del símbolo menos probable
Pq_1 : Valor de la probabilidad del penúltimo símbolo menos
probable.
P1 : valor de la probabilidad del símbolo más probable.
Si los siguientes 2 símbolos menos probables se combinan y dan un
valor mayor que el tope anterior, se procede de igual manera, y así
sucesivamente. Al final del proceso se conseguirá un código bloque
acortado.
Ejemplo: Se considera la siguiente fuente S de seis símbolos, con
Capítulo II 43
sus respectivas probabilidades. Sus fuentes reducidas son:
ssi
s1s233
s4$5s6
pi
0,210.190.180.16 /0.1 4\I0.12]
S1si
S1
Is2I s3
s435
P¡
0.260.210.19 i0.1 8\/0.1 Gj
S2si
s1fs21 33
s4
Pi
0.340.260.21\/0.191
J
S3sí p¡
,s1 0.40/ s2 0.43\/
s3 0.26J
S4si pf
^$1 0.60s2 0.40
Se tiene que:
i = A = 0.14
= 0.21
0.12 + 0.14 > 0.21
0. 26 > 0.21
La codificación regresiva es la siguiente:
Con lo cual se ha conseguido un código bloque acortado, de los 6
símbolos, 4- tienen una longitud Igual a 4 bits, y los 2 restantes tienen
una longitud de 2 bits
SÍ tas probabilidades de los símbolos de la fuente son muy diferentes
Capítulo II 44
se conseguirá una economía significativa del proceso de codificación
Huffman, y cuando haya gran diferencia de probabilidades de
ocurrencia se darán palabras código de longitud variable11.
El proceso de codificación no es único desde diversos puntos de vista, esto
trae consigo el siguiente caso de codificación:
3. TERCER CASO.- Cuando dos probabilidades son iguales, P1=P2; al
reubicar dentro del arreglo en forma descendente se puede pensar
que el orden en que se los coloque será independiente en el resultado
obtenido sobre la palabra código, pero las palabras código
resultantes pueden tener una cierta longitud en el caso de decidir
poner p-j debajo de p2, y otra longitud si se pone p-j encima de p2-
Sin embargo, en cualquier caso, la longitud media de la codificación
de mensajes será la misma.
Ejemplo: Si para un conjunto S de 6 letras del abecedario, se tiene
el conjunto de probabilidades P¡ respectivamente, tales que:
» = {0.4,0.2,0. 1,0.1, 0.1,0.1}
Si se combina tos dos estados tan altos como sea posible, se
conseguirá las fuentes reducidas concatenadas de la siguiente
manera:
UCODING AND INFORMATION THEORY, pág. 69
Capitulo II 45
ssi
s1s2s3s4s5s6
P¡
0.40.20.10.1 /0.1}/0.1
S1si
s1
/s2/s3/ s4
s5
Pi
0.40.20.20.1\/0.1 ¡
J
S2si
s1s2
/s3s4
Pi
0.40.20.2\/0.2¡
S3sí pi
,s1 0.4/s2 Q.4\/
s3 0.2}
S4s¡ pl
Xs7 0.6^ s2 0.4
Entonces las longitudes respectivas serán:
Resumiendo se tiene:
Símbolo //
La longitud media es:
/-I
= 0.4(2)-i-0.2(2) + 0. 4-0.1(3) + 0.1(3)
Z, = 2.4 bits I símbolo
Capitulo II
Caso contrario, si se combina ios dos estado como los más bajos
posibles, entonces se obtiene lo siguiente:
ssi
s1s2s3s4s5s6
Pl
0,40.20.10.10.1 \/0.1
S1si
s1s2s3
/ s4s5
P¡
0.40.20.2ÜJ)0.1 J
S2sí
$1s2$3
^s4
Pi
0.40.20.2)/0.2\
S3si
S1
xs2
Pf
0.40.4\/0.2J
S4si pi
.sí 0.6s2 0.4
La codificación regresiva, resulta en:
1
01
OOW^
wn^ooooVOOOlf
— sl
— ¿2
-/^/^A%
i01
000
°°10L--001 ij
slS2
•%•54
1 —OK
000
001
1o
r *-
*> Olí
Resumiendo se tiene:
Símbolo l¡
a 1b 2c 4d 4e 4f 4
La longitud media es:
Capitulo II 47
= 2.4 bits! símbolo
Ambos códigos tienen la misma eficiencia y longitud media pero no
las mismas longitudes de sus palabras código.
Se podría optar por uno de ellos, el que menos varianza presente sus
longitudes con respecto a la longitud media. La ecuación de fa
varianza es:
varianza =2jU~£) (2-13)i-i
De acuerdo al ejemplo se tendría:
v ariamaaí1a = 0,176
=1.84
El primer código, es significativamente menos variable, y
posiblemente será el código preferible. Por lo tanto, parece que,
siempre que se mueva los estados combinados tan aíto como sea
posible, dará un código de mínima varianza12.
12CODING AND INFORMATION THEORY, pág. 67
Capítulo II 48
Analizando paso a paso el procedimiento manual de la codificación Huffman,
se puede observar que cada una de las palabras código pueden formar parte
de un árbol de decisión:
Ejemplo: Si las palabras código resultantes de una fuente S, son:
s¡ palabras código
s2 0153 00154 000
Se puede construir un camino entre sucesión de ceros y sucesión de unos de
acuerdo a la figura 2-2.
FIGURA 2-2 !
si :
84
Esto indica que la codificación Huffman es un procedimiento altamente
recursivo, y puede hacer uso del concepto de codificación de árbol.
CODIFICACIÓN DE ÁRBOL
Se considerará el siguiente ejemplo: Un alfabeto fuente de 5 símbolos, si,
con sus respectivas probabilidades pf.
Capítulo II 49
si I si $2 53 54 85i
pí | 0.3 0.2 0.2 0.1 0.1
Haciendo uso de los procesos de codificación Huffman, se tendrá las
siguientes fuentes reducidas:
ss/ PI
S1 0.3s2 0.2s3 0.2s4 0.1]s5 0.1
S1s¡ Pi
s1 0.352 0.2s3 0.2 /
^s4 0.2<r
S2s¡ p¡
yS7 0.4
/ s2 0.3}^s3 0.2}
S3s/ Pi
^s1 0.6s2 0.4
Y aplicando la codificación regresiva, se tiene:
111
Como se mencionó anteriormente, cada una de las palabras código pueden
formar parte de un árbol de decisión; entre avanzar con un cero (0), o
avanzar con un uno (1).
Empezando con ei estado inicial, si ei primer dígito binario es un O, causará
un primer punto de decisión, hacia el estado s1 o s2, caso contrario
provocará un segundo punto de decisión, es decir si es un UNO lo recibido se
dirigiría hacia el estado s3, s4, o s5, de acuerdo al ejemplo que se está
analizando.
Capítulo II 50
Gráficamente se muestra en la figura 2-3
FIGURA 2-3
Estado inicial
Primer puntode decisión
Haclas1,s2
Segundo puntode decisión
Hacia s3,s4,s5
Para el siguiente dígito binarlo, a partir del primer punto de decisión, se iría al
estado s1, si es un CERO lo recibido, ya que el segundo dígito de su palabra
código es un O, caso contrario debe dirigirse al estado s2, puesto que el
segundo dígito de su palabra código es un 1.
Gráficamente se muestra en la figura 2-4
FIGURA 2-4 !
2°purto1* puntocíectetón
hacia 33,34,35
De igual manera, partiendo del segundo punto de decisión, se iría al estado
s3, si es un CERO lo recibido ya que el segundo dígito de su palabra código
Capítulo II 51
es un O, caso contrario se tendría un tercer punto de decisión, si es un UNO,
es decir se iría hacia el estado s4 o s5.
Gráficamente se muestra en la figura 2-5
FIGURA 2-5
estado inicial
2° puntocfectstin
si s2
3° puntodecisión
hacia s4,35
Desde el tercer punto de decisión, se irfa al estado s4 si es un CERO lo que
se recibe ya que el tercer dígito de su palabra código es un Of caso contrario
debe dirigirse al estado s5( puesto que el tercer dígito de su palabra código
es un 1.
Gráficamente se muestra en la figura 2-6
Capítulo ¡I 52
Se nota claramente que en este proceso, cada bit de cada palabra código es
examinado una sola vez, y que los estados terminales de éste árbol, resultan
ser ios 5 símbolos del alfabeto fuente, s1,52,53,54,55,
La codificación es instantánea, y al hacer uso de un árbol de decisión para la
codificación, las palabras código se halla fácilmente recorriendo el árbol
desde la raíz hasta un estado terminal (hoja del árbol).
El esquema del árbol de decisión provee un método muy cómodo y práctico
para lograr la codificación, haciendo uso de unas ramas simples de dos
caminos, un camino para el bit CERO y el otro para el bit UNO.
Un árbol de decisión, en realidad es una estructura de árbol; esta estructura
se explicará con más detalle en el capítulo III, cuando se analice el
procedimiento de compresión. .
2.1.4 PROPIEDADES DE DECODIFÍCACION.
PROPIEDADES A CUMPLIR EL CÓDIGO HUFFMAN
CÓDIGO UNÍVOCO.- Esta propiedad es necesaria porque ios mensajes
comprimidos están concatenados entre sf por las respectivas palabras
código, y en la descompresión se necesita decidir exactamente cuales
secuencias de ceros y unos son palabras código, a fin de poder hallar su
correspondiente símbolo fuente, indudablemente, si toda la secuencia de
cada una de las palabras código es única, se puede tener un sistema de
señales únicamente decodificable.
Capitulo II 53
CÓDIGO INSTANTÁNEO.- Al considerar como se decodificarían los
mensajes, es valioso contar con un código que permita identificar cada una
de las palabras código sin necesidad de analizar los símbolos que le
suceden.
Esta facilidad se tiene cuando el código es instantáneo, y eí código Huffman
cumple con la propiedad de decodificación instantánea. Por lo tanto al
decodificar, inmediatamente se conoce el fin de una palabra código y no se
requiere mirar los bits adicionales para decidir a cual símbolo corresponde.
Esta constituye una de las principales propiedades que hacen de! código
Huffman uno de los más poderosos, fáciles y simples en el proceso de
decodificación. \N DEL CÓDIGO HUFFMAN
De acuerdo a la definición y a las propiedades de codificación Huffman se
puede observar que el método para la decodificación, resultaría simple y
rápido si cada símbolo recibido se examina una sola vez, dentro de!
esquema de estructura de árbol, se consigue vencer el problema
fundamental de decodificación de los mensajes, identificando de manera
precisa y exacta el final de una palabra código y el principio de la siguiente.
Por consiguiente, la decodificación de un código Huffman requiere la
construcción de una estructura de árbol binario.
Ejemplo: Se parte de un sencillo ejemplo de codificación Huffman, con el
propósito de mostrar un esquema de estructura de árbol binario.
Capítulo II 54
• Fuente a codificar: {T,E,S,I}
• Para fines del procedimiento de codificación, basta con encontrar la
frecuencia de cada símbolo, la cual se la puede obtener del mensaje a
comprimir que es: TESIS
Símbolos
Fuente
T
E
S
I
frecuencia
1
1
2
1
Conformando las fuentes reducidas y codificándolas se tiene:
S 2 El 2 ST 3
T I S 2 El 2
E \ 1
/ 1
S 00 El 1 ST
T 01 S 00 El
E 10 T 01
7 11
La estructura de árbol binario resultante es el siguiente:
FIGURA 2-7
* Se puede decodificar fácilmente cualquier secuencia continua de bits,
como por ejemplo: 010111001011, en base a la estructura de árbol
Capitulo II 55
representada en la figura 2-7, en éste caso representa a ta cadena de
letras: 7T/SE/.
• Esto señala que, una estructura de árbol ofrece las mejores facilidades
para impiementar el código Huffman junto con su propiedad de
decodificación instantánea, y no es necesario delimitar cada una de las
palabras código para decodificarlas.
2.2 PROPIEDADES DE LOS CÓDIGOS BNO
Por el año de 1948 Shannon-Fano sugirió pero no especificó urra técnica de
codificación de las longitudes sucesivas de una fuente con 2 símbolos
estadísticamente independientes, en la cual la probabilidad de ocurrencia del
un símbolo es mucho menor que la del otro símbolo13.
La sugerencia también consistía en que para el símbolo de menor
ocurrencia, se tenga una secuencia especial binaria y para el resto de
símbolos subsecuentes un código de longitud sucesiva, que no debería
contener ninguna de las palabras código que incluya (a secuencia especial
del símbolo infrecuente, y como la probabilidad de símbolo infrecuente tiende
a cero, su longitud debería ajustarse lo más óptimamente posible.
Entonces podría utilizarse un código o un dígito único para el símbolo poco
probable de una fuente de 2 dígitos y esto se emplearía para solventar el
problema de distinción entre las muestras no redundantes y las palabras
código de longitud variable14.
13DATA CQMPRESSION TECHNIQUES AND APPLICATION, páy. 14514DATA COMPRESSIONTECHNIQUES AND APPLICATION, póg. 146
Capitulo II 56
Con estos conceptos preliminares, Wai_Hung Ng desarrolló por 1971 el
código BNO que actualmente se conoce, cuyas siglas en inglés significan:
Código Binario de Unos no consecutivos.
Este código así desarrollado, relaciona a las longitudes sucesivas de
muestras redundantes con palabras código de longitud variable que tengan
ceros consecutivos pero no unos consecutivos, y también la inserción entre
palabras código de una secuencia especial que contendrá unos
consecutivos, con la finalidad de distinguir el final de cada una de las
palabras código enviadas en forma continua15.
2.2.1 EFICIENCIA Y REDUNDANCIA
EFICIENCIA DEL CÓDIGO
Este parámetro proporcionará la medida de ia compresión, indica que tan
poderoso y apto es el código para realizar la compresión
Esta medida resulta luego de haber realizado la codificación respectiva,
encontrado la palabra código para cada uno de los símbolos de la fuente, y
cuantificado su longitud. De acuerdo a la fórmula (2-14) depende de la
entropía de la fuente y de su longitud media.
La variable r toma el valor de 2, puesto que el código BNO utiliza dos
Í5DATA COMPRESSIONTECHNIQUES AND APPLICATION, pág. 146
Capítulo il 57
símbolos para ia codificación de sus palabras código O y 1
Para calcular H(S) y L se tiene las siguientes fórmulas:
#2(5) = 2 A loga— (2-15)Pt
fL ~ ^^p¡longitudt (2-16)
/-i
Donde longftuti¡ se calcula con la siguiente expresión:
+ IISXCUSNCLÍ ESPECIAL (2 — 17)
SÍ se requiere de un rendimiento igual a 1, se estará ante un código
compacto de longitud media igual a la entropía, y en este caso la longitud
media ha alcanzado su valor mínimo sí y solamente sí cumplen con las
ecuaciones (2-3), (2-4), y (2-5),
REDUNDANCIA DEL CÓDIGO
La codificación BNO trata de crear un código de mínima redundancia, que
minimice el número promedio de bits por carácter, tomando ventaja de la
típica distribución de probabilidad no uniforme que presentan los símbolos de
la fuente.
Entonces al seguir el procedimiento del código BNO, se generan palabras
código de mayor longitud mientras más símbolos tenga la fuente a codificar,
y esto aftadirá complejidad en los requerimientos de diseño y
Capitulo II 58
almacenamiento para la compresión.
Por lo tanto esta codificación trae con sigo un problema fundamental, tener
que trabajar con palabras de longitud variable, y tratar de organizar cada
sfmbolo del alfabeto código, o sea, la delimitación del fin de una palabra
código y el principio de la siguiente.
Para delimitar cada palabra código es indispensable introducir una porción
de datos, que puedan ser insertados con poca o ninguna distorsión residual,
o en el caso de no introducir datos extras, se compensaría con una
programación más sofisticada y se lograría reducir la redundancia que por la
naturaleza de la codificación BNO se tendría.
2.2.2 TASA DE COMPRESIÓN
El radio de compresión es simplemente la: relación de bits de la fuente antes
de la compresión para los bits de la fuente después de la compresión, por lo
tanto la fórmula para calcular esa tasa de compresión en el código BNO es:
TASA COMPRESIÓN = * *te *****n° bits antes compresión
2.2.3 PROPIEDADES DE CODIFICACIÓN
PROPIEDADES QUE CUMPLE EL CÓDIGO BNO
CÓDIGO NO SINGULAR.- Esta es una propiedad muy importante para
códigos de longitud variable; consiste en que todas sus palabras código sean
Cap/íu/o // 59
distintas.
CÓDIGO NO UNÍVOCO,- l_a primera propiedad que se observa es, no ser
de decodíflcación única, es decir, en ía decodificación del mensaje, la
secuencia de bits continuos causará ambigüedad en la interpretación de los
símbolos codificados.
CÓDIGO NO INSTANTÁNEO.- El hecho de que el código BNO no sea
unívoco, implica que sea no instantáneo. Entonces para la decodificación
será necesario conocer uno o más bits con los cuales se decida por una
determinada palabra código.
CODIFICACIÓN DEL CÓDIGO BNO
Para codificar símbolos fuentes mediante el código BNO, se necesita
generar las palabras códigos en una cantidad igual a la de los símbolos
fuente, luego asignarlas según la probabilidad de cada símbolo.
La generación de éste código está basado en la fórmula; 2a, donde n es el
número de bits que tendrá una determinada palabra código.
La tabla 2-1 muestra los parámetros particulares para la generación de las
palabras código BNO.
De la secuencia de b'rts que resulten con estos parámetros se escogerán las
palabras del código BNO, en cada uno de los casos la secuencia de bits que
tenga 1's consecutivos, no será considerada como una palabra código BNO.
Capítulo II 60
TABLA 2-1 Generación del Código
n 2"
12345678
248163264128256
Por consiguiente, la longitud sucesiva de las muestras redundantes son
codificadas con palabras código de longitud variable que pueden tener ceros
consecutivos pero no unos consecutivos. Se observa lo dicho en la siguiente
tabla:
TABLA 2-2 Código BNO
longitud sucesiva palabras código
1234567e910111213U151617181920
01
000110000001010 :1001010000 :
00010010010001011000100110100000000001
Capitulo (I 61
Para proceder con la asignación de las palabras código, una vez generadas,
se deberán seguir los siguientes pasos:
1. Arreglar las probabilidades en orden descendente con su respectivo
sfmbolo, de mayor a menor.
2. Asignar al sfmbolo de mayor probabilidad ¡a primera longitud sucesiva, es
decir el CERO, al siguiente asignar la segunda longitud sucesiva, es decir
el UNO y continuar con este procedimiento de acuerdo a número de
longitud sucesiva que corresponda según la tabla BNO.
Los procedimientos de codificación BNO resultan por lo tanto, en la
generación de las palabras código de longitud variable y después en la
asignación de éstos códigos empezando por dos palabras de un bit de
longitud, luego tres palabras código de 2 bits, cinco palabras código de 3 bits,
y así sucesivamente, Entonces se conoce exactamente la longitud de las
palabras código por generarse, según la cantidad requerida para todos los
símbolos del alfabeto fuente,
Este código como se puede apreciar, se genera independientemente de la
probabilidad de los símbolos, pero la asignación si depende de cada una de
las probabilidades. Se aprovecha la frecuencia de ocurrencia de cada
símbolo, para asignar una palabra código de la menor longitud posible, de tal
manera que, los símbolos de mayor probabilidad tengan palabras código de
longitud pequeña y a los de menor probabilidad, palabras de longitud grande.
2.2.4 PROPIEDADES DE DECODIFICACION.
Capítulo fl 62
PROPIEDADES A CUMPLIR EL CÓDIGO BNO
CODIFICACIÓN ÚNICA,- Desafortunadamente toda secuencia de las
palabras código BNO no es única, por lo cual no se tiene un sistema de
señales únicamente decodificabíe.
Para conseguir una decodificación única, es necesario utilizar el concepto de
banderas, que disminuyen la tasa de compresión.
CODIFICACIÓN NO INSTANTÁNEA.-Al considerarla decodificación de los
mensajes, el código BNO no permite identificar cada una de las palabras
código sin antes analizar los símbolos que la suceden.
El código BNO cumple con la propiedad :de decodrficación no instantánea.
Por lo tanto para decodificar, se requiere mirar los bits adicionales para
decidirá cual símbolo corresponde.
DECODIFICACIÓN DEL CÓDIGO BNO
La decodificación de un código BNO requiere la inclusión de bits de banderas
para identificar de forma precisa y exacta la palabra código, los cuales se
colocarán entre el fin de una palabra código y el principio de otra.
Capitulo ti 63
CAPITULO
COMPRESIÓN Y DESCOMPRESIÓN DEARCHIVOS DE TEXTO
La codificación Huffman, y BNO son técnicas de compresión sin pérdida de
la entropía y son apropiadas para utilizarlas en la compresión de cualquier
clase de datos, ya que la representación de los símbolos después de la
descompresión, es idéntica a los símbolos asignados antes de la compresión.
3.1 PROCESOS DE COMPRESIÓN DE ARCHIVOS DE TEXTO.
El aspecto más Importante a considerar en la compresión es, delimitar
adecuadamente cada una de las palabras código, a fin de no perder la
información durante la decodlficación, y a la vez, que proporcione la mayor
facilidad al momento de separarlas en la descompresión.
Tanto la codificación Huffman como la BNO, parten de las probabilidades de
ocurrencia. Por lo tanto, el primer paso para codificar ios símbolos de las
fuentes a comprimir, es encontrar la distribución de probabilidades.
DISTRIBUCIÓN DE PROBABILIDADES
De acuerdo a la definición del Código Huffman y del código BNO, a cada
uno de los símbolos de la fuente a codificar, le corresponde una palabra
código de longitud variable, dependiendo de las probabilidades de ocurrencia.
Por lo que, el primer paso para realizar la codificación es, generar una lista
de probabilidades.
Esta lista, podría derivarse del análisis de las ocurrencias estadísticas que se
presenten, en los diferentes textos existentes, tales como, escritos de
medicina, ingeniería, historia, literatura, etc, o podrían ser el resultado de
compilar textos escritos en el idioma inglés, francés, español, etc.
En cada uno de estos textos, existirá una distribución de probabilidades
particular en el sentido de que, ciertos caracteres ASCII se utilizarán más que
otros.
Por ejemplo, la probabilidad de ocurrencia de carácter A, en el idioma
español, no será igual a la probabilidad de ocurrencia en el idioma inglés.
Pero, esta forma de obtener la lista de probabilidades del alfabeto ASCII,
otorga un carácter estático, tanto a la codificación Huffman, como a la
codificación BNO.
Sin embargo, se puede obtener la lista de probabilidades, mediante una
exploración de los símbolos de la fuente a comprimir, y encontrar las
probabilidades de ocurrencia, exclusivamente para ese alfabeto fuente.
Capítulo III 65
Este será el método a utilizar para obtener la distribución de probabilidades,
el cual, proporcionará una lista de probabilidades dinámica, que reflejará
efectivamente, el comportamiento estadístico del alfabeto ASCII de ese
archivo en particular.
Así, se logrará independencia total sobre el contenido en sí del archivo texto,
no interesa si se trata de textos en Inglés, español, japonés, etc. o si son
escritos de: medicina, ingeniería, religión, economía, etc. Lo que realmente
Importa, es que estos archivos sean de tipo ASCII.
A continuación se detalla los procedimientos seguidos para obtener la
compresión de archivos de texto.
3.1.1 COMPRESIÓN CON EL CÓDIGO HUFFMAN.
El código Huffman es claramente instantáneo y único, ya que ningún símbolo
codificado es un prefijo de otro; e) diseño de un código Huffman es altamente
recursivo, por lo que puede utilizarse una estructura de árbol, razón por la
cual primeramente se describen ciertos conceptos preliminares de una
estructura de árbol.
ARBOLES BINARIOS
En varias ocasiones, y muchas veces sin saberlo, trabajamos con los árboles,
por ejemplo: árboles genealógicos, organigramas, directorios en los discos
de un computador personal, etc. Cada uno de estos conceptos, representan
un árbol.
Capítulo III 66
Cuando de programación se trata, el concepto de árbol binario es muy
Importante, puesto que, constituye una de las estructuras de datos que
pueden implementarse, por lo tanto será necesario enunciar el concepto de
árbol binario de forma clara y precisa.
En su forma más elemental, un árbol binario está constituido por un vértice
principal, y de éste se desprenden dos ramas: la rama de la izquierda y la
rama de la derecha.
Su representación gráfica se presenta en la figura 3-1
FIGURA 3-1
Forma elemental de un árbol binario
f vértice \ principa! J
La rama izquierda y derecha también son dos árboles binarios. El vértice
principal se denomina rafz, y cada una de las ramas se denomina árbol
izquierdo y árbol derecho.
Árbol binarlo.- Un árbol binario es un conjunto finito de elementos, cada uno
de ios cuales se denominan nodos. Particularmente a ios nodos terminales se
les llama hojas del árbol. El primer elemento de un árbol binario es la raíz.
Este concepto se Ilustra en la figura 3-2.
Capitulo III 67
FIGURA 3-2
Árbol binarlo
RAÍZ
roma injuienJa
NODO
rama Izquierda
HOJA
rama derecha
MOCO
rama derecha
HOJA
NODO
rama derecha
HOJA
Nodo.- El nodo es un punto de decisión de un árbol, en este elemento se
guarda: la Información, la dirección de la rama derecha, la dirección de la
rama izquierda, y la dirección de su predecesor en caso de existir. Es decir
cada nodo puede estar ramificado por la izquierda y/o por la derecha, o
puede no tener ninguna ramificación.
FIGURA 3-3
Representación gráfica de una Hoja
efxxtador elpredecesor
opuriodoraJ árbol deta izquierda
Informaciónda nodo
-X;IapLrtador oí árbolda la derecha
Capitulo III 68
Hoja.- Una hoja es un nodo que no tiene ramificaciones. La representación
gráfica de un nodo se muestra en !a figura 3-3.
Peso.- E! peso de un árbol en un nodo dado, es e! número de nodos en el
árbol sin contarse e! mismo. Ver la figura 3-4
FIGURA3-4
E! peso de éste árbol cuya rafz es A, corresponde a! número de nodos de
ese árbol, y es 8. El nodo E tiene un peso de 4. Los nodos B y G tienen un
peso de 2.
En cierto sentido, el árbol binarlo es una forma especial de lista enlazada.
Los elementos que lo constituyen se pueden insertar, eliminar, y acceder en
cualquier orden, la operación de la recuperación de la información es no
destructiva.
PROCEDIMIENTO PARA LA CODIFICACIÓN Y DECODIRCACIÓN
Para la codificación, se implementa una estructura de árbol binario junto con
la definición de código Huffman; y a la vez, esta estructura de árbol se utiliza
Capitulo lll 69
para realizar la decodificación, el almacenamiento, y la recuperación de las
palabras código de longitud variable, en forma dinámica.
En otras palabras para comprimir con el código Huffman se aplica el método
de búsqueda y rastreo de las palabras código en una estructura de árbol
binario.
MÉTODO DELIMITADOR DE LA PALABRA CÓDIGO
Como se mencionó anteriormente, el aspecto más importante en este tipo de
compresión es, limitar adecuadamente cada una de las palabras código, y
esto se consigue también con la implementación de la estructura de árbol.
El concepto de hoja de un árbol binario, permite limitar adecuadamente cada
una de las palabras código. El decodificador inmediatamente conoce el final
de la palabra, y no tiene que depender de bits adicionales para decidir a cual
símbolo fuente corresponde tal secuencia de O's y 1's; ya que recorre el árbol
desde la raíz hasta una hoja, ésta nos indica eí final de la palabra código.
PROCESOS QUE INVOLUCRAN EL PROGRAMA DE COMPRESIÓN
HUFFMAN:
El programa de compresión está escrito para examinar un archivo texto
automáticamente, conseguir la tabla de probabilidades, y con esta
información construir un árbol binario de codificación instantánea. A
continuación se explica cada uno de estos procedimientos:
1. OBTENCIÓN DE LA TABLA DE PROBABILIDADES
Capitulo III 70
Para realizar este proceso, se accede uno a uno a los caracteres según e!
orden de aparecimiento en e! momento de leer el archivo texto y se crea una
lista doblemente enlazada.
La lista tendrá elementos tipo estructura con campos para almacenar la
frecuencia y el carácter. Su representación gráfica se ilustra en la figura 3-5.
FIGURA 3-5
Elemento de la Lista de Ocurrencias -HUFFMAN-
A medida que se vayan leyendo los caracteres del archivo fuente se
incrementará un contador específico para ese carácter, el cual corresponderá
a la frecuencia de ocurrencia. Por lo tanto a esta lista se !a llamará, Lista de
Ocurrencias de los caracteres ASCII, puesto que cada elemento tendrá un
carácter ASCII con su respectiva frecuencia de ocurrencia.
Una vez concluida la lectura total, se I procederá a ordenar la lista de
ocurrencia descendentemente en función del valor de la frecuencia.
Después se crea una Lista de Hojas de Referencia paralela, apuntando a
cada uno de los elementos de la lista de ocurrencia. De Igual manera susi
elementos son estructuras con campos para almacenar, el carácter, la
Capítulo III 71
frecuencia, y el número de bits de la palabra código. Su representación
gráfica se muestra en la figura 3-6.
FIGURA 3-6
Elemento de ia Lista de Hojas de Referencia HUFFMAN
cher
freo
N
-> s
La lista de ocurrencia y ia lista de hojas de referencia son las herramientas
creadas para acceder más rápido a cada uno de los caracteres, en ei
momento de la generación del código Huffman, y en el momento de la
compresión y descompresión del texto, respectivamente.
La construcción del código Huffman, empieza con los dos símbolos de
mínima probabilidad, el símbolo de mayor probabilidad será e! último en
considerarse, razón por la cual será de gran ayuda disponer de la lista de
ocurrencias en forma ascendente, para acceder más rápidamente, ya que
mientras sus elementos pasan a formar parte de la estructura de árbol, se
desligarán de la lista; y más fácil resurta desligarlos por el tope.
El árbol de codificación ya generado, tendrá los caracteres de gran
probabilidad cerca de la raíz, mientras que a los caracteres de poca
probabilidad lejos de la raíz, entonces la lista de hojas de referencia se
ordenará en forma descendente, mientras se vaya leyendo los caracteres del
archivo para comprimirlos, se deberá acceder a la hoja del árbol
correspondiente, tantas veces indique su frecuencia y, más rápido se logrará
Capitulo III 72
esto, al disponer la lista de hojas de referencia ordenada en función de la
frecuencia de mayor a menor.
Por consiguiente, se ordenará la lista de ocurrencias en forma ascendente y
la lista de hojas de referencia en forma descendente, físicamente se
representar en la figura 3-7. Se requiere que estén enlazadas, según avance
el proceso de codificación, se desligarán los elementos de la lista de
ocurrencias, y la única forma de accederá los caracteres rápidamente será a
través de la lista de hojas de referencia, físicamente se puede representar de
acuerdo a la figura 3-8.
2. CODIFICACIÓN HUFFMAN
Para ejecutar este proceso, se hará uso de la lista de ocurrencias, de la lista
de hojas de referencia, y de la estructura de árbol binario. Para ésta última se
creará una lista de árboles.
La lista de árboles está constituida por elementos tipo estructura donde se
almacenarán, el peso del árbol, y la dirección que apunte a una estructura
tipo árbol.
Para construir el árbol, se empezará con los 2 símbolos de mínima
probabilidad, se los combinará como 2 hojas del primer árbol. A la raíz de
éste árbol se asignará la suma de las dos probabilidades, y pasará a ser el
primer elemento de la lista de árboles. Esta lista de árboles se generará en
forma descendente en función de la suma de las probabilidades.
Capítulo fil 73
FIGURA 3-7
Lista de Ocurrencia y Lista de hojas de referencia (LHR)
ANTES DESPUÉS
Iniciamayorfrec
r r r rFin D-O
Lista de Oeurr. LHR
menorfrec
menorfrec
mayorfrac
Lista ds Ocurr.
mayorfrac
LHR
menorfrec
hoja
FIGURA 3-8
ÁRBOL BINARIO
raíz
mayorLHR fr8C
hoja
úitimo
menorfrec
Capítulo III 74
Entonces, se considerará este nodo junto con el resto de símbolos de la lista
de ocurrencias, y se seleccionará los dos ítems menos probables,
comparando entre, la suma de los dos siguientes símbolos menos
probables, y, la suma de un símbolo menos probable con el primer elemento
de ia lista de árboles. El menor valor resultante, formará parte del siguiente
elemento en la lista de árboles.
En el caso de que el valor de las sumas sean iguales, se dará prioridad al
resultado de la suma de los símbolos ASCII, para equilibrar el peso del árbol
binario, y obtener el código más eficiente.
Se puede continuar con la adición de nuevas hojas, haciendo uso de la
comparación mencionada arriba, lo que Involucra un intercambio de nodos
por medio de la lista de árboles.
Habrá un momento durante la construcción del árbol, en que todos los
símbolos de la lista de ocurrencia pasarán a formar parte de las hojas del
árbol, pero se tendrá cierto número de árboles por combinar. Entonces se
continuará sumando, dos elementos del tope de la lista de árboles, para
formar un nuevo árbol, y se colocará al fin, reduciéndose en un elemento esta
lista de árboles.
Esto continuará hasta construir y combinar todos los elementos de la lista de
árboles, y llegar a conseguir un sólo árbol.
La construcción de este árbol, enlazando doblemente cada uno de sus
elementos, solventará el problema para encontrarlas palabras código.
Capítulo III 75
Es necesario introducir pesos para cada nodo de! árbol, y actualizar esos
pesos según avance el proceso de codificación. Al final ese valor, indicará la
longitud de las palabras código.
La codificación del árbol Huffman, cambia para responder a ias
probabilidades de cada carácter.
Las hojas resultantes, son los símbolos del archivo fuente. Los símbolos más
probables estarán cerca de la raíz y por consiguiente la longitud de las
palabras código será pequeña, mientras que los símbolos menos probables
estarán lejos de la raíz y consecuentemente ta longitud de las palabras
código será grande.
Para codificar un símbolo, a través de la lista de hojas de referencia se
accederá rápidamente a la hoja que le contiene. Como el árbol se construyó
doblemente enlazado, se empieza por la hoja, y se avanza hacia la raíz.
Los tipos de ramas, izquierda o derecha, que describan el camino recorrido
desde la raíz hasta ia hoja, conformarán la palabra código del carácter.
Se recuerda que la rama izquierda representa al bit CERO, y la rama
derecha representa al bit UNO.
3. COMPRESIÓN HUFFMAN
El proceso de compresión hace uso de la lista de hojas de referencia, la
estructura de árbol y un buffer de bits en memoria RAM.
Capítulo III 76
Se comprime el texto, accediendo por segunda vez a los caracteres del
archivo fuente, se busca en ta lista de hojas de referencia, para de ahí
acceder rápidamente a la hoja dentro del árbol. Se procede a codificarlo,
mediante un rastreo de la estructura de árbol binario, partiendo de la hoja
hacia !a raíz.
Los bits de la palabra código encontrados se colocan en forma inversa en el
buffer de bits, puesto que las orientación correcta de la palabra código es,
desde la raíz hacía la hoja del árbol. No se rastrea desde la raíz, debido a
que dependiendo de la frecuencia se tardará más tiempo en encontrar el
carácter.
Se continúa con el siguiente carácter del archivo de igual manera, hasta
terminar con la lectura del archivo.
Cuando se ha completado hasta 1.000 bytes en el buffer, se almacena la
información binaria resultante, en el texto comprimido, junto con un
encabezado necesario para la decodificación.
Al finalizar este proceso, se obtendrá el archivo comprimido con Información
binaria, y llevará como parte de su nombre la extensión ,CPR
La estructura de árbol binario, permitirá cuando llegue el momento de la
descompresión, una decodificación también instantánea, ya que se irá
analizando uno por uno los bits del archivo comprimido, a partir de la raíz del
árbol, hasta encontrar una hoja. Siempre se realizará la decodificación de
una palabra código desde la raíz del árbol. Estos conceptos se analizarán
más adelante en el proceso de la descompresión
Capítulo /// 77
3.1.2 COMPRESIÓN CON EL CÓDIGO BNO
E! código BNO, por definición es un código no unívoco no instantáneo, y no
recursivo, por consiguiente a primera instancia no sería procedente utilizar el
método de estructura de árbol en su codificación.
Al aplicar un árbol de decisión para codificar un código no instantáneo, se
debería disponer de un algoritmo especial para decodificar la información de
tal forma que, una vez delimitada una palabra código, no empiece la
decodificación desde el principio del árbol, sino que vaya a un sitio apropiado
dentro del árbol de decisión.
Es decir no se debe examinar como en el caso del código Huffman, ya que
en la codificación BNO algunas palabras código son prefijos de otras.
El árbol así conformado podría requerir posiblemente un espacio de
almacenamiento inmenso, e involucrarían algoritmos con gran complejidad.
Razón por la cual se realizará un análisis para añadir banderas entre las
palabras código, esto involucra examinar detalladamente ciertos conceptos a
utilizar en los procedimientos de codificación y decodificación:
PROCEDIMIENTO PARA LA CODIFICACIÓN
Como se mencionó en el capítulo II, la codificación BNO se basa en la
expresión matemática 2n; el desarrollo de esta potencia se muestra en la
tabla 3-1.
Capitulo Ifl 78
TABLA 3-1
Generación de los parámetros del Código BNO
2n
21
22
23
Secuencia generada
2 01
4 00011011
8 000001010011100101110111
Este diagrama, permite encontrarlas palabras código. Realizando un análisis
de la tabla BNO (descrita en el capítulo II), se puede establecer que:
• la 1° palabra código es, el número O representado con 1 bit
• la 2° palabra código es, el número 1 representado con 1 brt
• la 3° palabra código es, el número O representado con 2 brt
• la 4° palabra código es, el número 1 representado con 2 bit
• la 5° palabra código es, el número 2 representado con 2 bit
• la 6° palabra código es, el número O representado con 3 bit
• la 7° palabra código es, el número 1 representado con 3 brt
• la 8° palabra código es, e! número 2 representado con 3 bit
• la 9° palabra código es, el número 4 representado con 3 bit
• la 10° palabra código es, el número 5 representado con 3 bit, etc.
Capítulo III 79
Entonces, si se define dos parámetros nby Neq tales que:
nb = Número de bits de la palabra código
Neq = Número en binarlo, representado con nb bits.
Cada palabra -código será igual a la secuencia binaria del número Neq
representado con nb bits. Por definición, no serán tomados en cuenta las
secuencias que contengan 1's seguidos. La tabla BNO corresponderá a
siguiente par de elementos:
de tal forma que se dará una correspondencia según se puede observar en
la tabla 3-2
TABLA 3-2
Parámetros para generar el Código BNO :
(nb;Neq) BNO
(1;Q) ->( 1;1 ) ->( 2;0 ) ->(2;1 ) ->( 2;2) ->(3;0) ->( 3;1 ) ->( 3;2) ->etc.
01 :000110000001010
La conclusión que se deriva de éste análisis es que, para generar !a palabra
código BNO, bastará con indicar 2 parámetros, uno para determinar la
Cap/tufo III 80
longitud de la palabra código y otro para indicar la secuencia de O's y 1's
necesarios con esa longitud, es decir: Asignar los parámetros nby Neq.
PROCEDIMIENTO PARA LA DECODIFICACIÓN
Debido a que las característica principal del código BNO, es que no deben
existir unos seguidos en ta palabra código, se aprovecha esta particularidad
para incluir cierta cantidad de 1's como bits de bandera, será un indicativo
claro y conciso el encontrar más de dos 1's seguidos.
En primera instancia, se puede pensar en la inclusión de dos 1's consecutivos
entre las palabras código; se analiza los casos que podrían presentarse:
A) La inclusión de dos 1's entre una palabra código que termine en CERO y
una palabra que empiece con CERO.
B) La inclusión de dos 1 's entre una palabra código que termine en CERO y
una palabra que empiece con UNO.
C) La inclusión de dos 1's entre una palabra código que termine en UNO y
una palabra que empiece con CERO.
i]n[o
Capitulo III 81
D) La inclusión de dos 1's entre una palabra código que termine en UNO y
una palabra que empiece con UNO.
Los caso A y D, son fácilmente decodificables; como no debe existir 1's
seguidos en una palabra código BNO, ese número par de 1's, limita
perfectamente el final de una de ella y el principio de la otra.
En el caso A, existen dos 1's consecutivos, y sin confusión alguna se nota
claramente que la primera palabra código termina en CERO y la siguiente
empieza con CERO.
En el caso D, existen cuatro 1's seguidos, el segundo y tercer 1's constituyen
los bits de bandera, y limitan inconfundiblemente la primera palabra código,
indicando que termina en UNO; los siguientes dos bits forman parte de la
segunda palabra código, que empieza con UNO.
Los caso B y C, no son fácilmente decodificables, puesto que al
considerarles como una secuencia continua, surge ambigüedad en identificar
los bits de bandera, y por consiguiente también al identificar las palabras
código.
secuencia continua 01110
Aí encontrar los dos 1's consecutivos se puede pensar que la palabra código
termina en CERO, y la siguiente empieza en UNO, se puede optar por el
Capítulo III 82
caso B. Pero también podría ser que la primera palabra código termine en
UNO y la siguiente empiece con CERO; se trata del caso C.
Este análisis lleva a la conclusión de que no resulta un buen método para la
decodificación incluir solamente dos 1's entre las palabras código, sino que
se requiere más de dos bits de bandera.
Como el problema surge principalmente en los casos B y C, se los examina
con más detalle:
1. Cuando la secuencia se originó al separar una palabra código que terminó
en CERO con otra que empezó con UNO.
1010]! 1[1001
Se puede pensar, añadir después de los bits de bandera, un dígito
Indicando que la primera palabra código termina en CERO; podría ser un
byte que represente al número CERO.
1010]11(00000000}[1001
Entonces, después de toparse con dos 1's consecutivos, se leerla un
byte y sí representa al número CERO, la primera palabra código
terminaría en CERO.
2. Cuando la secuencia se originó al separar una palabra código que terminó
en UNO con otra que empezó con UNO.
00l]ll[0001
Capítulo III 83
Para este caso se puede añadir un byte que represente al dígito UNO;
indicando que la primera palabra código termina en UNO.
00l]ll(0000000l)[0001
Entonces, al toparse con dos 1's consecutivos se leerla un byte a
continuación, si representa al número 1, significa que la primera palabra
código termina en 1; al adoptar esta solución se tendría las siguientes
secuencias binarias:
101011000000001001
00111000000010001
La primera secuencia se confunde con el caso A, antes mencionado; y la
segunda secuencia se trata del caso C, en el cual persiste ia
ambigüedad.
Sin embargo, éste análisis permitió crear un método al que se lo denomina:
inclusión de cola de bits, a continuación se explica detalladamente.
MÉTODO DELIMITADOR DE LA PALABRA CÓDIGO
De todo el análisis hecho anteriormente, se desprende la necesidad de
completar una secuencia de tres 1's cuando !a palabra termine en CERO, y
seguidamente añadir el bit CERO que indicará que la palabra efectivamente
termina en CERO. Cuando la palabra termine en UNO, se completaría la
secuencia de tres 1's añadiendo dos 1's más, y a continuación se añadiría el
bit UNO para indicar que la palabra efectivamente termina en UNO.
Capítulo III 84
Por lo tanto, cuando termine una palabra código en CERO, se añade: tres 1 's
y un cero; cuando termine en UNO, se añade tres 1 's . se representa así
Palabra código que termina en CERO
Palabra código que termina en UNO
Para decodificar las palabras código, dentro de una secuencia continua de
bits; se toma los primeros tres 1ls consecutivos, se lee el siguiente bit, si el bit
leído es O, entonces la palabra código anterior a los bits de bandera termina
en CERO, y si el bit leído es 1 , entonces la palabra código anterior termina
en UNO.
Ejemplo: Si se tiene la secuencia binaria: 0001110010111101, la limitación
de las palabras código sería:
• Primeros tres 1's consecutivos:
000111)0010111101
• Se lee el siguiente bit
ooom>(o)oioimoi
• Como se trata de un CERO, entonces la primera palabra código termina
Capítulo lll 85
en cero:
000 m>(o)oi0111101
Se continúa la lectura después del bit O entre paréntesis, hasta encontrar
tres 1 's consecutivos.
000|lll)(o)010111)101
Se lee el siguiente bit:
* En este caso se trata de un UNO, entonces la segunda palabra código
termina en un UNO:
|ooo|iii>(o)oioin>(i)oi
Los dos úttimos bits, constituyen la tercera y úttima palabra código de esta
secuencia binaria:
1 JL1° 2°
Capitulo III 86
Este proceso continúa en forma cíclica, hasta terminar con ia lectura del
archivo comprimido, finalmente se ha reconstruido el archivo fuente.
3.2.2 DESCOMPRESIÓN CON EL CÓDIGO BNO.
Primeramente, se crea la lista de ocurrencia con los datos de frecuencia y
carácter que contiene la cabecera. Se completa esta lista con la asignación
de los parámetros nb y Neq, los cuales en el proceso de descompresión
sirven para identificar el símbolo comprimido.
El siguiente proceso consiste en leer ia información comprimida, y en
decodificario con la ayuda de los bits de bandera; una vez identificada la
palabra código BNO se calculan sus parámetros (nb y Neq). Con estos dos
valores se realiza una búsqueda dentro de la lista de ocurrencia; el elemento
de ia lista que posea los mismos valores de nb y Neq contendrá el ASCI! del
símbolo fuente.
El cálculo de los parámetros nb y Neq a partir de la palabra código, consiste
en transformar esa información binaria en información decimal. El número en
decimal resultante es el valor de Neq, y la longitud de la palabra código es el
valor de nb.
Este procedimiento continúa hasta terminar con la lectura de todo el archivo
comprimido; como resultado final se obtiene un archivo totalmente
descomprimido e igual al original.
3.3 IMPLEMENTACIÓN DEL PROGRAMA.
Capitulo III 93
En esta parte de la tesis, se explica en que forma se aplicó la teorfa expuesta
en los capítulos anteriores para conseguir la compresión y descompresión de
archivos de texto, tanto con el código Huffman como con el código BNO.
3.3.1 DIAGRAMAS DE FLUJO
Debido a que el lenguaje C es un lenguaje estructurado los diagramas de
flujo que se realizan obedecen a esta característica; el lenguaje permite la
compartimentalización de código y datos, esto significa que el lenguaje
puede separar y esconder del resto del programa toda la información y las
instrucciones necesarias para realizar una tarea específica.
En C++ todas las subrutinas son funciones discretas; son los bloques de
construcción del lenguaje C en los cuales tiene lugar toda la actividad del
programa, por lo tanto este tipo de diagramas de flujo que se introduce
permite entender con una lógica más fácil la estructura del programa en C++
Para una mejor comprensión de los diagramas de flujo, se hace una breve
descripción de los símbolos utilizados.
Un rectángulo:
Representa los datos, tales como nombre, directorio y drive, en el que se
encuentra los archivos a manejarse.
Una circunferencia o elipse:
Capítulo (II 94
Representa un proceso a ejecutarse, es decir un conjunto de fases sucesivas
de una operación determinada.
Dos líneas paralelas:
Representan un medio de almacenamiento, el archivo donde se almacenará
la información, pudiendo ser un espacio de! disco duro, o un diskette, etc.
A más de estos símbolos, las líneas rectas y oblicuas, indican flujo de
información hacia donde apunten las flechas.
A) DESCRIPCIÓN DEL SISTEMA:
A continuación se explica el diagrama de bloques mostrado en la figura 3-1;
sobre la descripción general del sistema a Implementarse.
Compresión
Programa que permite comprimir con uno de los dos métodos:
* Código Huffman, ó
* Código BNO
Se obtendrá un archivo comprimido, sin destruir el archivo fuente.
Se implementa en El Lenguaje C++.
Capítulo III 95
FIGURA 3-12
DESCRIPCIÓN DEL SISTEMA
Inicio
Descompresión
Programa que permite descomprimir archivos; identifica automáticamente el
código utilizado para ia compresión, y sobre este código realiza la
descompresión, todo esto se ¡mplementa en El Lenguaje C++.
B) COMPRESIÓN UTILIZANDO EL CÓDIGO HUFFMAN
1. DIAGRAMA DE FLUJO GENERAL PARA LA COMPRESIÓN
Se explica a continuación las siglas respectivas y el diagrama de flujo, según
la figura 3-13
SIGLAS:DFDAC
Datos fuentesDatos ArchivosCaracteres
Capitulo III 96
LALCCCACAAPLCLHRF
Lista de datos de archivoListaCódigo comprimidoCaracteres a comprimirÁrbolÁrbol en procesoLista de códigoLista de Hojas de Referencia.Final
FIGURA 3-13
COMPRESIÓN HUFFMAN
P3 T2
Fuentes/nA \a
GenerarCódigo deCompresión
Al
ArchivoFuente
Fuentes (T1).
Se refiere a los datos que definen a los archivos fuentes, sus nombres,
extensiones y fos directorios donde se encuentren ubicados. Es decir datos
del archivo ejecutable, del archivo a comprimir y del archivo comprimido.
Verificación de Fuentes (P1)
Capitulo ¡II 97
Sentencias que permiten la verificación de los datos que definen a los
archivos fuentes, para comprobar su existencia, y decidir si se continúa o no
con el proceso de compresión. Ingresa a este proceso los datos que definen
al los archivos fuentes.
Generar lista de ocurrencias (P2)
Con este proceso se obtiene la frecuencia de ocurrencia de cada carácter,
examinando ei archivo fuente a comprimir. Se genera una Lista de Hojas de
Referencia que permita obtener una mayor velocidad en el proceso de
compresión; por medio de esta lista se accede rápidamente hacia la hoja del
árbol que contenga e! carácter a comprimir, y se obtiene en forma dinámica
la palabra código correspondiente. Este proceso hace uso de los datos del
proceso P1, y da como resultado una lista de ocurrencias y una lista de hojas
de referencia.
Archivo Fuente (A1)
Constituye el texto que se comprimirá; tiene la extensión TXT como parte del
nombre, para Indicar que se trata de archivos con código ASCII, esta
requerimiento en el nombre de! archivo es opcional. Se accede dos veces a
este archivo tipo texto, la primera vez para generar la lista de ocurrencias, y
la segunda vez para generar el código de compresión.
Archivo Comprimido (A2)
Este archivo es el resultado de comprimir el archivo fuente y lleva como
extensión .CPR , con !o cual es fácil de identificarlo en el proceso de
Capítulo III 98
verificación de fuentes. En primera instancia se guarda la lista de datos del
archivo original, resultantes del proceso P2, y después el código comprimido
resultante de! proceso P4-.
Generar el Árbol de Código (P3)
Este proceso constituye en si, la codificación Huffman, el cual construye un
árbol binario utilizando la definición del código Huffman. La estructura de
árbol sirve para encontrar cada una de la palabras código de longitud
variable, de tal manera que puedan ser utilizada con la mayor eficiencia en el
proceso de compresión. Se hace uso de la Lista de ocurrencia y de la lista de
árboles. Dando como resultado el árbol de codificación, y la lista de hojas de
referencia debidamente direccionada, y un archivo reporte.
Generar código de Compresión (P4)
Con este proceso se obtiene el archivo comprimido, haciendo uso de los
datos del proceso P3. Como datos se utilizan los caracteres a comprimir, la
lista de hojas de referencia, el árbol de codificación; como datos de salida se
tiene los caracteres comprimidos.
Screen Video (T2)
Muestra una ventana de presentación, en ta cual se indica en forma
secuencial ios procesos que se están realizando y despliega el tiempo de
ejecución de los procesos P2, P3 y P4.
Capitulo Hl 99
Selector de mensajes (T3)
Controla los mensajes de error y mensajes indicativos durante el proceso.
2. DIAGRAMAS DE FLUJO DE CADA UNO DE LOS PROCESOS
VERIFICACIÓN DE FUENTES:
FIGURA 3-U
VERIFICACIÓN DE FUENTES
VERfTCAR
NAO ^ \O FUENTE
"NDO
VEÍFICAR
¿flCHIVO DESTWO
Datos Fu«nt« ^f DIVISOR
D€ DATOS^ /
AD
SIGLAS:NAO: Nombre del Archivo OrigenNDO: Nombre del Directorio OrigenNAD: Nombre del Archivo DestinoNDD: Nombre del Directorio Destino
TO: Tamaño origen
ALGORITMO EN PSEUDOCODIGO:
Recibe los datos fuentes. Al entrar al Divisor de datos, se clasifica:El nombre archivo origen y directorio origenEl nombre archivo destino y directorio destinoSi no existe el directorio origen ni el archivo origen =>Emite mensaje de error "EDO"
Capitulo ¡II 100
Salir del proceso de compresión
SÍ no existe el directorio destino =>Emite mensaje de error "EDD"Salir del proceso de compresión
En caso de que todo este bien, se pondrá ta siguiente información:TO = Determinar tamaño de archivo de origenAO = Directorio origen + archivo origenAD = directorio destino + archivo destinoRetomarlo, AO y AD.
GENERAR LISTA DE OCURRENCIAS:
FIGURA 3-15
GENERACIÓN DE LISTA DE OCURRENCIAS
Datos de arcNvo
EscrttLrade cabecerad* archivocomprimido
Generartóa de hojasde relerencia
Lista
SIGLAS:TO: Tamaño origenDO: Directorio origenAO: Archivo origen
Capitulo III 101
DD: Directorio destinoAD: Archivo destinoLHR: Lista de Hojas de Referencia
ALGORITMO EN PSEUDOCODIGO:
AO = Preparar archivo origenMientras !EOF(AO), hagaC = Lee carácter de AOAñade C a lista de ocurrenciaAD = Crear archivo destinoEscribir en AD el nombre de archivo origenEscribir en AD el tamaño de archivo origenEscribir en AD el modo de compresión
Mientras no fin de lista, hagaLeer miembro de listaEscribir carácter + frecuencia en ADRetome lista y descriptor AD
GENERAR EL ÁRBOL DE CÓDIGO:
FIGURA 3-16
GENERACIÓN DEL ÁRBOL BINARIO
Arboi en desarroio
Árbol
ALGORITMOS EN PSEUDOCODIGO:
L = Capta listaLHR = Capta lista de hojas de referencia
Capítulo ¡II 102
Mientras no termine de leer elementos de L, haga:Crea "Refhoja""Refrioja" apunta a una hojaAñade "Refhoja" a "Lista de direcciones"Siguiente hojaA = Código Huffman (L)retoma (A)
GENERAR CÓDIGO DE COMPRESIÓN:
FIGURA 3-17
GENERACIÓN DEL CÓDIGO DE COMPRESIÓN
hacia ]Qpacialla
INGRESOABUFFERDEBíTSARCHIVO
FUBCTE
ALGORITMOS EN PSEUDOCODIGO;
ARCHIVOCCM^MDO
Toma árbolToma lista de hojas de referenciaAbre archivo fuente y prepara archivo destinoInícíalizar buffers-códlgoGenerar código (Árbol, lista hojas ref, archivo fuente) => archivo destinoCierra archivo fuente, archivo destinoElimina buffer-códlgoElimina árbolretoma final
Capítulo III 103
ARCHIVOS FUENTE
* Tipo Texto
* Código ASCII
* Nombre de archivo con extensión .TXT (opcional)
* Tamaño en bytes
ARCHIVO COMPRIMIDO
* Formato completo:
FIGURA 3-18
FORMATO DEL ARCHIVO COMPRIMIDO
MétodoCompresión
CódigoComprimido(mfaytes)
Tamaño Usta deOrtghal Ocirren(4 bytes) (n bytes)
El archivo comprimido consta de dos partes fundamentales: cabecera y
código comprimido.
En la cabecera se guarda la siguiente información:
Capitulo III 104
• Tamaño original, variable dimensionada con 4 bytes para almacenar
el tamaño del archivo fuente.
• Método de compresión, la dimensión de ésta variable es de un byte,
en este espacio se almacenará una H ó una B, dependiendo si el
código utilizado es Huffman o BNO respectivamente.
HUFFMAN = H
BNO =B
» Lista de ocurrencias; ocupa n bytes, cada elemento de ésta lista
contiene ei carácter con su respectiva frecuencia. Como limitador del
fin de la lista se pone un carácter con frecuencia Igual a cero.
Cada símbolo ASCII se guarda en una variable de 1 byte, y para la
frecuencia la variable entera es de 4 bytes.
En el código comprimido se almacena la secuencia de las palabras
código correspondientes a los símbolos fuente.
LISTA DE HOJAS DE REFERENCIA:
En la figura 3-19 se muestra fa lista de hojas de referencia; almacena
los punteros a las hojas del árbol; se la crea en memoria RAM.
Capítulo III 105
FIGURA 3-19
LISTA DE HOJAS DE REFERENCIA
Bemertü cia laLteta de Hojas cié Retsroncla
•É—^ -9
char trac •* char trec
^-±
*—
' A
— >
í/n-^Hoja
3. DIAGRAMA DE FLUJO GENERAL PARA LA DESCOMPRESIÓN
FIGURA 3-20
DESCOMPRESIÓN HUFFMAN
A1
Generarel árbol de
código
Lecturade
Encabezado
DescomprimirArchivo
A2Archivo
Descomprimido
SIGLASDFDAC
Capitulo ¡II
Datos fuentesDatos Archivos Comprimidos
106
LAECCASA+ASACF
Lista de datos de archivoEncabezadoCódigo comprimidoÁrboiSeñal de Avance + árbolSeñal de AvanceCaracteresFinal
Lectura de encabezado (P2)
Este proceso constituye el primer paso de la descompresión, ya que
proporciona los datos particulares tanto del archivo comprimido como
del código utilizado.
Archivo Comprimido (A1)
Constituye el texto que se descomprimirá; tiene la extensión CPR para
indicar que se trata de un archivo comprimido, parámetro válido en el
proceso de verificación de fuentes.
Archivo Descomprimido (A2)
Este archivo es el resultado de la descompresión, lleva como extensión
del nombre .DES.
Generar el Árbol de Código (P3)
La estructura de árbol en este proceso, sirve para decodíficar las
palabras código recorriendo el árbol conforme aparezcan los bits O's y
1's que resulten de examinar el archivo comprimido;
Capitulo III 107
Descomprimir archivo (P4)
Con este proceso se obtiene el archivo original, haciendo uso de los
datos proporcionados al examinar el árbol generado en P3.
C) COMPRESIÓN UTILIZANDO EL CÓDIGO BNO
1. DIAGRAMA DE FLUJO GENERAL PARA LA COMPRESIÓN
FIGURA 3-21
COMPRESIÓN BNO
Generar \Cy Asignar » "*•parámetrosde) código
GenerarCódigoCompresión
ArchivoFuente
P5
SIGLAS:DF : Datos fuentesDA : Datos ArchivosC : CaracteresLA : Lista de datos de archivo
Capitulo III 108
L : ListaCC : Código comprimidoCAC: Caracteres a comprimirLC : Lista de códigoLB : Lista de bits con BNOF : Final
A continuación se explica solamente los procesos que difieren de los
utilizados con el código Huffman.
Generación y Asignación de parámetros del Código BNO (P3)
Este proceso, asigna para cada carácter de los elementos de la lista de
ocurrencia un par de variables nb y Neq ; representan los parámetros
con que se generarán posteriormente las palabras código.
Generar código BNO (P4)
Este proceso genera una por una las palabras código haciendo uso de
los resultados del proceso P3, mediante la manipulación de bits;
almacena cada una de las palabras código en una lista de bits. Además
enlaza los bits de bandera a cada palabra código, con lo cual se obtiene
una secuencia continua de la palabra código junto con la cola de bits.
Generar código de Compresión (P5)
Con este proceso se obtiene el archivo comprimido, haciendo uso de
los datos proporcionados por el proceso P4.
2. DIAGRAMA DE FLUJO PARA LA DESCOMPRESIÓN
CapftutoIH 109
A continuación se explica solamente los procesos que difieren del
proceso de compresión BNO, según la figura 3-22, así como también el
significado de las siglas respectivas.
FIGURA 3-22
DESCOMPRESIÓN BNO
Puíntfts
TI
Al
SIGLAS:DFDACLAECCSA+LBSACF
Datos fuentesDatos Archivos ComprimidosUsía de datos de archivoEncabezadoCódigo comprimidoSeñal de Avance •+• Lista de BitsSeñal de AvanceCaracteresFinal
Descomprimir archivo (P4)
Capítulo III 110
Con este proceso se obtiene el archivo original; se logra decodificar la
información binaria (archivo comprimido) comparándola con los
resultados del proceso P3.
3.3.2 DEFINICIONES FUNCIONALES
Se crea un total de cuatro programas ejecutables:
• Huffman Para la compresión con codificación Huffman
• Huffdes Para la descompresión con codificación Huffman
• Bno Para la compresión con codificación BNO
• Bnodes Para la descompresión con codificación BNO
Los programas ejecutables Huffman y Bno; generan a más del archivo
comprimido con extensión .CPR, un archivo adicional, el cual se fe llamará
archivo reporte; se le asigna el mismo nombre del archivo fuente y se le
añade la extensión .RPT.
Los programas ejecutables Huffdes y Bnodes, generan el archivo
descomprimido totalmente en binario, añadiendo la extensión .DES al
nombre del archivo.
El archivo reporte, ofrece la facilidad de contar con los resultados tanto de la
codificación como de ¡os cálculos realizados sobre ciertas propiedades
fundamentales; de la fuente de información , y del código utilizado.
Capítulo III 111
3.3.3 PRUEBAS DEL PROGRAMA
De acuerdo al dimencionamiento de la cabecera del archivo comprimido, se
clasificó ios archivos texto dentro de cuatro categorías:
1. Archivos texto con tamaños menores o iguales a 10 Kbytes.
2. Archivos texto con tamaños entre 10 y 25 Kbytes
3. Archivos texto con tamaños entre 25 y 50 Kbytes
4. Archivos texto con tamaños mayores a 50 Kbytes
En función de ésta clasificación se seleccionó un total de 15 archivos, con e!
propósito de obtener una variabilidad de ocurrencia de los caracteres ASCII,
se escogieron archivos de diferentes tópicos, tale como archivos resultantes
de programaciones y archivos de documentación escrita. A continuación se
muestra en la tabla 3-3:
La información que contienen los archivos reportes (ver tabla 3-4-) como
efecto del proceso de compresión con el código Huffman y BNO, es la
siguiente:
1. Un listado en el que se indica: la representación gráfica del símbolo, su
valor en ASCII, la frecuencia, la probabilidad, la cantidad de información
que genera et símbolo fuente, la longitud de la palabra código en bits, y la
palabra código. Esto especialmente con la codificación Huffman; con la
codificación BNO, se añada a fa longitud de la palabra código la cantidad
de los bits de bandera, y tamben se indica lia palabra código
Capitulo íll 112
TABLA 3-3LiSTA DE ARCHIVOS DE PRUEBA
CATEGORÍA
PRIMERA
0<Tamaño<10K
SEGUNDA
10K<Tamafto<25K
TERCERA
25K<Tamaño<50K
CUARTATamafto>50K
NOMBRE DE ARCHIVOS
PRUEBAVITETELAANEXO 1VISUAL
TESMPPLAN1PLAN6
TESIIITESISPLAN3TESIII1TESIV
ACTStSPLAN2
TAMAÑOORIGINAL
[byíes]
15
3.012
9.015
5.7118.664
17.13317.68521.283
28.99030.22832.06141.45948.678
64.75771.960
2. Los valores y cálculos obtenidos de:
• número de caracteres leídos
• número de símbolos ASCII existentes (q)
• tamaño del archivo original
• tamaño del archivo comprimido, que es la suma del tamaño del
encabezado, de la lista de ocurrencias y de! código comprimido;
cada valor se indica por separado, para efectos de
interpretación de resultados
• longitud media de las palabras código
• cantidad de información del archivo fuente
Capítulo til 113
TABLA 3-4a
CONTENIDO DEL ARCHIVO PRUEBA.RPTCOMPRESIÓN CON EL CÓDIGO HUFFMAN
PRUEBATXT
USTADO DE CÓDIGOS Y VALORES DE LOS SÍMBOLOS EXISTENTES
SÍMBOLO ASdl FREC. PROB. l(s) BITS CÓDIGO Huffman
[fl[ ][y]u]n]m]M[0][N][H]IB]
[Vi
[102][32][121][117][110][103][37][73][78][72]
[10][255]
0.1333330.13333300666667
0.0666667
0.06666670.06666670.06666670.06666670.0666667
0.06666670.0666667
Z3Q7Z3Q73.3073.9073.3073.3073.9073.9073.3073.3073.307
3.3073.307
011001000
11111110110111001011101010011000
01010100
NUMERO DE CARACTERES LEÍDOS = 15NUMERO DE SÍMBOLOS EXISTENTES q= 13 [símbolos]
TAMAÑOS DEL ARCHIVO ORiGÍNAL15[bytes]TAMÁ¥QS DELARCHIVO COMPRIMIDO:
ENCABEZADO (Tamaño; Modo); 5 bytesLJSTA (Caracteres, Frecuencias) + fin de feta (F=OJ: 70 bytesCÓDIGO: 7 bytes
LONGITUD MEDIA DE LAS PALABRAS CÓDIGO : 3.8667 [bits/simbolo]CANTIDAD DE INFORMACIÓN : 3.6402 [bits/símbolo]CANTIDAD DE INFORMACIÓN MÁXIMA: 3.7004 [bksAimbolo]EFICIENCIA: 0.33273H(s)n>3X-Hís) = 0.060216RADIO MÁXIMO DE COMPRESIÓN : 1.0165REDUNDANCIA: 0.0)72117TASA DE COMPRESIÓN APARENTE: 546.67 %TASA DE COMPRESIÓN REAL 548.67 %
REDUNDANCIA CON RESPECTO A LA FUENTE ASdl: Q.G60Z16 [bits]
Capítulo ¡II 114
TABLA 3-4b
CONTENIDO DELARCHIVO PRUEBA.RPTCOMPRESIÓN CON EL CÓDIGO BNO
PRUEBAJXT
LISTADO DE CÓDIGOS YVALORES DE LOS SÍMBOLOS EXISTENTES
SÍMBOLO ASCI) FREC. PROB. l(s) BITS B1TS[C+B] CÓDIGO BNO==COD!GO[BNO-*-Bandera]
u[y][u]
M[m][a]
[O]
¡HIIBl
[102)
[321
U21]
[117]
[110]
[109]
[97]
[79]
[78]
[72]
[66]
1101
[2551
0.133333
0.133333
0.0666667
0.0666667
0.0666667
0.0666667
0.0666667
0.0666667
0.0666867
0.0666867
0.06S6667
1 0.0658667
1 0.0686667
2.907
2.907
3.907
3.907
3.Q07
3.907
3.907
3.907
3.907
3.907
3.907
3.907
3.907
0—01110
1==1111
00—001110
01—0111 1
10—101110
000=»0001110
001—001111
oío—oiomo100—1001110
loi—lomi0000—00001110
0001'
0010 =
•0001111
=00101110
NUMERO DE CARACTERES LEÍDOS = 16
NUMERO DE SÍMBOLOS EXISTENTES q- 13 [símbolos]
TAMAVOS DELARCHIVO ORIG1NAU15 [b/Tes]
TAMAVOS DELARCHIVO COMPRIMIDO:
ENCABEZADO (Tamaño; Modo): 5 bytesLISTA (Caracteres, Frecuencias) + fin de lista (F-0): 70 bytes
CÓDIGO: 12 bytes
LONGITUD MEDIA DE LAS PALABRAS CÓDIGO : 6.0667 [bits/símbolo)
CANTIDAD DE INFORMACIÓN : 3.6402 [bjts/slmbolo]
CANTIDAD DE INFORMACIÓN MÁXIMA : 3.7004 [bits/símbolo]
EFICIENCIA: 0,60004
H(s}max-H(s) - 0.060216
RADIO MÁXIMO DE COMPRESIÓN : 1.0166
REDUNDANCIA : 0.39996
TASA DE COMPRESIÓN APARENTE: 680 %
TASA DE COMPRESIÓN REAL: 580%
REDUNDANCIA CON RESPECTO A LA FUENTE ASCII: 0.060216 [brts]
Capitulo III 115
FIGURA 3-23a
VENTANA DE PRESENTACIÓN, UTILIZANDO EL CÓDIGO HUFFMANCOMPRESIÓN
COMPRESIÓN poi código HUFFMAN
Fases de compresión:
Cargando el archivo PRUEBA.TXT
Generando d Árbol binario de código
Geneíando el reporte en PRUEBA.RPT
Generando el archivo PRUEBA.CPR
0.11 [segundos]
O.QQlsegundos)
0,05[ segundos)
Q.Q6[ segundos]
Tiempo total de proceso: 0.27 [segundos]
FIGURA 3~23b
VENTANA DE PRESENTACIÓN, UTILIZANDO EL CÓDIGO HUFFMAN
DESCOMPRESIÓN
DESCOMPRESIÓN por código HUFFMAN
Fases de descompresión:
Cagando ei aichrvo PRUEBA.TXT
Geneíando el Áfbd binario de cócfcgo
Genefando el reporte en
Geneíando el aicNvo PRUEBADES
0.05[ segundos]
Q\QO[segundo$]
CLCS[ segundos]
Tiempo total de proceso: 0.17 [segundos]
Capitulo Hl 116
FIGURA 3-24a
VENTANA DE PRESENTACIÓN, UTILIZANDO EL CÓDIGO BNO
COMPRESIÓN
COMPRESIÓN pot código BNO
Fases de compresión:
Cargando d archivo PRUEBA.TXT 0.11 [segundos]
G enerando parémetios de código 0.00(segundos]
Generando el reporte en PRUEBA.RPT O.Q6[segundos]
Generando el archivo PRUEBA.CPR 0.05|segundos]
Tiempo total de proceso: 0.27 [segundos]
FIGURA 3-24b
VENTANA DE PRESENTACIÓN, UTILIZANDO EL CÓDIGO BNODESCOMPRESIÓN
DESCOMPRESIÓN por código BNO
Fases de descompresión;
Cargando el archivo PRUEBA.TXT
Generando parámetros de código
Generando el reporte,....
Generando et archivo PRUEBA.DES
Q,05[segundos]
0.00[segundos]
Q,G6[seguridos]
Tiempo total de pfoceso: 0.17 [segundos]
Capitulo ¡II 117
Capitulo III
_j
TA
BL
A 3
-5C
UA
DR
O G
EN
ER
AL
DE
LA
S P
RO
PIE
DA
DE
S D
E C
OD
IFIC
AC
IÓN
Y C
ON
PR
ES
IÓN
CO
N E
L C
ÓD
IGO
HU
FF
MA
N Y
EL C
ÓD
IGO
BN
O
AC
TS
IS
AN
EX
01
P
LAN
1
PLA
N2
P
LAN
3
PLA
N6
TE
LAC
AR
AC
TE
RÍS
TIC
AS
H
UFFM
AN
B
NO
H
UFFM
AN
B
NO
H
UFFM
AN
B
NO
H
UFFM
AN
B
NO
H
UFFM
AN
B
NO
H
UFFM
AN
B
NO
H
UFFM
AN
B
NO
1C
ON
RE
SP
EC
TO
A L
A F
UE
NT
E D
E IN
FO
RM
AC
IÓN
¿M
otaJ
deC
leí
dosí
mbo
los
q
Tam
año
orig
inal
[by
tes]
Tam
año
enca
beza
do
H(S
)H
(s)
nvxi
mo
Red
unda
ncia
fue
nte
R m
áxim
o
61.8
49 78
64.7
57 400
4,86
48
6,28
541,
4206
1,29
20C
ON
RE
SP
EC
TO
AL
CÓ
DIG
OT
amañ
o có
digo
Long
itud
med
ia [L
]
Ren
dim
ient
o
Red
unda
ncia
cód
igo
Tas
a co
mpr
esió
n ap
aren
i
Tas
a co
mpr
esió
n re
al
39.0
745,
05
0,96
0,04
63,8
2
60,9
6
61.a
49 7864
.757
400
4,86
48
6,28
541,
4206
1 .2
920
52.5
08
6,79
0,72
0,28
85,5
4
81,7
0
5.51
4 655.
711
335
3,57
066,
0224
2.45
161,
6866
3.20
34,
65
0,77
0,23
64,1
6
61,9
5
5.51
4 65
5.71
133
53,
5708
6,02
242,
4516
1,68
66
42
15
6,12
0,59
0,42
82,5
2
79,6
7
17.2
55 5017
.685 26
0
4,32
145,
6439
1,32
251,
3060
10.3
364,
79
0,90
0,10
61,4
159
,92
17.2
55 5017
.685 26
04,
3214
5.64
391
.322
51,
3060
13.9
616,
470.
67
0,33
82,4
2
80,4
1
69.6
58 5471
.960 28
0
4.43
765.
7549
1,31
731,
2969
42.1
13
4,82
0,92
0,08
60,6
9
58,9
1C
ÁLC
ULO
S C
ON
RE
SP
EC
TO
A L
A C
AN
TID
AD
DE
INF
OR
MA
CIÓ
N Q
UE
SU
MIN
ST
RA
LA
FU
EN
TE
(Lon
gAS
CH
-Lon
gM-x
JA-o
rR
edun
danc
iaF
uenl
ejH
(S)
21,4
325
22,6
016
21,4
325
22,6
016
CÁ
LCU
LOS
CO
N R
ES
PE
CT
O A
L C
ÓD
IGO
CLo
ngA
SC
It-LJ
Long
AS
CII
(Lon
gAS
CII-
Long
M-x
)Lon
Tas
aCom
pr.A
t=1a
m,c
ód/#
'D
ism
Req
Aim
acen
-CO
DtG
36,8
238
39,1
900
63,1
764
36,8
236
15,1
038
39,1
900
84,8
971
15,1
029
24,7
200
40,7
080
41,9
138
55,3
650
58,0
685
41,9
115
24,7
200
40,7
080
23,5
588
55,3
650
76,4
418
23.5
582
29,4
513
23,4
324
40.1
025
45,9
825
59,9
015
40,0
985
29,4
513
23,4
324
19,0
900
45,9
825
80,9
099
19,0
901
28,0
636
22,8
901
39.7
163
44,5
300
60,2
837
39,7
163
CÁ
LCU
LOS
CO
N R
ES
PE
CT
O A
L T
AM
AÑ
O O
RJG
INA
L E
N S
YT
ES
DE
LO
S A
RC
HIV
OS
FU
EN
TE
tam
arto
com
prim
ido
[rea
l]
Tas
aCom
pr.R
Mam
.rea
lA:
dism
inuc
ión
en r
eqA
lmac
f
39.4
7460
,957
1
39,0
429
52.9
08
81,7
024
16,2
976
3.53
861
,950
6
38,0
494
4.55
0
79,6
708
20,3
292
10.5
96
59,9
152
40,0
848
14.2
21
80,4
128
19,5
872
42.3
93
58,9
119
41,0
881
69.8
58 5471
.960 280
4,4
37
65,
7549
1,31
731,
2969
56.6
94
6,49
0,68
0,32
61,5
6
79,1
8
28,0
638
22,8
901
18,8
450
44,5
300
81,1
561
18,8
439
56.9
74
79,1
745
20,8
255
31.0
72 5132
.061 26
54.
5439
5,67
241,
1-28
61
,248
4
18.9
554
,88
0,93
0,07
61,8
6
59,9
5
29,0
950
19,8
963
38,9
988
43,2
013
61,0
035
38,9
965
19.2
20
59,9
482
40,0
518
31.0
72 5132
.061
265
4.54
395,
6724
1,12
861,
2484
25.6
25
6.60
0,69
0,31
83,3
2
80,7
5
29,0
950
19,8
963
17,5
313
43,2
013
82,4
697
17,5
303
25.8
90
80,7
523
19,2
477
20.5
95 5221
.283 27
04,
1938
5,70
041,
5066
1,35
92
12.0
21
4,67
0,90
0,10
59,6
8
57,7
5
28,7
450
26,4
297
41,6
350
47,5
775
58,3
685
41,6
315
12.2
91
57,7
503
42,2
497
20.5
95 5221
.283 27
04,1
938
5,70
041
.506
61,
3592
16.1
34
6,27
0,67
0,33
79,6
5
77,0
8
28,7
450
26,4
297
21,6
625
47,5
775
78,3
394
21,6
606
16.4
04
77,0
756
22,9
244
2.99
8 599.
015
305
3,40
185,
8626
2,48
061,
7293
1.62
54
,33
0,78
0,22
64,3
6
21.4
1
26,4
675
42,1
716
45,8
138
57,4
775
54,2
028
45,7
972
1.33
0
21,4
088
78,5
912
2.99
8 599.
015
305
3,40
185,
8826
2,48
081
,729
3
2.07
25,
53
0,62
0,3
879
,29
26,3
7
26,4
675
42,1
718
30,9
075
57,4
775
69,1
127
30,8
873
2.37
7
26,3
672
73,6
328
8T
AB
LA 3
-5C
UA
DR
O G
EN
ER
AL
DE
LA
S P
RO
PIE
DA
DE
S
DE
CO
DIF
ICA
CIÓ
N Y
C
ON
PR
ES
IÓN
CO
N E
L C
ÓD
IGO
HU
FF
MA
N Y
EL
CÓ
DIG
O
BN
O
TES
1II
-iUFFM
AN
B
NO
27.6
76 9328
.990 47
54,
5006
6,53
922,
0385
1,45
29
17.5
115,
030,
900,
10
67,5
262
,04
18,2
600
31,1
735
37,1
825
43,7
425
62,8
175
37,1
825
17.9
86
62,0
421
37,9
579
27.8
76 9328
.990 47
54,
5006
6,53
922,
0385
1,45
29
22.2
02
6,37
0.71
0,29
61,3
578
,22
18,2
600
31,1
735
20.3
575
43,7
425
79,6
456
20,3
544
22.6
77
78.2
235
21,7
765
TES
1II1
HU
FFM
AN
B
NO
39.9
04 9641
.459 50
04,
5290
6,61
472,
0857
1,46
05
26.1
765,
250,
660,
1466
,86
64,3
5
17,3
163
31,5
313
34,3
988
43,3
875
65,6
024
34,3
976
26.6
78
64,3
479
35,6
521
39.9
04 98
41.4
59
500
4,52
90
6,61
472,
0857
1,46
05
31.8
866,
39
OJ1
0,29
81,1
678
,12
17,3
163
31,5
313
20,0
938
43,3
875
79,9
068
20,0
932
32.3
86
78,1
157
21,8
843
TE
SIS
HU
FFM
AN
B
NO
29.0
90 90
30.2
28 460
4,49
656,
4919
1,99
541,
4438
18.2
63
5,02
0,90
0,10
64,3
6
61,9
4
18.8
513
30,7
368
37,2
213
43,7
938
62,7
810
37,2
19
18.7
23
61,9
393
38,0
607
29.0
90 9030
.228 46
04,
4965
6,49
191.
9954
1,44
38
23.1
55
6,37
0.71
0,29
1.18
78,1
2
18.8
513
30,7
368
20,4
050
43,7
938
79,5
978
20,4
022
23.6
15
76,1
229
21,8
771
TE
SíV
HU
FFM
AN
B
NO
46.9
66 115
48.6
78 585
4,43
036,
8455
2,41
52
1,54
51
31.6
11
5,38
0,62
0,18
68,5
5
66,1
4
14,4
313
35,2
816
32,6
950
44,6
213
67,3
061
32,6
939
32.1
96
66,1
408
33,6
592
46.9
66 115
48.6
78 585
4,43
036,
8455
2,41
521,
5451
37.5
91
6,40
0,69
0,31
81,2
878
,43
14,4
313
35,2
816
19,9
613
44,6
213
80,0
388
19,9
612
38.1
76
76,4
256
21,5
744
TE
SM
PH
UFFM
AN
B
NO
16.6
16 7717
.133 39
5
4,32
656,
2668
1.94
031,
4485
9.98
34
,81
0,90
0,10
62,4
5
60,5
7
21,6
650
30,9
616
39,9
313
45,9
166
60,0
734
39,9
266
10.3
78
60,5
732
39,4
268
16.6
18 77
17.1
33 395
4,32
656,
2668
1,94
031.
4485
13.2
496.
380,
680,
3282
,10
79,6
4
21,6
650
30,9
616
20,2
738
45,9
188
79,7
268
20,2
732
13.6
44
79,6
358
20,3
642
VIS
UA
LH
UF
FM
AN
B
NO
8.29
4 63
8.66
432
44,
6045
5,97
731,
3728
1,29
81
5.02
54,
85
0,95
0,05
64,5
0
61,7
5
25,2
638
22,9
669
39,4
175
42.4
438
60,5
660
39,4
14
5.34
9
61,7
382
38,2
618
8.29
4 63
8.66
4
324
4,60
455.
9773
1 .3
728
1,29
81
6.75
56,
520,
710,
2985
,36
61,7
2
25,2
838
22,9
669
18,5
588
42,4
438
81,4
444
18,5
556
7.07
9
81,7
059
18,2
941
VIT
EH
UFFM
AN
B
NO
2.90
2
44
3.01
223
04,
1242
5.45
941,
3353
1,32
36
1.62
9
4,4
90,
920,
0864
.06
61,7
2
31,7
575
24,4
587
43,8
838
48,4
475
56,1
337
43,8
663
1.85
961
,719
8
38,2
802
2.90
2 443.
012
230
4,12
425,
4594
1,33
531,
3238
2.23
9
6,17
0,67
0,33
85,0
8
81.9
7
31,7
575
24,4
587
22,8
500
48,4
475
77.1
537
22,8
463
2.46
9
81,9
721
18.0
279
PR
UE
BA
HU
FFM
AN
B
NO
15 13 15 753,
6402
3.70
040,
0602
1,01
65
73,
670,
990,
01
546,
6754
6,67
53,7
450
1,62
58
54,1
663
54,4
975
46,6
667
53,3
3333
3 8254
6,66
67(4
46,6
667)
15 13 15 753,6
402
3,70
040,
0602
1,01
65 12
6,07
0,60
0,40
580.
0058
0,00
53,7
450
1 ,6
258
24,1
663
54.4
975
60,0
000 20
87
580,
0000
(480
,000
0)
• cantidad de información máxima
« eficiencia del código utilizado
• redundancia con respecto a la fuente
• radio máximo de compresión de la fuente
• redundancia del código
• tasa de compresión aparente
• tasa de compresión real
Además de estos datos, se muestra una ventana de presentación durante los
proceso de compresión y descompresión; en la cual se indican los tiempos
de ejecución de cada uno de los procedimientos que involucran. (Ver figuras
3-23 y 3-24).
3.4. INTERPRETACIÓN DE LOS RESULTADOS.
Con los datos obtenidos en los archivos reportes, se elabora un Cuadro
General (tabla 3-5), en el cual se incluyen los valores del reporte y los
cálculos necesarios para analizar las propiedades de codificación y
compresión de los archivos de texto, basados en los resultados de los 15
archivos de prueba que se indicaron en la tabla 3-3.
3.4.1. TAMAÑO COMPRIMIDO, MAYOR QUE EL TAMAÑO ORIGINAL
La inclusión necesaria e indispensable de la cabecera, influye en el tamaño
del archivo comprimido, y en lugar de tener como resultado un archivo
comprimido más pequeño que el original, resurta un archivo mayor, para
cierto tamaño de archivos fuentes. (Ver tabla 3-5, en las columnas de:
tamaño comprimido real y tamaño original).
Capitulo III 120
CODIFICACIÓN HUFFMAN&KSÍ)Archivo: Actsis.txt
1Gar
12
0.05 0.1 0.15
PROBABILIDAD0.2 0.25
I (si) Huffman
Capítulo III 121
O000000
CODIFICACIÓN BNO&l(si)Archivo: Actsis.txt
0.050000 0.100000 0.150000 0.200000 0.250000
i (Si) BNO C/Ban.
Capitulo III 122
Esto sucede debido a que en la cabecera se tienen los siguientes tamaños
de bytes:
1. Para el tamaño y el modo se utilizan 5 bytes
2. Para cada carácter se utiliza 1 byte
3. Para la frecuencia de cada carácter se utiliza 4 bytes
En total se utilizan 5 bytes para guardar la información de cada símbolo
4-. Como se incluye un carácter cualquiera con frecuencia igual a cero para
indicar que es fin de línea, esto ocupa 5 byíes
5. Los puntos 1 y 4- son fijos siempre en cualquier archivo y en cualquier
modo de compresión, por lo tanto existen fijos 10 bytes.
6. SÍ se parte de un archivo de 100 bytes de tamaño, en el cual existen 10
símbolos, con ocurrencia equiprobable; la lista de ocurrencia es de
10x5=50 bytes
7. Sumando los valores del punto 5 y 6, para la cabecera se tiene 60 bytes
8. A esto hay que añadir los bytes utilizados para el código comprimido,
supongamos que resulta una longitud promedio de 3 bits-símbolo como
mínimo, entonces da un total de (3/8)x100=37.5 bytes, aproximando a su
inmediato superior, se tiene un tamaño del código comprimido de 4-0
bytes.
9. Sumado los valores 7 y 8 el archivo comprimido tiene un tamaño de 100
bytes
De acuerdo a éste análisis el archivo fuente es igual al archivo real, tomando
en cuenta condiciones promedio; en casos reales resurta mayor el archivo
comprimido, cuando el tamaño del archivo fuente es menor que 100 bytes.
Capitulo ill 123
Por consiguiente para que el archivo comprimido resulte menor que el original
es necesario que su tamaño sea mayor que 100 bytes, debido a que el
tamaño de la cabecera para estos casos resulta significativamente más
grande que e! código comprimido.
Por lo tanto el tamaño de la cabecera no debe ser comparable con el tamaño
del código comprimido, para lograr una verdadera compresión del archivo;
3.4.2 NÚMERO TOTAL DE CARACTERES LEÍDOS, MENOR QUE EL
TAMAÑO EN BYTES DEL ARCHIVO FUENTE
En el reporte del proceso de compresión (ver tabla 3-5), se observa
claramente que el número de caracteres leídos es menor o igual que el
número de bytes del archivo fuente; esto sucede especialmente cuando los
archivos fueron convertidos a texto, utilizando versiones del DOS superiores a
5.0.
Aquellos archivos originados en un editor de texto, no presentan diferencia
alguna entre el número total de caracteres leídos con el número de bytes del
archivo original.
Este comportamiento se presenta solamente en los archivos tipo texto
originados con versiones de! DOS superiores a 5.0; estos sistemas
operativos introducen un conjunto de bits dinámico al final del archivo con el
fin de poder corregir posibles errores de transmisión o en el uso de los
archivos.
Gráficamente se tiene:
Capítulo III 124
FIGURA 3-25
CONFIGURACIÓN DE ARCHIVOS TEXTO
•tamaño en bytes del archivo texto
de car aderesconfigLraaónde< fin cte archivo
IFF-2S5«cll
Cuando se pretende leer esa zona, el DOS manda en representación de ese
conjunto, el carácter FF del ASCII, igual al 255.
El tamaño de esa zona es en bits, y su tamaño está en función del número y
tipo de caracteres propiamente de información tipo texto, de tal manera que:
[bits]
FeOf : fin de texto
Nc : número y tipo de caracteres
y, para determinar el tamaño del archivo en bytes, es truncada la zona de
Feof, en la división del número de bits para ocho. (1 byte = 8 bits).
Capitulo III 125
5-O ai "O
z o Ü
4-
CE O u_ Q Z D
3- 2-
üUK
A3-
26a
Hut
tman
&A
rchi
vo:
Pru
eba
(tota
l)
1 ~ 0.06
0.
07
0.08
0.09
0.
1 0.
11P
RO
BA
BIL
IDA
D0.
12
0.13
0.
14
I (S
i)•»—
H
uffm
an
"O ET o"
z o o cr O u_ Z Q Z
FIG
UR
A 3
-27a
Huf
fman
Arc
hivo
: T
ela
(tota
l)
0.05
0.1
0.15
0.
2P
RO
BA
BIL
IDA
D
,-JL,
0.25
0.3
ro
•*—
Huf
fman
9Z L ///
UNID.INFORMACIÓN [bits]
o ro O
IC
SD13
O
OÓCn
~ODOOCD> P
E -*•ioo
pOí
pco
3]O
O
g'rbCD
Z5
gf zftó"
5?°
O t e oJD i —
i
z o o ce O u_ z Q Z D
12-
10-
Q_ 6- 4- 2- 0-
FIG
UR
A 3
-27c
O
1
Arc
hivo
: T
ela
(sup
erio
r)
0.00
05
0.00
1 0.
0015
0.
002
0.00
25
0.00
3 0.
0035
PR
OB
AB
ILID
AD
ro
(s¡)
Huf
fman
O a X) ^c C O"
z O Ü ce O ü_ Z)
FIG
UR
A 3
-28a
Arc
hivo
: Vis
ual
(tota
l)
0.00
0000
0.
0500
000.
1000
00
0.15
0000
PR
OB
AB
ILID
AD
0.20
0000
0.
2500
00
OJ o
unI (
si)
///
IE
£>D
O
oooo
póOíoooo
or^ °O oCD O
CD
— PO *-»> en
oooo
poooo
o
CnOOOO
UNID.INFORMACIÓN [bits}
ro -P* o> CD
O >p PO< oo
(D
o
S1 •
FIG
UR
A 3
-28C
H
14-
.-*-. (O O O CC O ü_ z Q Z D
12-
10- 8- 6-
4+W \
— 4
-»—
f T
Arc
hivo
: Vis
ual
(sup
erio
r
- 4—
f--
4- 0.00
0 0.
001
0.00
2 0.
003
0.00
4 0.
005
0.00
6 0.
007
0.00
8 0.
009
PR
OB
AB
ILID
AD
M
Huf
fman
s?10
-
<0 z o ü ce o u_ Q z D
Q_ 6- 4- 2
FIG
UR
A 3
-29
aB
NO
&A
rchi
vo:
Pru
eba
(tota
l)
CH
,
0.06
0.
070.
08
0.09
0.
10
0.11
PR
OB
AB
ILID
AD
0.12
0.
13
0.14
03
m
! ff
í\
I (S
I)D
Mí
ioN
U*-
C/B
an.
C
• —5-
_Q O Ü a: O LJL
.Z Q Z D
FIG
UR
A 3
-30aB
NO
&l(s¡
)A
rchi
vo:
Tel
a (to
tal)
0.00
0000
0.
0500
00
0.10
0000
0.
1500
00
0.20
0000
0.
2500
00
0.30
0000
PR
OB
AB
ILID
AD
M
1 ff
\\
l(si)
D M
r\U
vi'
/*% / n
^
u/o
an
.
"§=
£f
'J5 z o o ce O ü_ Q Z D
FIG
UR
A 3
-30b
BN
O&
l(sí)
Arc
hiv
o:
Te
la (
infe
rior)
10.00
0
8.00
0-
6.00
0-
4.00
0--
2.00
0-
0.00
0 0.00
00.
050
0.10
0 0.
150
0.20
0P
RO
BA
BIL
IDA
D0.
250
0.30
0
O)
Oí
n
1 fr
i\
1 (S
I)D
Mi
kbN
U'-i-'
^ /D
í-LI-1.
A
u/tí
an.
B
Z O O ce O u_ Q Z D
14-
12-
10- 8- 6- 4- 2
0.00
0000
Arc
hivo
: T
ela
(sup
erio
r)
M¿-
--xT
x
0.00
0500
0.
0010
00
0.00
1500
PR
OB
AB
ILID
AD
0.0
02000
0.0
02500
BN
OC
/Ban
.
5(O z O o ce O z Q Z Z)
FIG
UR
A 3
-31
a-
Arc
hivo
: Vis
ual
(tota
l)
0.00
0000
0.
0500
00
0.10
0000
0.
1500
00P
RO
BA
BIL
IDA
D0.
2000
00
0.25
0000
co
BN
OC
/Ban
.
o o> X)
z o o en O LJL
Z D Z D
10 4-
FIG
UR
A 3
-31
bB
Nü
&l
Arc
hivo
: V
isua
l (in
ferio
r)
0-0.
0000
00
0.05
0000
0.
1000
00
0.15
0000
PR
OB
AB
ILID
AD
0.20
0000
0.
2500
00
co
• i f
f ;\
KSI)
D M
Í^bN
UH
' O
/D
rM
^k
-K u/b
an.
O 03 "O
o o
F R
R
A 'V
slr
i I v
Jl \J
i\r
\ \j
I \
sA
rchi
vo:
Vis
ual
(sup
erio
r)14
-
12-
10 8-ce o u_ 2 Q
6- 4-
\>.
X
TX
.
0. 0
000
0. 0
01 0
0.
002
0
0. 0
030
0. 0
040
0.00
05
0.00
15
0.00
25
0.00
35
0.00
45P
RO
BA
BIL
IDA
D
O)
(£>
. /
.V
•-
l(s
i)D
MO
bN
UV
^/Q
j-ir
-i
A
u/b
an.
s(O z o o ce O LJL Z Q Z D
CO
DIF
ICA
CIÓ
N H
UF
hA
rchi
vo:
Tes
mp.
txt
o.oo
o o.
oso
0.10
00.
150
0.20
0P
RO
BA
BIL
IDA
D0.
250
0.30
0 0.
350
-*- I
(si)
1 H
uttm
an
8 •o ir
en O u_ Z Q Z
CO
DIF
ICA
CIÓ
N B
NO
&K
si)
Arc
hivo
: T
esm
p.tx
t16
r—1
W
H A
±±
14
Z O Ü
o o.oo
o0.
050
0.10
0 0.
150
0.20
0P
RO
BA
BIL
IDA
D0.
250
0.30
0 0.
350
n
i /^;
\ I(
SI) i
D
t- \
1
bN
U
Ar^
/D
^u/
Dan
.
TABLA 3-10
CUADRO GENERAL SOBRE ELTAMAÑO DE LOS ARCHIVOS.CPR
NOMBRE
PRUEBAVITEANEX01VISUALTELATESMPPLAN1PLAN6TESIIITESISPLAN3TESIII1TESIVACTSISPLAN2
TAMAÑO.TXT
153.0125.7118.6649.015
17.13317.68521.28328.99030.22832.06141.45948.67864.75771.960
TASA COMPRENSIÓNHuffman
546,66761,72061,95161,73821,40960,57359,91557,75062,04261,93959,94364,34866,14160,95758,912
BNO
580,00081,97279,67181,70626,36779,63680,41377,07678,22478,12380,75278,11678,42681,70279,175
TAMANIO.CPRMuí/man
821.8593.5385.3491.930
10.37810.59612.29117.98618.72319.22026.67832.19639.47442.393
BNO
872.4694.5507.0792.377
13.64414.22116.40422.67723.61525.88032.38638.17652.90856.974
Capitulo U! 142
TABLA 3-11
CUADRO GENERAL DE LA DISMINUCIÓNEN LOS REQUERIMIENTOS DE MEMORIA
NOMBRE
PRUEBAVITEANEX01VISUALTELATESMPPLAN1PLAN6TESillTESÍSPLANSTESIII1TESIVACTSISPLAN2
TAMAÑO.TXT
153.0125.7118.6649.015
17.13317.68521.28328.99030.22832.06141.45948.67864.75771.960
DramiReqMemoriaHuffman
(446,667)38,28038,04938,26278,59139,42740,08542,25037,95838,06140,05235,65233,85939,04341,088
BNO
(480,000)18,02820,32918,29473,63320,36419,58722,92421,77621,87719,24821,88421,57418,29820,825
Cantidad ReducciónHuffman
-671153217333157085675570898992
11004115051284114781164822528329567
BNO
-72543
1161158566383489346448796313661361719073
105021184914986
Capitulo llf 143
Razón por la cual, el número de caracteres leídos es diferente al número de
bytes el tamaño del archivo fuente.
3.4.3. GRÁFICOS DE LA CODIFICACIÓN HUFFMAN Y BNO, EN
RELACIÓN AL VALOR TEÓRICO l(»|)
Se representa gráficamente la codificación obtenida con ios códigos Huffman
y BNO, en función de las probabilidades de ocurrencia, de tres archivos
representativos (ver figuras 3-26 hasta 3-31 respectivamente); estas curvas
son comparadas con la curva de unidades de información l(s¡), que puede
suministrar cada símbolo fuente en función de las probabilidades de
ocurrencia. Es decir se compara los bits teóricos frente a los bits codificados,
en función de la probabilidad de ocurrencia.
Para visualizar mejor las características que presentan, se ha dividido los
gráficos totales, en dos partes: superior e inferior; se los identifica con los
literales a), b), y c) respectivamente. A continuación se explica et significado
de estos gráficos:
Con codificación Huffmají
Analizando brevemente ios gráficos de los diferentes archivos de prueba
(figura 3-26 hasta 3-28), puede observarse que las unidades de información
teórico, es menor que las unidades de información resultantes de la
codificación Huffman, para probabilidades considerablemente mayores.
A partir de ciertos valores de p¡, la curva de codificación Huffman fluctúa en
los valores de !(s¡); tendiendo progresivamente a ser menor, mientras se
aproxima a valores de p¡ relativamente menores. Llega un "punto en el cual
Capitulo líl 144
la curva Huffman se aleja paulatinamente de la curva de l(s¡), cuando los
valores de la probabilidad son considerablemente mucho menores; en estos
casos el comportamiento es asintótico por debajo de la curva de l(s¡).
Con codificación BNO
Esta codificación presenta un comportamiento suigéneris; La curva
estrictamente de codificación BNO está por debajo de la curva teórica de
l(s¡), (figura 3-29 hasta 3-31).
La codificación BNO, empieza muy cerca de los valores teóricos para valores
considerablemente mayores de probabilidad, y paulatinamente se va
alejando de i(s¡) hasta que para valores significativamente menores de p¡ el
comportamiento es asintótico por debajo de la curva de l(s¡).
Sin embargo, por la inclusión de bits de bandera la longitud de cada una de
las palabras código se comporta inversamente a cuando se dispone
solamente la de codificación BNO, especialmente para valores grandes de p¡;
las unidades de información resultan mucho más grandes que las unidades
de información teóricas, y a partir de cierto valor de probabilidad fluctúa al
rededor del valor teórico, hasta decrecer, alejándose de la curva teórica y
proseguir con un comportamiento asintótico por debajo de l(s¡).
3.4.4. CANTIDAD DE INFORMACIÓN CON RESPECTO A LA FUENTE
ASCII
Comparando los valores de la cantidad de información suministrada por el
número de símbolos que hace uso un determinado archivo texto [H(S)J, con
Capítulo ¡II 145
los valores de la cantidad de información máxima que pueden generar ios
símbolos [H(S)rrtáX]J (tabla 3-5); se observa que ningún archivo fuente genera
la máxima cantidad de información, a lo mucho se acera a tal valor, como
sucede para el archivo PRUEBA.
3.4.5. LONGITUD MEDIA DEL CÓDIGO, MAYOR QUE LA LONGITUD
MÍNIMA
Comparado los valores de la longitud promedio de las palabras código [L], y
la longitud mínima posible que debe alcanzarse cuando el rendimiento del
código es igual a uno [H(S)=L], (tabla 3-5); se observa que ningún valor de la
longitud promedio se iguala al valor mínimo, Solamente para el archivo
PRUEBA llega a aproximarse muy cercanamente.
3.4.6. VALORES DE COMPRESIÓN CON RESPECTO A LA
CODIFICACIÓN
De acuerdo a los valores obtenidos para los diferentes archivo de prueba,
(tabla 3-5); puede notarse claramente que, por lo explicado en los puntos 1 y
2, no debe tomarse en cuenta el tamaño de la cabecera ni el tamaño original
del archivo fuente, para analizar la bondad de la codificación con respecto a
la compresión alcanzada; solamente se considerará el tamaño del código
comprimido y e! número total de caracteres leídos.
De los 15 archivos que se escogieron para las pruebas del programa; se
empieza el análisis con aquellos que tienen la mejor tasa de compresión
(mientras menor sea el porcentaje, es mejor la tasa de compresión); o en su
defecto puede recurrirse a los valores de !a disminución de Jos requerimientos
Capítulo Hl 146
1 ~~ -b ""
PR
UE
BA
V
ITE
A
NE
XO
1
CO
N R
ES
PE
CTO
A L
A F
UE
NTE
DE
INFO
RM
AC
IÓN
Ü to
tal d
e C
leíd
o 15
2.
902
5.51
4s¡
rnt>
olas
q
13
44
65
Tam
a'o
orig
inal
[byt
es]
15
3.01
2 5.
71 1
Tam
a'o
enca
beza
do
75
230
335
H(S
) 3,
6402
4,
1242
3,
5708
H(s
)nK
dmo
3,70
04
5,45
94
6,02
24R
edun
danc
ia fu
ente
0,
0602
1,
3353
2,
4516
R m
-xJr
no
1,01
65
1,32
38
1,68
66C
ON
RE
SP
EC
TO A
L C
ÓD
IGO
Tam
a'o
códi
go
7 1.
629
3.20
3
Long
itud
med
ia [
L]
3.66
7 4,
489
4,64
7R
endi
mie
nto
0.99
3 0,
919
0,76
8R
edun
danc
ia c
ódig
o 0,
007
0.08
1 0,
232
Tasa
com
pres
ión
apar
54
6,67
0 64
,059
84
,164
Tasa
com
pres
íjín
real
54
6,67
0 61
,720
61
,951
CU
AD
RO
VIS
UA
L TE
LA
8.29
4 2.
998
63
598.
664
9.01
5
324
305
4,60
45
3,40
18
5,97
73
5.88
261,
3728
2,
4808
1,29
81
1,72
93
5.02
5 1.
625
4.84
7 4,
335
0.95
0 0,
785
0,05
0 0,
215
64,5
04
64,3
76
61,7
50
21,4
09
TA
BLA
3-6
GE
NE
RA
L D
E L
AS
PR
OP
IED
AD
ES
DE
CO
DIF
ICA
CIÓ
NY
DE
CO
DIF
ICA
CIO
N
DE
L C
ÓD
IGO
H
UF
FM
AN
TE
SM
P
PLA
N1
PLA
N6
16.6
18
17.2
5577
50
17.1
33
17.6
3539
5 26
0
4,32
65
4,32
14
6.26
68
5.64
391,
9403
1,
3225
1,44
85
1,30
60
9.98
3 10
.336
4,80
6 4,
792
0,90
0 0.
902
0,10
0 0,
098
62
45
0
61,4
08
60,5
73
59.9
15
20
59
5 5221
.283 27
04,
1938
5,70
041
,506
6
1.35
92
12.0
214,
669
0,89
80,
102
59,6
80
57,7
50
TESH
I T
ES
IS
27.8
76 9328
.990
47
54,
5006
6,53
92
2,03
85
1 ,4
529
17.5
115,
025
0,89
60,
104
67,5
2162
,042
29.0
90 9030
.228 46
0
4.49
65
6,49
191,
9954
1,44
38
18.2
635,
022
0,89
5
0,10
564
.362
61,9
39
PLA
N3
31.0
72 5132
.061 265
4,54
395,
6724
1,12
86
1,24
34
18.9
55
4,88
00,
931
0,06
961
,556
59,9
48
TES
II11
39.9
04 93
41
45
950
04,
5290
6,61
472,
0857
1 ,46
05
26.1
78
5.24
30,
863
0.13
766
.855
64,3
48
TES1
V
46.9
66 115
43.6
78 585
4,43
03
6,84
552
41
52
1,54
51
31.6
115,
384
0,82
3
0,17
768
,552
66,1
41
AC
TS1S
61.8
49 78
64.7
57 400
4,86
48
6,23
54
1,42
06
1,29
20
39.0
745,
054
0,96
3
0,03
763
,823
60,9
64
PLA
N2
69.8
58 5471
.960 28
04
43
76
5,75
49
1,31
73
1,29
69
42.1
134,
823
0.92
0
0.08
060
,685
58,9
12C
ÁLC
ULO
S C
ON
RE
SP
EC
TO A
LA
CA
NTI
DA
D D
E IN
FOR
MA
CIÓ
N Q
UE
SU
MIN
STR
A L
A F
UE
NTE
(Lco
gAS
CU
-Lon
gM-x
yi
53,7
45
31,7
58
24.7
20R
edun
danc
laFu
ente
A-ii
1,
626
24,4
59
40,7
08C
ÁLC
ULO
S C
ON
RE
SP
EC
TO A
L C
ÓD
IGO
(Lcn
gAS
CK
-L)L
ongA
S'
54,1
66
43,8
84
41,9
14
(Lon
aAS
CR
ongM
-XJL
54
,498
48
,448
55
,365
TaB
aCor
npr-
A=t
am.c
fl(
46,6
67
56,1
34
53,0
39D
Isrn
Req
Alm
aeen
-CO
53
.333
43
,866
41
,91
1
25.2
84
26,4
6822
,967
42
,172
39.4
18
45,8
1442
,444
57
.478
60,5
86
54,2
03
39,4
14
45,7
97
21,6
65
29,4
5130
,962
23
.432
39,9
31
40,1
03
45,9
19
45,9
8360
,073
59
,901
39,9
27
40,0
99
28.7
4526
.430
41,6
3547
,578
58,3
6941
,631
18,2
60
31,1
74
37,1
83
43,7
4362
.817
37,1
83
18,8
5130
.737
37,2
21
43,7
9462
,781
37,2
19
29,0
9519
,896
38.9
99
43,2
0161
,003
33,9
97
17,3
18
31,5
31
34,3
9943
,383
65,6
0234
,393
14.4
3135
.282
32,6
95
44,6
2167
,306
32,6
94
21,1
3322
,602
36,8
24
39,1
9063
,176
36,8
24
28,0
6422
.890
39,7
1644
.530
60.2
8439
.716
CÁ
LCU
LOS
CO
N R
ES
PE
CTO
AL
TA
MA
¥0 O
RIG
INA
L E
N B
YTE
S D
E L
OS
AR
CH
VO
S F
UE
NTE
tarn
a'o
com
prim
ido
[re
82
1.85
9 3.
538
Taüa
Com
pr.R
=tam
.re£
546.
667
61,7
20
61,9
51di
smin
ució
n en
reqA
im
(446
,667
1 38
,280
38
,049
TIE
MP
OS
DE
EJE
CU
CIÓ
NE
n la
com
pres
ión
0.27
0 3,
570
6,92
0
En
la d
esco
mpr
esió
n 0,
170
1210
2,
410
5.34
9 1.
930
61,7
38
21,4
09
38,2
62
73,5
91
10,6
50
3,84
0
3,68
0 1,
260
10.3
78
10.5
96
60,5
73
59.9
15
39,4
27
40,0
85
20,2
70
20,2
207,
090
7,19
0
12.2
91
57.7
50
42.2
50
23,7
20
8,40
0
17.9
86
62,0
42
37,9
58
34,9
3012
,200
18.7
2361
.939
38,0
61
36.3
60
13,0
70
19.2
2059
,948
40,0
52
36,8
00
13.4
60
26.6
78
64,3
48
35,6
52
51.5
70
16,2
40
32.1
96
66,1
41
33,8
59
61,9
10
22,4
70
39.4
74
60,9
57
39,0
43
75,5
80
26,6
80
42.3
93
58,9
12
41,0
88
81.2
3029
,490
CO
TA
BLA
3-7
CU
AD
RO
GE
NE
RA
L D
E L
AS
PR
OP
IED
AD
ES
DE
CO
DIF
ICA
CIÓ
N Y
CO
MP
RE
SIÓ
N D
EL
CÓ
DIG
O B
NO
PR
UE
BA
V
ITE
A
NE
XÓ
1
VIS
UA
L TE
LA
TE
SM
P
PLA
N1
P
LAN
6 TE
SIII
TE
SIS
P
LAN
3 TH
SHI1
T
ES
IVA
CT
SIS
P
LAN
2
CO
N R
ES
PE
CT
O A
LA
FU
EN
TE D
E IN
FO
RM
AC
IÓN
# to
tal b
e C
leíd
o 15
2.
902
Sím
bolo
s q
13
44
Tam
año
orig
inal
[b><
15
3.
012
Tam
año
enca
beza
d
75
230
H(S
) 3,
6402
4,
1242
H(s
)m-x
Jmo
3,70
04
5,45
94
Red
unda
ncia
fuen
te
0,06
02
1 ,3
353
Rm
-Xim
o 1.
0165
1,
3238
CO
N R
ES
PE
CTO
AL
CO
DK
30T
amañ
o có
digo
12
2.
239
Long
itud
mec
ía [L
] 6,
0667
0 6,
172
Ren
dim
ient
o
0.60
004
0.66
8R
edun
danc
ia c
órfig
c 0,
3999
6 0,
332
Tas
a co
mpr
esió
n ap
58
0,00
0 85
,079
Taea
com
pres
ión
re¡
580,
000
81 ,9
72
5.51
4 65
5.71
133
5
3,57
08
6,02
24
2,45
161.
6866
4215
6,11
50.
589
0.41
6
82.5
1779
,671
8.29
4 63
8.66
4
324
4,60
455,
9773
1,37
281,
2981
6.75
5
6,51
50,
707
0,29
3
85,3
63
81,7
17
2.99
8 59
9.01
5
305
3,40
185,
8826
2,48
08
1,72
93
2.07
25,
527
0.615
0,38
579
,286
26,3
67
16.6
18 7717
.133 39
5
4,32
65
6,26
68
1,94
031,
4485
13.2
496.
378
0.67
8
0,32
2
82.1
0479
,636
17.2
55
20.5
9550
52
17.6
85
21.2
83
260
270
4,32
14
4,19
385,
6439
5,
7004
1,32
25
1,50
66
1.30
60
1,35
92
13.9
61
16.1
346,
473
6,26
70.
668
0,
669
0,33
2 0,
331
82,4
17
79,6
5080
,413
77
,076
27.8
76 93
28.9
90 475
4,50
06
6,53
92
2,03
85
1.45
29
22
20
26,
371
0,70
6
0.29
491
,350
78,2
24
29.0
90 9030
.228
460
4,49
65
6,49
19
1,99
541,
4438
23.1
556,
368
0,7
06
0,29
4
1.17
978
,123
31.0
72 51
32.0
61
265
4,54
39
5,67
24
1,12
861,
2484
25.6
256.
598
0,68
9
0,31
183
,323
80,7
52
39.9
04 98
41.4
59 500
4,52
90
6,61
47
2,08
571.
4605
31.8
866.
393
0,70
8
0,29
281
,160
73,1
16
46.9
66 115
48.6
78 585
4,43
036.
8455
2,41
521,
5451
37.5
916.
403
0,69
20,
308
81,2
8478
,426
61.8
49
69.8
5878
54
64.7
57
71.9
60^4
00
280
4,86
48
4.43
76
62854
5,76
43
1,42
06
1,31
731.
2920
1,
2969
52.5
08
56.6
946.
792
6,49
2
0,71
6
0.68
40,
284
0,31
7
85.5
44
81.5
5781
,702
79
,175
CÁ
LCU
LOS
CO
N R
ES
PE
CTO
A L
A C
AN
TID
AD
DE
MF
OR
MA
CIO
N Q
UE
SU
MIN
STR
A
LA F
UE
NTE
(Lon
gAS
CR
cogM
-J
53,7
450
31.7
58R
edun
Fue
nte/
KS
Jrr
1 ,6
259
24.4
59C
ÁLC
ULO
S C
ON
RE
SP
EC
TO
AL
CÓ
DIG
O(L
ongA
SC
KJL
ong;
24,1
663
22,8
50
(Lon
gAS
CH
-Lon
gM-)
54
,497
5 48
,448
Tasa
Com
pr.A
=tam
.<
60,0
000
77,1
54
DIs
rnR
eqA
lmac
erv-
C
20
22,8
46
24,7
2040
.708
23,5
59
55,3
6576
,442
23.5
58
25,2
84
22,9
67
18.5
59
42,4
4481
,444
18,5
56
26,4
6842
,172
30,9
0857
,478
69,1
13
30,8
87
21,6
65
30,9
62
20,2
7445
.919
79,7
27
20.2
73
29,4
51
28,7
4523
.432
26
,430
19,0
90
21,6
63
45,9
83
47,5
78
80,9
10
78,3
39
19,0
90
21.6
61
18,2
60
31,1
74
20,3
58
43,7
4379
,646
20,3
54
18,8
5130
,737
20,4
05
43,7
9479
,598
20,4
02
29,0
95
19.8
96
17.5
3143
.201
82,4
70
17,5
30
17.3
16
31.5
31
20,0
94
43,3
88
79,9
07
20,0
93
14,4
31
35,2
82
19,9
61
44,6
2180
,039
19,9
61
21,4
33
28,0
64
22,6
02
22,8
90
15,1
04
18,8
45
39,1
90
44,5
30
84,8
97
81,1
56
15,1
03
18,8
44C
ÁLC
ULO
S C
ON
RE
SP
EC
TO
AL
TA
MA
VO
OR
IGIN
AL
EN
BY
TE
S D
E L
OS
AR
CH
VO
S F
UEN
TE
tam
año
com
prim
ido
87
2.46
9
Tas
aCom
pr-R
=tam
.l 58
0,00
0 81
,972
dism
inuc
ión
en re
qA
(480
,000
) 18
,028
TIE
MP
OS
DE
EJE
CU
CIÓ
N
En la
com
pres
ión
0,27
0 5,
160
Enla
desc
ornp
resi
ói
0,17
0 4,
280
4.55
0
79.6
71
20,3
29
9,83
0
8,07
0
7.07
9
81,7
06
18,2
94
15,3
8013
,180
2.37
7
26.3
6773
.633
5,60
03,
900
13.6
44
79,6
36
20,3
64
29,9
30
25,6
00
14.2
21
16.4
0480
.413
77
,076
19.5
87
22,9
24
30,3
10
35.5
40
27,0
80
30,9
30
22.6
7778
,224
21,7
76
50,6
4043
,230
23.6
15
78,1
23
21,8
77
52,4
6045
,760
25.8
90
80,7
52
19,2
48
55,4
80
49,6
50
32.3
8678
,116
21.8
84
73,0
50
62,2
30
38.1
76
78,4
26
21,5
74
86.4
50
74,0
90
52.9
08
56.9
74
81,7
02
79,1
7518
,298
20
,825
113.
090
12
2,93
010
2,49
0 10
9,41
0
de almacenamiento ( mientras mayor sea el porcentaje, es mejor la
compresión alcanzada). Estos dos valores son complementarios, si el uno
baja et otro necesariamente sube y viceversa.
3.4.7 LA EFICIENCIA DEL CÓDIGO
Se comienza analizando el comportamiento de ía eficiencia del código,
debido a que este parámetro teóricamente proporciona la medida de la
compresión, e indica que tan poderoso y apto es el código para realizar la
compresión.
Se observa de acuerdo a ia tabla 3-5, que el archivo TELA es el que mejor
se logra comprimir, tanto con el código Huffman como con el código BNO;
examinemos cual es la razón. Se ha producido dos tablas a partir de tos
datos de la tabla 3-5, del código Huffman y BNO, con la finalidad de prestar
mejor visibilidad para el análisis de las carcterísíicas de cada una de éstas
codificaciones y son ia tabla 3-6 y 3-7 respectivamente.
Para el archivo TELA:
De un tamaño de 2998 bytes leídos, se tiene después de la codificación 1625
bytes (sin incluir la cabecera de archivo). La tasa de compresión con respecto
al código es del 54.20%; implica que la disminución de los requerimientos
para el almacenamiento del código comprimido es del 45.79%.
El valor del rendimiento del código Huffman es igual a 0.78476 y del código
BNO es de 0.61545; por sí solos estos valores no indican que se pueda
comprimir tanto, todo lo contrario, se puede pensar que un rendimiento
Capitulóla 149
relativamente bajo, no ofrece una buena compresión; sin embargo, esto no
se cumple. Se analiza ciertos archivos que ayudarán a aclarar estas
aseveraciones:
Para el archivo ACTSfS:
Este archivo con un rendimiento del código Huffman igual a 0.962, logra una
tasa de compresión del 63.17%, y la disminución en los requerimientos de
almacenamiento es del 36.82%; no se consigue una gran compresión
correspondiente a la gran eficiencia de código que presenta.
Para el archivo PLAN3:
Observando el rendimiento del código Huffman que es det 0.9311, sucede
algo parecido, se logra una tasa de compresión de 61.0035%, y la
disminución en los requerimientos de almacenamiento es del 38.999%.
Para el archivo TES/V:
El rendimiento del código Huffman es del 0.8228, se logra una tasa de
compresión es de! 67.306%, y la disminución en los requerimientos de
almacenamiento es del 32.693%.
Para el archivo VISUAL Y VITE:
Con rendimientos del 0.95004- y 0.91866 , se da una tasa de compresión del
60.586 % y 56.133% respectivamente.
Capitulóla 150
Todos estos valores de compresión no son óptimos comparados con los del
archivo TELA.
3.4.8. El MÁXIMO RADIO DE COMPRESIÓN
Se examina el comportamiento del máximo radio de compresión con
respecto a la fuente ASCII (tabla 3-5), puesto que se va a demostrar que el
código Huffman al proveer del máximo radio de compresión, se obtiene una
muy buena compresión de los archivos de texto.
Al analizar más detenidamente el porqué de los resultados enunciados
anteriormente, se observa que e! máximo radio de compresión del archivo
TELA igual a 1.7293, es el valor más arto sobre todos ios demás archivos; en
especial sobrepasa a los valores de! máximo radio de compresión de
archivos con rendimientos en ei orden de 0.9
En especial, para los archivos antes mencionados, se construye la siguiente
tabla comparativa, tabla 3-8:
TABLA 3-8
Valores del máximo radio de compresión, de la eficiencia del códigoHuffman
y de la disminución en los requerimientos de memoria
DisminuciónARCHIVOS R^y EFICIENClAHuffman memoria %
ACTSISPLAN3TESIVVISUALVITE
1.2931.24841.54511.29811.3238
0.962540.93110.822810.950040.91866
36.823638.996532.693939.926643.8663
Capftulolll 151
De este cuadro se observa que el archivo VITE es el que mejor se comprime,
y no e! archivo TESIV que posee el valor más grande del máximo radio de
compresión, igual a 1.5451. Lo que demuestra que no necesariamente los
archivos que dispongan un alto valor de Rmáx serán los que más se
compriman.
De éste análisis, se puede pensar que existe otro parámetro determinístico (a
más dei Rmáx Y ^e 'a eficiencia del código) para obtener resultados óptimos
en la compresión de archivos de texto codificando el alfabeto fuente.
3.4.9 LOS VALORES DE LA LONGITUD MEDIA.
Al examinar, porqué se consigue la mejor compresión de! archivo VITE , se
observa que posee el menor valor de la longitud media, igual a 4.4-893; en
tanto que el archivo TESIV posee el más aito valor de este grupo de
muestras, igual a 5.3844. La tabla 3-9 que se muestra a continuación ayuda a
visualizar los resultados a los que se hace referencia.
TABLA 3-9
Valores del máximo radio de compresión, de la eficiencia del código
Huffman, de la disminución en ios requerimientos de memoria y de la longitud
media.
Disminución LongitudARCHIVOS Rfráx EFICIENCIAHufíman memoria % Media
ACTStSPLANSTESIVVISUALVITE
1.2931.24841.54511.29811.3238
0.962540.93110.822810.950040.91866
36.823638.996532.693939.926643.8663
5.05414.88015.38444.84664.4893
Capitulóla 152
Esto demuestra que el otro parámetro que influye en una óptima compresión
a! codificar el alfabeto fuente, es el valor de la longitud media; a menor
longitud media mejor compresión.
3,4.10. Cantidad de reducción en los requerimientos de memoria
El tamaño del archivo comprimido real, se obtiene multiplicando el tamaño
original en bytes por el porcentaje de la tasa de compresión, esto se indica en
la tabla 3-10; la cantidad en que disminuye los requerimíentoss de memoria,
se obtiene multiplicando el porcentaje de la disminución de los requerimientos
de memoria por el tamaño en bytes dei archivo original, esto se indica en la
tabla 3-11.
Por ejemplo, para el archivo TELA que tiene un tamaño original de 9.015
bytes, a! comprimirlo, obtiene un tamaño de 1.930 bytes, produciéndose
7.085 bytes de reducción en los requerimientos de memoria.
3.4.1. Tiempos de ejecución
Para cada uno de los procesos de compresión y descompresión se presenta
en la tabla 3-12 los tiempos de ejecución en segundos.
De estos valores se nota que para todos los archivos el tiempo de ejecución
de compresión Huffman es menor que el tiempo de ejecución de compresión
BNO, se debe a que para los códigos Huffman se utilizó una estructura de
árbol binario; los árboles binarios son muy especiales ya que, se prestan a
búsquedas, inserciones y borrados muy rápidos, y estos resultados
Capítulo III 153
TABLA 3-12
TIEMPOS DE EJECUCIÓN [segundos]
NOMBRE DE
ARCHIVOS
PRUEBA
VITE
ANEXO1
VISUAL
TELA
TESMP
PLAÑÍ
PLAN6
TESIII
TESIS
PLAN3
TESIII1
TESIV
ACTSIS
PLAN2
TAMAÑO
15
3.012
5.711
8.664
9.015
17.133
17.685
21.283
28.990
30.228
32.061
41.459
48.678
64.757
71 .960
COMPRESIÓN
HUFFMAN
0,22
3,62
6,43
10,60
3,84
20,71
20,49
23,62
35,26
36,42
37,19
51,79
61,84
75,63
55,20
BNO
0,22
5,27
9,99
15,38
5,55
29,99
30,76
55,76
50,27
52,62
55,70
72,72
86,23
113,42
123,64
DESCOMPRESIÓN
HUFFMAN
0,17
1,26
2,53
3,90
1,32
7,25
7,41
8,63
12,25
12,80
13,40
18,73
22,13
27,35
29,60
BNO
0,16
4,40
8,02
13,24
4,01
25,70
27,13
31,14
43,51
45,53
49,93
62,50
74,70
103,31
110,29
comprueban su versatilidad; el tiempo de creación de los árboles binarios
está en el orden de centésimas de segundos, ver tabla 3-13.
La compresión BNO utiliza listas y estructuras de listas por lo cual su tiempo
de ejecución es mayor, está en el orden de decenas de segundos, ver tabla
3-14
Capítulo III 154
TA
BLA
TIE
MP
OS
DE
EJE
CU
CIÓ
N P
AR
CIA
L Y
TO
TA
L D
E L
OS
PR
OC
ES
OS
DE
CO
MP
RE
SIÓ
N Y
DE
SC
OM
PR
ES
IÓN
CO
N E
L C
OD
ICIO
HU
FF
MA
N
Uni
dade
s; s
egun
dos
AR
CH
IVfl
AC
TS
ISA
NE
XO
1P
LA
N1
PLA
N2
PLA
N3
PLA
N6
PR
UE
BA
TE
LAT
ES
IIIT
ES
III1
TE
SIV
TE
SM
PT
ES
ISV
ISU
AL
VIT
E
CO
MP
RE
SIÓ
NLE
CTUR
A24
,28
2,48
6,5
426
,04
11,8
77,
690,
111,
4912
,36
18,2
422
,02
7,09
12,6
93,
681,
26
3EN
.AR
E0,
050,
050,0
00,
050,0
50,
050,
000,
000,
050,0
50,
060,
050,
050,
000,
00
2RE
A.R
E0,
170,
170,
170,
11 0,11-
0,11
0,05
0,16
0,22
0,22
Of2
70,
170,
220,
170,
16
¡EN
.CO
D51,0
24,1
713
,35
54,9
824,7
215
,82
0,06
2,14
22,2
533
,01
39,5
012
,91
23,3
56,
752,
09
TO
TA
L75
,58
6,92
20
f22
81,2
3-
36,8
023
,72
0,27
3,84
34,9
351
,57
61,9
120
,91
36,3
610
,65
3,57
DE
SC
OM
PR
ES
IÓN
AR
.AR
C0,
060,
060,
060,
060,
050,
050,
050,
050,
050,
050,
000,
000,
050,
060,
00
3EN
.AR
E0,
050,
050,
000,
050,
060,
000,
000,
060,
060,
060,
050,
050,
060,
000,
05
¡EN
.AR
C26
,64
2,25
7,08
29,3
313
,24
8,29
0,06
1,09
12,0
318
,07
22,3
66,
9812
,90
3,57
1,10
TO
TA
L26
,68
2,41
7,19
29,4
913
,46
8,40
0,17
1,26
12,2
018
,24
22,4
77,
0913
,07
3,66
1,21
Oí
Oí
8 •o I
TA
BLA
3-1
4
TIE
MP
OS
DE
EJE
CU
CIÓ
N P
AR
CIA
L Y
TO
TA
L D
E L
OS
PR
OC
ES
OS
DE
CO
MP
RE
SIÓ
N
Y D
ES
CO
MP
RE
SIÓ
N C
ON
EL
CÓ
DIG
O B
NO
ARC
HIV
O
AC
TS
ISA
NE
XO
1P
LAN
1P
LAN
2P
LAN
SP
LAN
6P
RU
EB
AT
ELA
TES
IMT
ES
IIHT
ES
IVT
ES
MP
TE
SIS
VIS
UA
LV
ITE
CO
MP
RE
SIÓ
N.É
ÓtÚ
F^
25,3
22,3
76,8
127
,24
. .1
2,19
7,80
0,11
1,53
12,5
218
,34
22,1
47,
2012
,74
3,57
1,20
GE
NftB
0,06
0,05
0,00
0,00
0,05
0,05
0,00
0,06
0,06
0,06
0,05
0,05
0,05
0,00
0,00
CR
EA
-RE
0,27
0,2
20,
220,1
60,
170,
170,
060,
220,
330.
380,
440,
280,
330,
220,
17
{3E
N.C
OD
87,3
97,
1423
,23
95,4
143
,01
27,4
60,
053,
7337
,67
54,2
163
,77
22,3
539
,28
11,5
43,
73
TOTA
L11
3,09
9,83
30,3
111
2,93
55,4
835
,54
0S27
5,60
50,6
473
,05
86,4
629
,93
52,4
615
,38
5,16
DE
SC
OM
PR
ES
IÓN
íAR
iRC
h0,
110,
000,
000,
000,
000,
050,
000,
000,
000,
000,
000,
000,
000,
000,
00
GE
N.P
AR
0,00
0,06
0,05
0,00
0,00
0,00
0,00
0,06
0,06
0,11
0,11
0,05
0,05
0,00
0.00
SEN
-AR
Ct
102,
277,9
626
,97
109,
3649
,54
30,8
70,
063,
7943
,06
62,0
773
,93
25,4
945
,65
13,0
74,
23
TOTA
L10
2,49
8,07
27,0
810
9,41
49,6
53,
930,
173,
9043
,23
62,2
374
,09
25,6
045
,76
13,1
84,
28
Toda la programación se hizo con asignación dinámica de memoria, para
obtener la tabla de probabilidades en forma dinámica, con el objeto de que la
frecuencia de cada símbolo, represente fielmente de acuerdo a la distribución
de probabilidades particular de cada uno de los archivos texto. Con lo cual se
logra reducir el número de bits requeridos para codificar cada símbolo, y esto
lleva a obtener una mejor tasa de compresión.
Por lo tanto según el número total de símbolos q, se producen demoras en el
proceso de crear la lista dinámica de ocurrencias, pues se crean los.
elementos de las listas de acuerdo al orden de aparecimiento de los símbolos
fuente, razón por la cual en la lectura y creación de la lista se tienen tiempos
de ejecución en el orden de las decenas de segundos, valores
significativamente grandes comparados con los de la creación de la
estructura de árbol binario, ver tabla 3-13 y 3-14.
Cuando se realizan los procesos de descompresión se evitan los pasos de
encontrar las palabras código; en el código Huffman se realiza una
búsqueda desde la raíz hacia cada hoja y este acceso es muy rápido
comparado con encontrar cada palabra código a través de la lista de hojas
de referencia, el archivo es leído una sola vez y permite una decodificación
instantánea a partir de la información binaria, por lo cual los tiempos de
descompresión son mucho menores que en la compresión; y en el código
BNO se realiza solamente la asignación de los parámetros de generación nb
y Neq, mas no la generación de las palabras código en sí, por tal motivo el
tiempo de ejecución en la descompresión también es menor que en la
compresión.
Capitulo III 157
No existe una relación lineal entre (os tiempos de ejecución con el tamaño del
archivo original como podría pensarse; a; mayor tamaño, mayor tiempo de
ejecución, y viceversa.
Esto no sucede debido a que, por ejemplo el archivo ACTSIS de un tamaño
menor que PLAN2 tiene el tiempo de ejecución mayor igual a 75.58s. ya
que posee un número mayor de símbolos fuente (q=78, q=54
respectivamente) y por lo tanto requiere mayor tiempo en la creación
dinámica de la lista de ocurrencia, la lista de hojas de referencia y el árbol
binario. De igual manera sucede con el archivo VISUAL, de menor tamaño
que el archivo TELA tienen tiempos de ejecución de 10.65s y 3.84s.
respectivamente, dispone de un número mayor de símbolos fuente q=63, en
tanto que para el archivo TELA q=59.
Es decir que los tiempos de ejecución están relacionados con la cantidad de
información disponible antes que con el tamaño del archivo, de todas
maneras si influye ese tamaño cuando se ejecutan el proceso de lectura, y el
proceso de compresión.
Capítulo ¡II 158
CONCLUSIONES Y RECOMENDACIONES
Los programas se basan en aplicar dos cosas: algoritmos y estructuras de
datos, y un buen programa consiste en una combinación de ambos,
entonces, elegir e implementar una estructura de datos es tan importante
como las rutinas que la manipulan. Esta es la razón por la cual, se eligió
cuidadosamente implementar una estructura de árbol binario, que permitió
alcanzar óptimamente la codificación del código Huffman, por tratarse de un
proceso altamente recursivo.
También la decodificación del código Huffman resultó óptima al codificar con
una estructura de árbol, y no fue necesario introducir bits de bandera para
limitar las palabras código; la búsqueda y rastreo en el árbol binario solventó\l problema de la limitación del fin de las palabras código, así como manejar
\n versatilidad la longitud variable de las palabras código.
La codificación Huffman es más eficiente para ía compresión de archivos de
texto, cuando tienen gran cantidad de caracteres con alta probabilidad, caso
contrario solamente se logra comprimir hasta un 40% menos.
El código Huffman resultó más óptimo que e! código BNO, para la
compresión; debido a que no fue necesario incluir bits adicionales para limitar
las palabras código, y además provee el mejor radío de compresión.
El código BNO resultó un buen código de compresión, cuando el archivo
dispone de gran cantidad de caracteres con alta probabilidad, caso contrario
solamente se logra comprimir hasta un 24% menos.
Una propiedad muy importante del código Huffman, es el valor que alcanza
la longitud media del archivo codificado; este es un parámetro determinístico
cuando los valores de la eficiencia del código son relativamente buenos, el
archivo que tenga el menor valor de longitud media, proporcionará la mejor
tasa de compresión.
El valor del máximo radio de compresión posible de la fuente, ayuda a
avizorar que tan buena será la tasa de compresión, ya que su definición
conceptual incluye la probabilidad de cada símbolo, sin embargo por sf sólo
este parámetro no determina la efectiva disminución de los requerimientos de
almacenamiento, cuando se codifica los símbolos fuente; esta disminución
depende principalmente de la eficiencia del código utilizado para la
codificación de los símbolos fuente, y de la longitud de las palabras código.
Por lo tanto se ha podido comprobar que los archivos fuente que proveen el
máximo radio de compresión posible de la fuente pueden ser óptimamente
codificados con el código Huffman (en menor porcentaje también con el
código BNO), que aquellos que no presentan un valor menor del máximo
radio de compresión posible de la fuente. Es e! caso de la compresión
alcanzada con el archivo TELA
En e! caso de que el máximo radio de compresión posible de la fuente, la
eficiencia del código utilizado para la codificación de los símbolos fuente, y la
longitud media de las palabras código, obtengan sus respectivos valores
óptimos, se conseguirá un alto grado de compresión; de no ser así se
compensará la deficiencia de uno de ello con la excelencia del otro y
producirán la mejor tasa de compresión.
160
Con respecto al código BNO, la inclusión de bits de bandera para poder
realizar la decodificación de los símbolos código; aumentan ei valor de la
longitud media, razón por la cual produce menor tasa de compresión que el
código Huffman. Sería aconsejable desarrollar una mejor técnica para limitar
las palabras código con el objeto de conseguir mejores niveles de
compresión. A pesar de este inconveniente el código BNO proporciona
niveles aceptables de compresión.
El proceso de codificación del código BNO, es más fácil que el proceso de
codificación del código Huffman; sin embargo no presentan la misma
característica los procesos inversos, esto quiere decir que; el proceso de
decodificación del código Huffman es más fácil que el proceso de
decodificación del código BNO.
Los archivos tipo texto, ¡nicialmente fueron concebidos solo para
almacenamiento, debido a la filosofía con que fue creado el sistema
operativo DOS, del cual surgió los caracteres ASCII; los creadores del DOS,
no dieron mucha importancia a la información de texto, sino más bien a la
información binaria, razón por la cual, los archivos tipo texto presentan cierta
dificultad al utilizarlos en sistemas de comunicaciones; como los encontrados
en la presente tesis.
Hoy en día los sistemas operativos de versiones superiores a 5.0, Incluyen al
final del archivo texto un conjunto de bits FeOf con e! cual se consigue un
control de errores y una mejor administración de los mismos. Sin embargo
ese conjunto de bits desorienta la interpretación de los niveles alcanzados de
compresión.
161
Los bytes necesarios para llevar a cabo la descompresión, que son
grabados en la cabecera del archivo comprimido y; la diferencia entre el
tamaño original y el número de caracteres leídos, debido a la inclusión del fin
de archivo Feof, influyen mucho en el tamaño final del mismo; es decir en
la tasa de compresión real alcanzada. Sin embargo esa tasa de compresión
real no refleja la verdadera bondad de la eficiencia del código Huffman y
BNO cuando se los utiliza como técnicas de compresión de archivos de texto.
En el proceso de codificación del código BNO, ei conjunto de palabras
código es siempre el mismos para cualquier archivo, en cambio en el proceso
de codificación del código Huffman se crean las palabras código
especialmente para cada archivo, es decir la tabla de codificación para BNO
es estática y para Huffman es dinámica.
El tiempo necesario para realizar la compresión de archivos, utilizando el
código Huffman disminuye cuando, en vez de generar una tabla de
codificación específica, se utilice una tabla preestablecida en la que consten
las palabras código asociada para cada símbolo fuente.
Como el máximo radio de compresión posible de la fuente, indica en cuanto
puede comprimirse el archivo, que depende tanto de la cantidad de símbolos
fuente (pueden ser utilizados hasta 256 símbolos fuente, como máximo) y de
su frecuencia de ocurrencia en el texto; sería conveniente poder comprimir la
entropía de la fuente, además de la reducción de la redundancia del código.
Aplicando las dos técnicas, se pueden alcanzar mayores niveles de
compresión, que aquellos valores alcanzados solamente con la reducción de
la redundancia; método utilizado en la presente tesis.
162
BIBLIOGRAFÍA
1.- Abramson N. 'Teoría de la información y codificación", McGraw-Hill
Book Company, España,1981.
2.- Becerra C. "Estructura de datos en C", Por Computador Ltda.,
Colombia 1991.
3.- Becerra c. "Lenguaje C para todos los niveles", Por Computador Ltda,,
Colombia, 1991.
4-.- Hchildt H. "Lenguaje C Programación avanzada", Osbome/McGraw-
Hill, México 1990.
5.- García J. "Lenguaje C y Estructura de Datos", McGraw-Hill, España
1992.
6.- Jamsa K. "Lenguaje C Biblioteca de Funciones", Osbome/McGraw-Hill,
España, 1990.
7.- Schildt H. "C: Manual de Referencia", Osbome/McGraw-Hill, España
1991.
8.- Ng Waijiung "Binary Nonconsecutive One Code for Time-Tag Data
Compression", Proc. IEEE , Vol 118, N 10 October 1971, pp. 1358-
1360.
9.- Held G. "Data Compression", New York. John Wiley & Sons, 1983.
10.- Hankamer M. "A Modified Huffman Procedure wiíh Reduced Memory
Requirement" IEEE Trans on Comm, Vol COM-27 N 6 June 1979, pp
930-932.
11.- Huffman D. "A Method for the Construction of Minimun Redundance
Codes". Proc IRÉ. Vol 40 September 1952.
12.- Golumb S. "Run Length Encodings" IEEE Trans on Info. Theory. Vol IT-
12 N 3 Jule1966.
13.- Lynch T. "Data Compression Techniques and Apücations", Van
Nostrand Reinhold Company, New York, 1984.
14.- Sedgewick R. "AJgorithms", Addison-Wesley Publishing Company",
USA, 1988.
15.- The C Users Journal, "Data Compression Using Huffman Coding",
Algorithms Vol 10 N 2 Febrero 1992.
16.- Hamming R. "Coding and Information Theory", Prentice-Hall Inc. USA,
1980.
164
ANEXO 1
MANUAL DE USO DEL PROGRAMA
Los tres programas ejecutables:
HUFFMAN.EXE
HUFFDES.EXE
BNO.EXE
BNODES.EXE
Están creados para ejecutarles, con el nombre del programa ejecutable, y
nombre del archivo a comprimir; la extensión TXT del archivo a comprimir es
opcional, lo importante es que esté grabado en ASCII, pudiendo presentarse
los siguientes casos:
1. NOMBRE (ejecutable ) NOMBRE.TXT
En este caso se guardará el archivo .CPR y archivo .RPT en el sitio donde
se encuentre el archivo a comprimir.
2. NOMBRE (ejecutable ) Direccionamienío de archivo a comprimir
NOMBRE.TXT
En este caso se guardará el archivo .CPR y archivo .RPT en eí sitio donde se
ha direccionado ei lugar en que se encuentre el archivo a comprimir.
3. NOMBRE (ejecutable ) NOMBRE.TXT Direccionamienío de
archivo.CPRy archivo.RPT
En este caso se guardará ei archivo .CPRy archivo .RPT en el sitio donde se
ha direccionado el lugar en que se desea guardar el archivo comprimido y el
archivo reporte
Si se ha ejecutado la compresión mediante el código Huffman por ejemplo, y
se desea ejecutar la compresión mediante el código BNO; ha de tenerse la
precaución de direccionar el almacenamiento de los archivos .CPR y .RPT
en otro sitio, de no ser así, se presentará un aviso que indicará que ya existe
el archivo.CPR y preguntará si desea sobreescribirío, si o no; si se elige si,
se pierde el archivo .CPR anterior, y el archivo.RPT se guarda a continuación
del contenido del anterior archivo.RPT; y si se elige no, no se ejecuta el
programa ejecutable y sale al sistema operativo.
ANEXO 2
MANUAL DEL PROGRAMADOR
En esta sección, se muestra el árbol de Herencia de Objetos, ¡mplementado
en los procesos de compresión y descompresión, de los archivos de texto. Se
añada el contenido de los objetos para un mejor entendimiento.
de JZerendn de-
CONTENIDO DE LOS OBJETOS UTILIZADOS
EN COMPRESIÓN Y DESCOMPRESIÓN
ATexto
boolean FileQ;// abrir por default para lectura,
boofean FileWQ;// abrir para escritura,
boolean FileRWQ;//abrir para lectura/escritura,
boofean Read;// para leer caracteres,
boolean Write;// para escribir caracteres,
boolean WriteS;// para escribir cadenas,
boolean Seek; // posicionarse en el archivo,
boolean SeekENDQ; // posicionarse al final del Arch.
void EnceroConís() // encera contadores,
granentero getNCRQ;//numero de caractere leídos,
granentero getNCW();//numero de caracteres escritos,
boolean EOFPageQ;// control de fin de paginación.
ABlnario
boolean FiieQ;// abrir por default para escritura,
boolean FileReadQ;//abrir para lectura,
boolean ReadCab; // lee cabeza del archivo comprimido,
boolean ReadReg; // tee registro de lista ocurrencias,
boolean ReadOct; // lee octetos con bits de código,
boolean WriteCab;// escribir encabezado,
boolean WriteReg;// escribir registro de lista,
boolean WríteOct;// escribir octetos de código,
boolean SeefcSETQ;// posiciona al inicio del archivo,
boolean SeekSETLO;// posiciona al inicio de la lista.
Manual del Programador
boolean SeekSETCQ;// posiciona al inicio de códigos,
boolean Seek~ENDL();// posiciona al final de la lista,
boolean SeekENDQ;// posiciona al final del archivo,
boolean FeofLQ;// fin de la lista?.
ArbolH
boolean isVoidQ; // esta vacia la lista de arboles?
void DeleteAllQ; // elimina todos los arboles.
PuntoArbol* Créate; // Crea un Árbol.
PuntoArbol* assignCab; // Coloca cabeza de arboles.
PuntoArbol* assignCola; // Coloca cola de arboles.
PuntoArbol* getCabQ; // retoma el árbol cabeza.
PuntoArbol* getColaQ; // retoma el árbol cola.
PuntoArbol* Link; // enlaza un árbol en ia lista.
DatRefArbol* UnUnkQ; // desenlaza un árbol.
LHojasH
Hoja* operator «=(const char&);// insertar Hoja con C.
Hoja* operator «=(Hoja*J;// Insertar Hoja.
Hoja* operator »=(Hoja*)¡// Eliminar Hoja.
Hoja* operator <=(const char&);//lnsertar HojaBNO con C.
void DeleteAll();// elimina todos elementos de lista,
void Sort(const ModoOrd&)¡// ordenamiento de la lista.
Hoja* getUltimoQ; // retoma el utómo de las lista.
Hoja* assígnUlt(Hoja* H)¡ // asigna uftimo de lista.
HojaRer getCabezaRefQ; // retoma hojaRef de cabeza.
Hoja* CreateH(const char&);//crea Hoja con carácter C.
Hoja* CreateH; // crea una Hoja con C y F.
HojaBNO* CreateHB;// crea una HojaBNO con carácter C.
Manual del Programador
HojaBNO* CreateHB;//crea una HojaBNO con C y F.
HojaRer CreateHR; // crea hoja de referencia,
granentero getNTC();//devueive numero total car.
voíd generateHR();//gertera lista de hojas referenciales.
intgenerateParBNO();//genera parámetros código en BNO.
void DeleteRef();//elimina todas referencias de hojas,
boolean isVoidRefQ; // está vacia lista de hojasRef?
HojaRef
char getCarQ;// devuelve el carácter o símbolo.
HojaRer assignSig;// apunta a la Siguiente HojaRef.
HojaRer getSigQ;
Hoja* assignHoja;// retoma la hoja referenciada.
Hoja* getHojaQ;
unsigned short assignNBits; //asigna numero de bits.
unsigned short getNBits;
Nodo
Miembro* operator«=(Miembro*); //asigna izquierda.
Miembro* operator»=(Míembro*); // asigna derecha.
Miembro* operatorQ; // devuelve izquierda o derecha.
Hoja
char getCarQ; // devuelve el carácter o símbolo.
char assignCar;// asigna un símbolo a la hoja.
Hoja* assignSíg;//asigna siguiente para enlace en lista.
Hoja* getSigQ; // devuelve Dír. siguiente.
HojaRer assignHRef;//as¡gna referencia de hojaref.
Manual del Programador
HojaRef* getHRefQ; // devuelve hojaref.
boolean operator ==(const Hoja*} const; //son iguales?
HoJaBNO
¡nt assignNB(const ¡nt& NB)¡ // asigna numero de bits,
granentero assignNEQ; // asigna numero equivalente,
int getNB();
granentero getNEQQ;
Buffer
int BPos(short int); // Se ubica en la posición Pos.
iní ReadBrtfshort int c); // Lee un bit del buffer.
iní WrtteBit(int x,short ¡nt c);//escribe bit.
PuntoBít* Linfc(PuntoBft*); //enlaza octeto en buffer,
PuntoBít* CreateBrt();//crea un octeto con bit.
voíd DeleteQ;// elimina todos ios octetos menos uno.
void FreeQ; // elimina todos los octetos del buffer.
short int getNBitQ; // retoma numero de bits exisí,
short int assignNBit;
Octeto* getOct; // retorna el octeto con bits.
short int getNQcQ; //retoma numero de octetos buff.
AnalyMem
ListBrt*CreaíeLB¡// Crea Lista bits con parámetros.
ListBit*AddLB; //Añade Lista bits con parámetros,
int AddBít(int);// Añade bit a código [UnComprBNO]
void CompletCode;// Genera bandera para el código,
void FreeQ; // Elimina el LB.
Manual dd Programador
booiean isVoidQ;// esta vacia la memoria de análisis?
boolean CompletWordQ; //tenemos un palabra de código?
void GenNEQ; // genera el NB y NEQ (parámetros).
BitT* ReadLB; // lee un bit del código.
ListBíT getLBQ;
Huffman
boolean CodHuffmanQ;//Genera Árbol de Código Huffman,
boolean CompresionQ;//Codifica y guarda en archivo,
boolean UnCompres¡on();//Descomprirne y guarda en texto.
// Además contiene controles de presentación en pantalla y cálculos para
generación de reportes junto con control de tiempos en procesos de acción:
* Carga de Archivo fuente a comprimir, el mismo que consiste en:
+ Lectura de caracteres de archivo fuente.
+ Generación de lista de ocurrencias.
+ Generación de lista de referencias.
+ Ordenamiento de hojas en base a ocurrencias.
+ Escritura de Cabecera en archivo comprimido.
* Generación de Árbol de Códigos.
* Generación de Archivo Reportes, el cual efectúa los cálculos para reporte
estadístico y los almacena en un archivo tipo texto.
* Compresión de archivo, que codifica el código y lo guarda en el archivo
comprimido.
Manual del Programador 6
* Descompresión de archivos,
BNO
boolean Compresion();//Cod¡fica y guarda en archivo,
boolean UnCompresion();//Descodifica y guarda en texto.
// Además contiene controles de presentación en pantalla y cálculos para
generación de reportes junto con control de tiempos en procesos de acción:
* Carga de Archivo fuente a comprimir, el mismo que consiste en:
+ Lectura de caracteres de archivo fuente.
+ Generación de lista de ocurrencias.
+ Ordenamiento de hojas en base a ocurrencias.
+ Escritura de Cabecera en archivo comprimido.
* Generación de Parámetros de Códigos (Numero de bits, Numero
equivalente).
* Generación de Archivo Reportes, el cual efectúa los cálculos para reporte
estadístico y los almacena en un archivo tipo texto.
* Compresión de archivo, que codifica el código y lo guarda en el archivo
comprimido.
* Descompresión de archivo.
Manual del Programador