Después de unos días sin publicar he vuelto otra vez y quiero mostrar esta vez una de las tareas que nos pusieron este semestre en la universidad programando en java.
Se trata de implementar el algoritmo de compresión Huffman, para quien no sepa de que se trata, en este link se explica que es esto, pero para ahondar un poco les cuento que se trata primero de generar una lista enlazada con los bytes del archivo y sus frecuencias ordenada de menor a mayor y luego con esta se procede a formar un arbol binario de frecuencias donde los bytes que tengan mayor aparición en el archivo o texto a comprimir (en este caso solo es para archivos y no tan largos :P) se encontraran a mayor altura.
La información de como funciona la generación del árbol binario y los códigos Huffman la encontrarán en el link anterior muy bien explicada.
Pues bien solo falta decir que la tabla de códigos huffman generados se le añade al archivo resultante para poder realizar el proceso de descompresión del archivo, para ello, escribimos el byte que representa la longitud de la tabla, y luego el byte de la letra con mas frecuencia seguido de su frecuencia y así sucesivamente hasta la ultima. También se le añadieron 3 o 4 bytes para coordinar el tamaño y extensión del archivo original sin comprimir estos bytes, por lo cual, el que quiera ocuparse de insertar la tabla de códigos con el menor tamaño posible de bytes bienvenido sea :D
Por ultimo debo decir que el programa no es útil para archivos de gran tamaño, ya que el algoritmo huffman es eficiente cuando se poseen frecuencias mayores de un mismo byte y hay gran diferencia entre las frecuencias de otros bytes, por eso no quiero que se vuelvan locos testeandolo con archivos de mas de 1 Mb, aunque si funciona de maravilla, bienvenido jeje, aunque la idea era solo mostrar como funciona este algoritmo, por lo cual lo pueden probar con archivos de 100kb o algo así, que posea textos con caracteres repetitivos.
Lo que falto eso si fue invertirle mas tiempo a la GUI que esta muy tosca, a falta de una barra de progreso y cosas así.
El fuente trae su respectiva documentación así como el diagrama de clases del mismo.
Espero les sirva de algo el fuente y a cualquier duda no duden en comentarla.
Comentarios
cualquier cosa mi usuario de twitter es @exactlimon
- att david antonio mora
Decaptcha