SlideShare una empresa de Scribd logo
1 de 22
Algoritmo de Huffman
Algortimo de Burrows-Wheeler
Universidad de Cuenca
Moisés Arévalo, Mauricio Calle y Edwin Narváez
 Introducción
 Algoritmos de Compresión sin Pérdida
 Codificación de Huffman
 Algoritmo de Huffman
 Algoritmo de Burrows-Wheeler
 Conclusiones
 La compresión de datos es el proceso de convertir una cadena de
datos de entrada en otra cadena de datos que tenga un tamaño
menor.
 La compresión de datos es útil y popular por los siguientes motivos:
 A la gente le gusta acumular datos y odia tirar cualquier cosa.
 Las personas detestan esperar mucho tiempo en la transferencia de sus datos.
 Existen varios métodos de compresión pero el principio es el mismo:
tratar de eliminar la redundancia de los datos originales.
 Es decir, cualquier dato que no sea aleatorio debe poseer una
estructura.
 Tienen como objetivo representar cierta cadena de datos utilizando y ocupando
menor espacio y cuya reconstrucción sea exacta.
 Este tipo de algoritmo son usados para comprimir archivos donde no se puede
permitir perder ninguna porción de información, tales como textos, imágenes y
sonido.
 Modelo estático: lee y codifica utilizando la probabilidad de aparición de cada
carácter, representado de forma simple en una tabla estática de probabilidades
 Modelo basado en diccionarios: usa código simple para reemplazar cadenas de
símbolos por una valor de un diccionario
 Se diferencia de los demás métodos porque construye sus códigos mediante un
árbol de código y se lo recorre desde lo más profundo hacia arriba.
 Es un algoritmo desarrollado en 1952 por David A. Huffman y es utilizado para la
construcción de códigos Huffman.
 Toma un alfabeto de n-caracteres, los asocia junto a sus frecuencias de aparición.
 El algoritmo de Huffman crea un árbol binario donde cada carácter es una hoja y
se construye de tal forma que siguiéndolo desde la raíz a cada una de las hojas se
obtiene el código de Huffman asociado a él.
1. Se crea varios árboles, uno por cada carácter del alfabeto, consistiendo cada uno
de los árboles en nodo sin hijos y etiquetado cada uno con su carácter y con su
frecuencia de aparición.
2. Se toman los dos árboles de menor frecuencia y se unen al nuevo árbol. La
etiqueta de la raíz será la suma de las frecuencias de las raíces de los dos sub-
árboles que se unen, y cada uno de estos árboles será un hijo del nuevo árbol.
También se etiquetan las dos ramas del nuevo árbol: con un 1 la de la izquierda
y un 0 la de la derecha.
3. Se repite el paso 2 hasta que sólo quede un árbol.
 a4 se combina con a5 y ambas se sustituyen por el
símbolo a45, cuya probabilidad es de 0,2.
 Ahora quedan cuatro símbolos disponibles: a1—con
una probabilidad de 0,4— y a2, a3, a45 —con
probabilidades de 0,2 cada uno—. Se seleccionan de
forma arbitraria a3 y a45, combinándolos y
reemplazándolos por el símbolo auxiliar a345 —cuya
probabilidad es de 0,4—.
 En este momento tenemos tres símbolos, a1, a2 y
a345 —con probabilidades 0,4, 0,2 y 0,4,
respectivamente—. Se seleccionan de forma arbitraria
a2 y a345, combinándolos y reemplazándolos por el
símbolo auxiliar a2345 —cuya probabilidad es de
0,6—.
 Finalmente, combinamos los dos símbolos restantes,
a1 y a2345, sustituyéndolos por a12345 —con una
probabilidad de 1,0—.
1. Comenzar con un código vacío.
2. Iniciar el recorrido del árbol en la hoja asociado al símbolo.
3. Comenzar un recorrido del árbol hacia arriba.
4. Cada vez que se suba de nivel, añadir al código la etiqueta de la rama que se ha
recorrido (1 o 0).
5. Al llegar a la raíz, invertir el código.
6. El resultado es el código de Huffman.
1. Comenzar el recorrido del árbol desde la raíz.
2. Extraer el primer símbolo del código a descodificar
3. Descender por la rama etiquetada con ese símbolo.
4. Repetir desde el paso 2 hasta que se llegue a una hoja, que será el símbolo
asociado al código.
Para a1 la traducción 0
a2 10
a3 111
a4 1101
a5 1100
 Trabaja en modo bloque, donde la cadena de datos se analiza y lee por bloques, y
