Codificación de Huffman

36
Universidad de Cuenca Programación III Estructura de Archivos Codificación de Huffman Integrantes: Jefferson Arias Daniel Gomez Jonnathan Peñaranda Gabriela Verdugo

Transcript of Codificación de Huffman

Universidad de Cuenca

Programación IIIEstructura de Archivos

Codificación de Huffman

Integrantes:● Jefferson Arias● Daniel Gomez● Jonnathan Peñaranda● Gabriela Verdugo

Concepto

● La codificación Huffman es un algoritmo usado para compresión de datos.● El algoritmo de codificación/compresión Huffman se propuso en 1952 como

una forma sencilla y óptima de mapear cada símbolo de un alfabeto con un código (codeword) de longitud óptima.

● La codificación Huffman usa un método específico para elegir la representación de cada símbolo, que da lugar a un código prefijo que representa los caracteres más comunes usando las cadenas de bits más cortas, y viceversa.

Procedimiento de asignación

● El proceso de asignación de códigos se lleva a cabo mediante la construcción de un árbol binario:○ Recorrer el árbol en pre-orden hacia el nodo que contiene el carácter con

su frecuencia.○ Los nodos menos probables se unen sucesivamente para formar otro

nodo de mayor probabilidad, de forma que cada uno de los enlaces añade un bit al código de los símbolos que estamos juntando.

○ Este proceso termina cuando sólo se dispone de un nodo, de forma que éste representa la raíz del árbol.

Ejemplo 1.

● Palabra a codificar : LAPTOP

1. Contar el número de peticiones de cada carácter es decir el número de repeticiones de cada uno de los caracteres

L A P T O P

L A P T O P

1

L A P T O P

1 1

L A P T O P

1 1 1

L A P T O P

1 1 1 1

L A P T O P

1 1 1 1 1

L A P T O P

1 1 1 1 1 2

L A T O P

1 1 1 1 2

● Se pone en una lista enlazada los caracteres y sus frecuencias. Y eliminamos los que se repiten (Se deja uno solo).

● El siguiente paso es crear un nuevo árbol binario pasando los dos primeros nodos como hojas del árbol.

L 1 A 1 T 1 O 1 P 2

Null:2

L:1 A:1

El nodo raíz se guarda como null junto con la suma de las frecuencias de los nodos hijos.

● La lista quedaría de esta manera:

● El siguiente paso es insertar nuestro árbol a la lista de nodos de forma ordenada; como la frecuencia de nuestro nodo raíz es dos, entonces se colocaría al final de la lista ya que en este caso no hay frecuencias más altas.

T 1 O 1 P 2

T 1 O 1 P 2 Null 2

L:1 A:1

● Repetimos el mismo paso volvemos a tomar los dos primero nodos de la lista y formamos el árbol con el nodo raíz que en la frecuencia es la suma de los hijos.

Null:2

T:1 O:1

● Ahora insertamos el árbol de manera ordenada en la lista de nodos que teníamos definida anteriormente.

P 2 Null 2 Null 2

L:1 A:1 T:1 O:1

● Volvemos a tomar los dos nodos siguientes y formamos el árbol.

Null:4

P:2 Null:2

L:1 A:1

● Ahora insertamos el árbol de manera ordenada a nuestra lista.

Null 2 Null 4

T:1 O:1 P:2 Null:2

L:1 A:1

● Volvemos a tomar los dos primeros nodos de esta lista.

Null:6

Null:2 Null:4

T:1 O:1 P:2 Null:2

L:1 A:1

● Ahora es momento de poner los pesos de nuestro árbol.

Null:6

Null:3 Null:3

T:1 O:1 Null:2

L:1 A:1

P:2

0 1

0 1

0

1

1

0

● Los valores de cada una de las letras son:

P : 10

T: 00

O: 01

A: 111

L: 110

● Entonces la palabra entera es la unión de el valor de cada letra.

L A P T O P

110 111 10 00 01 10

CODIFICACIÓN DE HUFFMAN

Ejemplo 2.

● Palabra a codificar : LAPTOP

● A cada una de las letras le ponemos las frecuencia con la que se repiten tomándolo del procedimiento anterior quedaría de la siguiente forma.

L A P T O P

L A P T O P

1 1 1 1 1 2

● Para formar el árbol tomamos los nodos de dos en dos con los menores pesos y vamos formando los árboles.

Null:2

L:1 A:1

Null:2

T:1 O:1

Null:2

P:2

● Lo siguiente que se debe hacer es tomar los árboles de dos en dos para formar un solo árbol

Null:2

L:1 A:1

Null:2

T:1 O:1

Null:4

Null:2

L:1 A:1

Null:2

T:1 O:1

Null:4

Null:2

P:2

Null:6

● Ahora debemos etiquetar cada una de las aristas.

Null:2

L:1 A:1

Null:2

T:1 O:1

Null:4

Null:2

P:2

Null:60 1

10

0 00

1 1

● Los valores de cada una de las letras son:

P : 10

T: 010

O: 011

A: 001

L: 000

● Entonces la palabra entera es la unión de el valor de cada letra.

L A P T O P

000 001 10 010 10 10

CODIFICACIÓN DE HUFFMAN

Factor de Comprensión.

● La compresión de datos es la reducción del volumen de datos tratables para representar una determinada información empleando una menor cantidad de espacio.

● El espacio que ocupa una información codificada (datos, señal digital, etc.) sin compresión es el cociente entre la frecuencia de muestreo y la resolución. Por tanto, cuantos más bits se empleen mayor será el tamaño del archivo.

Conclusiones.

● La codificación de Huffman es útil para la codificación de las palabras y ponerlas en binario ya que el árbol que se forma para la codificación es binario.

● Los resultados de la codificación en algunos casos son diferentes dependiendo del recorrido que se use para el árbol pero existe coincidencia en algunas letras que es el mismo resultado en binario.