2011-04-06 26 views
6

Quiero hacer mi propio programa de compresión de archivos de texto. No sé mucho sobre programación C++, pero aprendí todos los conceptos básicos y escribir/leer un archivo. He buscado mucho en google sobre compresión y he visto muchos tipos diferentes de métodos para comprimir un archivo como LZW y Huffman. El problema es que la mayoría de ellos no tienen un código fuente, o tienen uno muy complicado. Quiero preguntar si conoces alguna buena página web donde pueda aprender y hacer un programa de compresión yo mismo?Compresión de archivos con C++

EDIT: Dejaré este tema abierto un poco más, ya que planeo estudiar esto los próximos días, y si tengo alguna pregunta, se los preguntaré aquí.

+2

Use o lea el código de zlib: http://zlib.net/ para un buen comienzo.este es un problema muy difícil. – Horus

+2

¿Desea escribir el suyo propio, pero desea comenzar con una implementación de código fuente del algoritmo de compresión en lugar de implementarlo usted mismo a partir de una descripción de algoritmo? – Rup

Respuesta

7

La mayoría de los algoritmos son bastante complejos. Pero todos tienen en común que están tomando datos que se repiten y solo los almacenan una vez y tienen un sistema de saber cómo descomprimirlos (colocando los segmentos repetidos en su lugar)

Aquí hay un ejemplo simple que puedes probar para implementar.

Tenemos este archivo de datos

XXXXFGGGJJ

DDDDDDDDAA

XXXXFGGGJJ

Aquí tenemos caracteres que se repiten y dos líneas que se repiten. Entonces, podría comenzar por encontrar una forma de reducir el tamaño del archivo.

Aquí hay un algoritmo de compresión simple.

4XF3G2J

8D2A

4XF3G2J

Así que tenemos 4 de X, uno de F, G, etc. 3 de

+2

¡Codificación de longitud de ejecución! Funciona bien para imágenes con muchos colores uniformes (fue utilizado por IFF-ILBM y BMP), pero no es útil para texto, dado que rara vez tiene más de dos ocurrencias consecutivas del mismo carácter. – EboMike

+3

Sí, pero un gran ejemplo para comenzar :) –

+0

RLE es probablemente el mejor algoritmo de compresión para empezar, ya que es muy simple (puede escribirlo en una tarde). – ssube

8

Puede probar este page que contiene un recorrido claro de los conceptos básicos de compresión y los primeros principios.

+1

Ese es un buen artículo. – Mat

3

La compresión no es la tarea más fácil. Tomé una clase de la universidad para aprender sobre algoritmos de compresión como LZW y Huffman, y puedo decirte que no son tan fáciles. Si C++ es tu primer idioma y estás comenzando a este tipo de cosas, no recomendaría intentar escribir tu propio algoritmo de clasificación por el momento. Si tiene más experiencia, entonces trataría de escribir la fuente sin que se le proporcione ningún código; esto demuestra que realmente entiende el algoritmo de compresión.

Así me enseñaron: el profesor explicó el algoritmo en términos muy amplios, y luego o bien lo implementamos (en Java, fíjate) o responderíamos preguntas sobre cómo se comportaría el algoritmo en determinadas circunstancias. Si pudiéramos hacer cualquiera de ellas, entonces realmente sabíamos el algoritmo, sin que él nos muestre ninguna fuente, es una buena habilidad para desarrollar;)