cada bloque es codificado por separado de la cadena.
 Funciona bien tanto para imágenes, audio y texto
 Produce compresión con resultados muy buenos, en algunos casos la compresión es
de 1 bit por byte e inclusive mejor.
 Comienza con una cadena S de n símbolos y la desorganiza, produciendo otra
cadena L que debe satisfacer dos condiciones:
 Cualquier región de L tenderá a tener una concentración de sólo unos pocos símbolos.
 Es posible reconstruir la cadena original S a partir de L.
 Matemáticamente, se resolverá a través de una permutación, y que una cadena de
símbolos n tiene n! permutaciones.
 El codificador de Burrows-Wheeler procede de la siguiente manera:
1. La cadena L es creada por el codificador como una permutación de S. El codificador
también genera información adicional denotada por I y que será utilizada en el paso 3.
2. El codificador comprime L e I, y escribe los resultados en la cadena de salida. Este paso
comienza típicamente con RLE, continua con la codificación mover al frente, y finalmente
aplica la codificación de Huffman.
3. El decodificador lee la cadena de salida y la decodifica aplicando los mismos métodos que
en el anterior paso, pero en orden inverso. El resultado es la cadena L y la variable I.
NOTA: Ambas L e I son usadas por el decodificador para reconstruir la cadena original.
 Usaremos la cadena swiss_miss.
 Creamos una matriz de n x n, donde
almacena la cadena S en la primera fila.
 Seguida por n-1 copias de S, cada una
desplazada cíclicamente un símbolo a la
izquierda
 A partir de esto la matriz se ordena
lexicográficamente por filas, produciendo la
matriz ordenada.
 La permutación de L seleccionada por el
codificador es la última columna de la
matriz ordenada. La información necesaria
para reconstruir S a partir de L es el
número de la fila de cadena original en la
matriz ordenada, que es nuestro ejemplo es
8, este número se almacena en I.
8
El decodificador lee un flujo comprimido, lo descomprime utilizando
Huffman y mover-al-frene y luego re-construye la cadena S a partir de la L
descomprimida siguiendo estos pasos:
 La primera columna de la matriz ordenada
(columna F) se construye a partir de L.
 Mientras ordena L, el decodificador prepara una
matriz auxiliar T que muestra las relaciones entre
los elementos de L y F. El primer elemento de T
es 4 ya que el éste se encuentra en la posición 4
de F. El segundo elemento de T es 9, es decir
que este se encontrara en la 9 posición de F, y
así sucesivamente.
 La cadena F ya no es necesaria. El decodificador
utiliza L, I y T para reconstruir S de acuerdo con:
 La utilización de RLE tiene sentido, pero solo
como un primer paso. El paso principal de la
compresión de L debe utilizar el método
mover-al-frente.
 Se inicializa A con una lista de los símbolos
que aparecen en la cadena A = (_, i, m, s, w).
 Para i = 0, …, n-1, se codifican el símbolo Li
como el número de símbolos que le preceden
en A, y luego se mueve el símbolo Li hasta el
comienzo de A
 Se combina los códigos del paso 2 en una lista
C, que se comprime aún más utilizando
Huffman o la codificación aritmética.
 El algoritmo de Huffman tiene muchas aplicaciones y es uno de los algoritmos más
importantes dentro la compresión de datos.
 El algoritmo de Burrows-Wheeler es un algoritmo diferente a los tradiciones
porque éste trabaja en bloques, pero aún así necesita de más algoritmos para que
su funcionamiento sea eficiente.
 El algoritmo de Burrows-Wheeler sirve particularmente para cadenas muy largas
dando resultados muy buenos y se ha demostrado que en cadena de datos
pequeñas resulta ineficiente.
 [1]"Compresión de Burrows-Wheeler", Es.wikipedia.org, 2017. [Online]. Available:
