Greedy: Códigos de Huffman Flashcards

1
Q

Explique la idea detrás de los Códigos de Huffman

A

La idea de los Códigos de Huffman es asignar códigos de bits más cortos a símbolos que ocurren con mayor frecuencia, y códigos de bits más largos a símbolos que ocurren con menor frecuencia.

Esto aprovecha el hecho de que, en muchos conjuntos de datos, algunos símbolos son más probables que otros, lo que permite comprimir los datos reduciendo la cantidad total de bits necesarios para representar la información.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Qué es la comprensión de datos?

A

La comprensión de datos es la reducción del volumen de datos que se usan para representar una determinada información, empleando una menor cantidad de espacio.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Qué es una fuente?

A

Se llama ‘fuente’ a todo aquello que emita ‘mensajes’. Existe un conjunto finito de posibles mensajes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Cómo se representan los emnsajes?

A

Los mensajes se representan mediante códigos (el objetivo es elegir códigos de tal forma de reducir al mínimo el tamaño de lo emitido por la fuente).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Qué son los códigos?

A
  • Son una convención que establece cómo representar cada mensaje utilizando una combinación de símbolos: ASCII, Morse, etc.
  • Puede tener longitud fija o variable
  • No deben ser ambiguos
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Explique qué son los códigos decodificables.

A

Los códigos decodificables son aquellos que para cualquier sucesión de códigos, sólo existe un único conjunto de mensajes válidos.

Los códigos de longitud fija son siempre decodificables.

Ejemplo:

10
00
11
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Explique cuándo un código es prefijo

A

Un código es prefijo si no existe ningún código que tenga un prefijo igual a otro código completo.

Los códigos prefijos son siempre decodificables.

Ejemplo:

0
10
110
111
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

¿Qué son los Códigos de Huffman? ¿Es óptimo?

A

Son códigos de longitud variable y prefijos.
La longitud de cada código está basada en la frecuencia de cada mensaje en el emisor (fuente).

Es óptimo: no existen otros códigos prefijos para la misma fuente que la codifique en menor longitud.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Explique el problema de los Códigos de Huffman. ¿A qué se le llama Longitud de C(W)? ¿Qué cumple la longitud de los códigos de Hoffman?

A

Sea el alfabeto A = (a1, a2, ..., an), llamaremos W=(w1, w2, ..., wn) al peso (o frecuencia) de cada ai.

Construiremos un C(W) = (c1, c2, ..., cn) con códigos prefijos y binarios.

Llamamos Longitud(C(W)) a la suma de todos los pesos multiplicados por el tamaño de su código asociado.

De esta forma, se cumple que la longitud de C(W) es menor o igual a la longitud de cualquier otro código prefijo T(W).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Código prefijo: Árbol Binario
¿Cómo puede representarse un código prefijo mediante un árbol binario?

A

Podemos representar un código prefijo mediante un árbol binario: las hojas serán loscódigos y cada nodo tendrá 2 o ningún descendiente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Explique el Algoritmo Greedy para Códigos de Hoffman con Árboles Binarios.

A

Se genera un árbol de Huffman para armal el optimal prefix code.

  1. Inicialmente, cada código ci es un nodo hoja con
    peso wi.
  2. Mientras quede más de un nodo sin padre:
    2.a. Toma los dos nodos x,y de menor peso que no tengan padre.
    2.b. Crea un nuevo nodo z con wz= wx+ wy.
    2.c. Define a z como padre de x e y
  3. El último nodo sin padre será la raíz del árbolI
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Indique una posible implementación de Códigos de Huffman. ¿Qué complejidad tiene?

A
  • Se puede usar un heap de mínimos, donde el nodo del árbol será el elemento y la frecuencia será la clave.
  • En cada iteración, se obtienen los 2 nodos de menor peso, y se ingresa uno nuevo creado.
  • El último elemento en el heap es la raíz.

La complejidad algorítmica es O(n logn), por tener n inserciones en el heap.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Explique el pseudocógio para la implementación de Códigos de Huffman con árboles binarios.

A
  1. Para todos los nodos, crear una tupla con (clave, peso) e insertarlos al Heap.
  2. Ir obteniendo los dos mínimos, y unirlos para crear un nuevo nodo. Se guarda cuál es el izquierdo, cuál el derecho, y el peso total es la suma de ambos. Se agrega luego este nuevo nodo al heap.
  3. Se repite el paso 2 por todos los nodos menos el úlimo.
  4. Se devuelve el heap (el árbol).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Códigos de Huffman con árboles binarios: ¿Es óptimo? ¿Se puede probar?

A

Es óptimo, y se puede probar por dos caminos:

  1. Prueba de selección greedy: mostrar que la heurística de elegir dos mensajes de menor peso nos acerca a la solución óptima global.
  2. Prueba de los subproblemas: mostrar que el subproblema derivado de nuestra elección se puede solucionar mediante la misma selección greedy.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Explique la prueba de Selección Greedy

A
  • Sea A = (a1, ..., an) el alfabeto con peso W=(w1,...,wn)
  • Sean a y b los dos mensajes de A con menor frecuencia

=> Existe un código prefijo óptimo tal que
1. El tamaño de (Ca) es igual al tamaño de C(b), y difieren en el último bit.
2. Además, el tamaño de ambos C es mayor o igual al tamaño de cualquier otro elemento de A.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Explique la prueba de los subproblemas

A
  • Sea A = (a1, ..., an) el alfabeto con peso W=(w1,...,wn)
  • Sean a y b los dos mensajes de A con menor frecuencia

=> A' = A - {a,b} + {z}, tal que wz = wa + wb y el resto de los pesos iguales. Tengo entonces C y C'.

  • Sea T' árbol que representa un código prefijo óptimo para C'.
  • Sea T árbol que representa un código prefijo óptimo para C.

Entonces se puede ver que:
T se puede obtener de T', reemplazando el nodo hoja z' por un nodo con hijos a y b.

17
Q

Resuelva:

Arme el árbol binario para el siguiente código de Huffman:

A = 0000
B = 0001
C = 010
D = 011
E = 1

Fuente: ABEEE CCEEE DDEEEE

A

Sea la notación (x,y, v) -> z, tal que x, y son los nodos hijos de la raíz z, y v es el código asociado a la raiz.

El árbol resultante es:

└── 16
              ├── (0) - 6
              │               ├── (0) - 2
              │               │                ├── (0) - A
              │               │                └── (1) - B
              │               │
              │               └── (1) - 4
              │                                   ├── (0) - C
              │                                   └── (1) - D
              └── (1) - E