Se trata de implementar el algoritmo de compresion 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 aparicion en el archivo o texto a comprimir (en este caso solo es para archivos y no tan largos ) se encontraran a mayor altura.
Para generar la lista se parte del primer nodo (menor) y luego se formara otro nodo entre la suma de las frecuencias del nodo actual y el que se encuentra a su derecha, tomando como raiz el nodo que se a creado y que posee la frecuencia resultante de los 2 nodos. A la izquierda se situara el nodo menor y a la derecha el nodo mayor. Cabe decir que el nodo raiz formado con los 2 nodos anteriores hace parte todavia de la lista enlazada, es decir se ira trabajando con los resultados que se vayan obteniendo, y luego de esto el nodo resultante es puesto en la posicion que le consierna respetando el orden, asi:
Al finalizar el proceso el arbol para estas 3 letras "ABC" con sus respectivas frecuencias seria algo como esto:
Y con este arbol se procede a generar los codigos huffman, que son explicados en el link que puse .
Pues bien solo falta decir que la tabla de codigos huffman se le añade al archivo resultante sin tratarla en lo mas minimo, es decir primero se escribe el byte que representa la longitud de la tabla, y luego el byte de la letra con mas frecuencia seguido de su frecuencia y asi sucesivamente hasta la ultima. Tambien se le añadieron 3 o 4 bytes para coordinar el tamaño y extension del archivo original sin comprimir estos bytes, por lo cual, el que quiera ocuparse de insertar la tabla de codigos con el menor tamaño posible de bytes bienvenido sea .
Por ultimo debo decir que el programa no es util para archivos de gran tamaño, ya que como bien 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 enloquescan probandolo con archivos de mas de 1 Mb , sepan que es 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 prgreso y cosas asi .
El fuente trae su respectiva documentacion así como el diagrama de clases del mismo.
Link: http://www.mediafire.com/?dbfzqjzm4mz
Espero les sirva de algo el fuente ya cualquier duda no duden en comentarla .
Salu2
EDITADO