https://es.wikipedia.org/wiki/Compresi%C3%B3n_de_Burrows-Wheeler. [Accessed: 20- Jun-
2017].
 [2]"Algoritmo de Huffman", Es.wikipedia.org, 2017. [Online]. Available:
https://es.wikipedia.org/wiki/Algoritmo_de_Huffman. [Accessed: 20- Jun- 2017].
 [3]"Codificación Huffman", Es.wikipedia.org, 2017. [Online]. Available:
https://es.wikipedia.org/wiki/Codificaci%C3%B3n_Huffman. [Accessed: 20- Jun- 2017].
 [4]Compresión de Datos La referencia completa, 4th ed. California, 2014.
 [5]"Algoritmo de compresión sin pérdida", Es.wikipedia.org, 2017. [Online]. Available:
https://es.wikipedia.org/wiki/Algoritmo_de_compresi%C3%B3n_sin_p%C3%A9rdida. [Accessed:
20- Jun- 2017].
 [6]"Run-length encoding", Es.wikipedia.org, 2017. [Online]. Available:
https://es.wikipedia.org/wiki/Run-length_encoding. [Accessed: 20- Jun- 2017].
 [7]2017. [Online]. Available: http://ocw.udl.cat/enginyeria-i-arquitectura/codificacio-i-transport-
de-la-infomacio/Contenidos/2/CompSinPerd.pdf. [Accessed: 20- Jun- 2017].
 El código se encuentra en los siguientes links:
 Huffman: https://github.com/edwinnm/Codificaci-n-de-Huffman
 Burrows-Wheeler: https://github.com/edwinnm/Burrows-Wheeler
Algoritmos de compresión

Más contenido relacionado

La actualidad más candente (8)

Sistemas numericos
Sistemas numericosSistemas numericos
Sistemas numericos
 
Tablas de frecuencia
Tablas de frecuenciaTablas de frecuencia
Tablas de frecuencia
 
2 poo u1 9 tipos de datos no numericos
2 poo u1 9 tipos de datos no numericos2 poo u1 9 tipos de datos no numericos
2 poo u1 9 tipos de datos no numericos
 
Factores generales en la migración hacia otros sistemas
Factores generales en la migración hacia otros sistemasFactores generales en la migración hacia otros sistemas
Factores generales en la migración hacia otros sistemas
 
Arboles binarios
Arboles binariosArboles binarios
Arboles binarios
 
2 poo u1 10 salida con formato y flujos de entrada
2 poo u1 10 salida con formato y flujos de entrada2 poo u1 10 salida con formato y flujos de entrada
2 poo u1 10 salida con formato y flujos de entrada
 
Estructuras de datos lineales
Estructuras de datos linealesEstructuras de datos lineales
Estructuras de datos lineales
 
Tarea 3 tipos de datos corregida
Tarea 3 tipos de datos corregidaTarea 3 tipos de datos corregida
Tarea 3 tipos de datos corregida
 

Similar a Algoritmos de compresión

Taller2 lab stats_matlab
Taller2 lab stats_matlabTaller2 lab stats_matlab
Taller2 lab stats_matlab
Nar Dy
 
Introducción a la electrónica digital
Introducción a la electrónica digitalIntroducción a la electrónica digital
Introducción a la electrónica digital
Arturo Iglesias Castro
 
OPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOS
OPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOSOPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOS
OPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOS
davp2012
 
9. electronica digital
9. electronica digital9. electronica digital
9. electronica digital
sonsolesbar
 

Similar a Algoritmos de compresión (20)

Algoritmos compresión Cubi-Romero-Toledo
Algoritmos compresión Cubi-Romero-ToledoAlgoritmos compresión Cubi-Romero-Toledo
Algoritmos compresión Cubi-Romero-Toledo
 
CODIGO HUFFMAN-1.pptx
CODIGO HUFFMAN-1.pptxCODIGO HUFFMAN-1.pptx
CODIGO HUFFMAN-1.pptx
 
Analisis de circuitos: leyes de kirchhoff por mallas
Analisis de circuitos: leyes de kirchhoff por mallasAnalisis de circuitos: leyes de kirchhoff por mallas
Analisis de circuitos: leyes de kirchhoff por mallas
 
