Sunteți pe pagina 1din 2

APUNTES- MATEMATICA DISCRETA

Algoritmo de compresin de Huffmn


Se trata de un algoritmo que puede ser usado para compresin o encriptacin de datos.
Este algoritmo se basa en asignar cdigos de distinta longitud de bits a cada uno de los caracteres de un fichero. Si se
asignan cdigos ms cortos a los caracteres que aparecen ms a menudo se consigue una compresin del fichero.
Esta compresin es mayor cuando la variedad de caracteres diferentes que aparecen es menor. Por ejemplo: si el texto
se compone nicamente de nmeros o maysculas! se conseguir una compresin mayor.
Para recuperar el fichero original es necesario conocer el cdigo asignado a cada carcter! as" como su longitud en
bits! si #sta informacin se omite! y el receptor del fichero la conoce! podr recuperar la informacin original. $e este
modo es posible utili%ar el algoritmo para encriptar ficheros.
Mecnismo del lgoritmo!
&ontar cuantas veces aparece cada carcter en el fichero a comprimir. ' crear una lista enla%ada con la
informacin de caracteres y frecuencias.
(rdenar la lista de menor a mayor en funcin de la frecuencia.
&onvertir cada elemento de la lista en un rbol.
)usionar todos estos rboles en uno nico! para hacerlo se sigue el siguiente proceso! mientras la lista de rboles
contenga ms de un elemento:
&on los dos primeros rboles formar un nuevo rbol! cada uno de los rboles originales en una rama.
Sumar las frecuencias de cada rama en el nuevo elemento rbol.
*nsertar el nuevo rbol en el lugar adecuado de la lista segn la suma de frecuencias obtenida.
Para asignar el nuevo cdigo binario de cada carcter slo hay que seguir el camino adecuado a trav#s del rbol.
Si se toma una rama cero! se a+ade un cero al cdigo! si se toma una rama uno! se a+ade un uno.
Se recodifica el fichero segn los nuevos cdigos.
,omemos un texto corto! por ejemplo:
-ata la jaca a la estaca-
./ &ontamos las veces que aparece cada carcter y hacemos una lista enla%ada:
0 012/! a13/! c14/! e1./! j1./! l14/! s1./! t14/
4/ (rdenamos por frecuencia de menor a mayor
e1./! j1./! s1./! c14/! l14/! t14/! 0 012/! a13/
5/ &onsideremos ahora que cada elemento es el nodo ra"% de un rbol.
6/ )undimos los dos primeros nodos 1rboles/ en un nuevo rbol! sumamos sus frecuencias y lo colocamos en el lugar
correspondiente:
' sucesivamente:
El resultado final es:
2/ 7signamos los cdigos! las ramas a la i%quierda son ceros! y a la derecha unos 1por ejemplo/! es una regla
arbitraria.
a 0 0 c l t S e j
8 .8 ..88 ..8. ...8 ....8 .....8 ......
9/ ' traducimos el texto:
7 t a 0 0 l a 0 0 j a c a 0 0 a 0 0 l a 0 0 e s t a c a
8 ...8 8 .8 ..8. 8 .8 ...... 8 ..88 8 .8 8 .8 ..8. 8 .8 .....8 ....8 ...8 8 ..88 8
' slo queda empaquetar los bits en grupos de ocho! es decir en bytes:
8...88.8 ..8.8.8. .....8.. 888.88.8 ..8.8.8. ....8... .8...88. .8888888
8x:4 8x$2 8x); 8x.4 8x$2 8x): 8xb3 8x<8
En total ocho bytes! y el texto original ten"a 45.
Pero no nos enga+emos! tambi#n hay que almacenar la informacin relativa a la codificacin! por lo que se puede ver
que para textos cortos no obtendremos mucha reduccin de tama+o.

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