Analisis de circuitos: leyes de kirchhoff por mallas
Analisis de circuitos: leyes de kirchhoff por mallasAnalisis de circuitos: leyes de kirchhoff por mallas
Analisis de circuitos: leyes de kirchhoff por mallas
 
Huffman y-lzw
Huffman y-lzwHuffman y-lzw
Huffman y-lzw
 
Presentacion Foro eulises brazon Josue Baez
Presentacion Foro eulises brazon  Josue Baez Presentacion Foro eulises brazon  Josue Baez
Presentacion Foro eulises brazon Josue Baez
 
Taller2 lab stats_matlab
Taller2 lab stats_matlabTaller2 lab stats_matlab
Taller2 lab stats_matlab
 
Presentación 2014 profe gabriel
Presentación 2014 profe gabrielPresentación 2014 profe gabriel
Presentación 2014 profe gabriel
 
Introducción a la electrónica digital
Introducción a la electrónica digitalIntroducción a la electrónica digital
Introducción a la electrónica digital
 
Unidad_4_Teoría_de_Redes y sus subtemas.pptx
Unidad_4_Teoría_de_Redes y sus subtemas.pptxUnidad_4_Teoría_de_Redes y sus subtemas.pptx
Unidad_4_Teoría_de_Redes y sus subtemas.pptx
 
Codificación de huffman
Codificación de huffmanCodificación de huffman
Codificación de huffman
 
OPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOS
OPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOSOPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOS
OPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOS
 
Abc algoritmos
Abc algoritmos Abc algoritmos
Abc algoritmos
 
Asignacion 3. microcomputadoras
Asignacion 3. microcomputadoras Asignacion 3. microcomputadoras
Asignacion 3. microcomputadoras
 
Lógica digital
Lógica digitalLógica digital
Lógica digital
 
Analizador sintactico
Analizador sintacticoAnalizador sintactico
Analizador sintactico
 
Pseudocódigo
PseudocódigoPseudocódigo
Pseudocódigo
 
A1 python 3
A1 python 3A1 python 3
A1 python 3
 
Intro matlab msantos
Intro matlab msantosIntro matlab msantos
Intro matlab msantos
 
9. electronica digital
9. electronica digital9. electronica digital
9. electronica digital
 

Último

Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disoluciones
chorantina325
 

Último (6)

Emprende en SPA Segundo día CENEC Mexico
Emprende en SPA Segundo día CENEC MexicoEmprende en SPA Segundo día CENEC Mexico
Emprende en SPA Segundo día CENEC Mexico
 
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjjPPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
 
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
 
Las redes sociales en el mercado digital
Las redes sociales en el mercado digitalLas redes sociales en el mercado digital
Las redes sociales en el mercado digital
 
Corte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuadCorte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuad
 
Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disoluciones
 

Algoritmos de compresión

  • 1. Algoritmo de Huffman Algortimo de Burrows-Wheeler Universidad de Cuenca Moisés Arévalo, Mauricio Calle y Edwin Narváez
  • 2.  Introducción  Algoritmos de Compresión sin Pérdida  Codificación de Huffman  Algoritmo de Huffman  Algoritmo de Burrows-Wheeler  Conclusiones
  • 3.  La compresión de datos es el proceso de convertir una cadena de datos de entrada en otra cadena de datos que tenga un tamaño menor.  La compresión de datos es útil y popular por los siguientes motivos:  A la gente le gusta acumular datos y odia tirar cualquier cosa.  Las personas detestan esperar mucho tiempo en la transferencia de sus datos.  Existen varios métodos de compresión pero el principio es el mismo: tratar de eliminar la redundancia de los datos originales.  Es decir, cualquier dato que no sea aleatorio debe poseer una estructura.
  • 4.  Tienen como objetivo representar cierta cadena de datos utilizando y ocupando menor espacio y cuya reconstrucción sea exacta.  Este tipo de algoritmo son usados para comprimir archivos donde no se puede permitir perder ninguna porción de información, tales como textos, imágenes y sonido.  Modelo estático: lee y codifica utilizando la probabilidad de aparición de cada carácter, representado de forma simple en una tabla estática de probabilidades  Modelo basado en diccionarios: usa código simple para reemplazar cadenas de símbolos por una valor de un diccionario
  • 5.  Se diferencia de los demás métodos porque construye sus códigos mediante un árbol de código y se lo recorre desde lo más profundo hacia arriba.
  • 6.  Es un algoritmo desarrollado en 1952 por David A. Huffman y es utilizado para la construcción de códigos Huffman.  Toma un alfabeto de n-caracteres, los asocia junto a sus frecuencias de aparición.  El algoritmo de Huffman crea un árbol binario donde cada carácter es una hoja y se construye de tal forma que siguiéndolo desde la raíz a cada una de las hojas se obtiene el código de Huffman asociado a él.
  • 7. 1. Se crea varios árboles, uno por cada carácter del alfabeto, consistiendo cada uno de los árboles en nodo sin hijos y etiquetado cada uno con su carácter y con su frecuencia de aparición. 2. Se toman los dos árboles de menor frecuencia y se unen al nuevo árbol. La etiqueta de la raíz será la suma de las frecuencias de las raíces de los dos sub- árboles que se unen, y cada uno de estos árboles será un hijo del nuevo árbol. También se etiquetan las dos ramas del nuevo árbol: con un 1 la de la izquierda y un 0 la de la derecha. 3. Se repite el paso 2 hasta que sólo quede un árbol.
  • 8.  a4 se combina con a5 y ambas se sustituyen por el símbolo a45, cuya probabilidad es de 0,2.  Ahora quedan cuatro símbolos disponibles: a1—con una probabilidad de 0,4— y a2, a3, a45 —con probabilidades de 0,2 cada uno—. Se seleccionan de forma arbitraria a3 y a45, combinándolos y reemplazándolos por el símbolo auxiliar a345 —cuya probabilidad es de 0,4—.  En este momento tenemos tres símbolos, a1, a2 y a345 —con probabilidades 0,4, 0,2 y 0,4, respectivamente—. Se seleccionan de forma arbitraria a2 y a345, combinándolos y reemplazándolos por el símbolo auxiliar a2345 —cuya probabilidad es de 0,6—.  Finalmente, combinamos los dos símbolos restantes, a1 y a2345, sustituyéndolos por a12345 —con una probabilidad de 1,0—.
  • 9. 1. Comenzar con un código vacío. 2. Iniciar el recorrido del árbol en la hoja asociado al símbolo. 3. Comenzar un recorrido del árbol hacia arriba. 4. Cada vez que se suba de nivel, añadir al código la etiqueta de la rama que se ha recorrido (1 o 0). 5. Al llegar a la raíz, invertir el código. 6. El resultado es el código de Huffman.
  • 10. 1. Comenzar el recorrido del árbol desde la raíz. 2. Extraer el primer símbolo del código a descodificar 3. Descender por la rama etiquetada con ese símbolo. 4. Repetir desde el paso 2 hasta que se llegue a una hoja, que será el símbolo asociado al código.
  • 11. Para a1 la traducción 0 a2 10 a3 111 a4 1101 a5 1100
  • 12.  Trabaja en modo bloque, donde la cadena de datos se analiza y lee por bloques, y cada bloque es codificado por separado de la cadena.  Funciona bien tanto para imágenes, audio y texto  Produce compresión con resultados muy buenos, en algunos casos la compresión es de 1 bit por byte e inclusive mejor.  Comienza con una cadena S de n símbolos y la desorganiza, produciendo otra cadena L que debe satisfacer dos condiciones:  Cualquier región de L tenderá a tener una concentración de sólo unos pocos símbolos.  Es posible reconstruir la cadena original S a partir de L.
  • 13.  Matemáticamente, se resolverá a través de una permutación, y que una cadena de símbolos n tiene n! permutaciones.  El codificador de Burrows-Wheeler procede de la siguiente manera: 1. La cadena L es creada por el codificador como una permutación de S. El codificador también genera información adicional denotada por I y que será utilizada en el paso 3. 2. El codificador comprime L e I, y escribe los resultados en la cadena de salida. Este paso comienza típicamente con RLE, continua con la codificación mover al frente, y finalmente aplica la codificación de Huffman. 3. El decodificador lee la cadena de salida y la decodifica aplicando los mismos métodos que en el anterior paso, pero en orden inverso. El resultado es la cadena L y la variable I. NOTA: Ambas L e I son usadas por el decodificador para reconstruir la cadena original.
  • 14.  Usaremos la cadena swiss_miss.  Creamos una matriz de n x n, donde almacena la cadena S en la primera fila.  Seguida por n-1 copias de S, cada una desplazada cíclicamente un símbolo a la izquierda
  • 15.  A partir de esto la matriz se ordena lexicográficamente por filas, produciendo la matriz ordenada.  La permutación de L seleccionada por el codificador es la última columna de la matriz ordenada. La información necesaria para reconstruir S a partir de L es el número de la fila de cadena original en la matriz ordenada, que es nuestro ejemplo es 8, este número se almacena en I. 8
  • 16. El decodificador lee un flujo comprimido, lo descomprime utilizando Huffman y mover-al-frene y luego re-construye la cadena S a partir de la L descomprimida siguiendo estos pasos:  La primera columna de la matriz ordenada (columna F) se construye a partir de L.  Mientras ordena L, el decodificador prepara una matriz auxiliar T que muestra las relaciones entre los elementos de L y F. El primer elemento de T es 4 ya que el éste se encuentra en la posición 4 de F. El segundo elemento de T es 9, es decir que este se encontrara en la 9 posición de F, y así sucesivamente.  La cadena F ya no es necesaria. El decodificador utiliza L, I y T para reconstruir S de acuerdo con:
  • 17.
  • 18.  La utilización de RLE tiene sentido, pero solo como un primer paso. El paso principal de la compresión de L debe utilizar el método mover-al-frente.  Se inicializa A con una lista de los símbolos que aparecen en la cadena A = (_, i, m, s, w).  Para i = 0, …, n-1, se codifican el símbolo Li como el número de símbolos que le preceden en A, y luego se mueve el símbolo Li hasta el comienzo de A  Se combina los códigos del paso 2 en una lista C, que se comprime aún más utilizando Huffman o la codificación aritmética.
  • 19.  El algoritmo de Huffman tiene muchas aplicaciones y es uno de los algoritmos más importantes dentro la compresión de datos.  El algoritmo de Burrows-Wheeler es un algoritmo diferente a los tradiciones porque éste trabaja en bloques, pero aún así necesita de más algoritmos para que su funcionamiento sea eficiente.  El algoritmo de Burrows-Wheeler sirve particularmente para cadenas muy largas dando resultados muy buenos y se ha demostrado que en cadena de datos pequeñas resulta ineficiente.
  • 20.  [1]"Compresión de Burrows-Wheeler", Es.wikipedia.org, 2017. [Online]. Available: https://es.wikipedia.org/wiki/Compresi%C3%B3n_de_Burrows-Wheeler. [Accessed: 20- Jun- 2017].  [2]"Algoritmo de Huffman", Es.wikipedia.org, 2017. [Online]. Available: https://es.wikipedia.org/wiki/Algoritmo_de_Huffman. [Accessed: 20- Jun- 2017].  [3]"Codificación Huffman", Es.wikipedia.org, 2017. [Online]. Available: https://es.wikipedia.org/wiki/Codificaci%C3%B3n_Huffman. [Accessed: 20- Jun- 2017].  [4]Compresión de Datos La referencia completa, 4th ed. California, 2014.  [5]"Algoritmo de compresión sin pérdida", Es.wikipedia.org, 2017. [Online]. Available: https://es.wikipedia.org/wiki/Algoritmo_de_compresi%C3%B3n_sin_p%C3%A9rdida. [Accessed: 20- Jun- 2017].  [6]"Run-length encoding", Es.wikipedia.org, 2017. [Online]. Available: https://es.wikipedia.org/wiki/Run-length_encoding. [Accessed: 20- Jun- 2017].  [7]2017. [Online]. Available: http://ocw.udl.cat/enginyeria-i-arquitectura/codificacio-i-transport- de-la-infomacio/Contenidos/2/CompSinPerd.pdf. [Accessed: 20- Jun- 2017].
  • 21.  El código se encuentra en los siguientes links:  Huffman: https://github.com/edwinnm/Codificaci-n-de-Huffman  Burrows-Wheeler: https://github.com/edwinnm/Burrows-Wheeler