2011-05-24 23 views
11

Es verano, por lo que he decidido encargarme de escribir un programa de compresión de datos, preferiblemente en código C. Tengo una comprensión decente de principiantes de cómo funciona la compresión. Solo tengo algunas preguntas:Novicio de programación: ¿Cómo programar mi propio algoritmo de compresión de datos?

1) ¿Sería c un lenguaje de programación adecuado para realizar esta tarea?
2) ¿Debería estar trabajando en byte con el archivo de entrada? ¿O a nivel binario de alguna manera?

Si alguien pudiera darme un empujón en la dirección correcta, realmente lo agradecería. Sin embargo, me gustaría codificar esto yo mismo, y no usar una biblioteca de compresión preexistente ni nada de eso.

+8

@Doug chamberlain Es divertido y educativo. ¿Qué está mal con eso? – mwcz

+1

Eche un vistazo al algoritmo para la codificación Huffman http://en.wikipedia.org/wiki/Huffman_coding Esto debería ser un buen algoritmo de ejemplo para ayudarlo a comenzar. –

Respuesta

3

1) ¿Sería c un lenguaje de programación adecuado para realizar esta tarea?

Sí.

2) ¿Debería estar trabajando en byte con el archivo de entrada? ¿O a nivel binario de alguna manera?

Son lo mismo, por lo que la pregunta no tiene sentido.

No utilice una biblioteca de compresión preexistente

Se puede utilizar un algoritmo de compresión preexistente? Hay docenas y el "algoritmo de compresión", cuando se utiliza con Google, revelará una gran cantidad de información útil.

+0

Me refería a trabajar con bytes, en lugar de gestionar de algún modo grupos de bits más pequeños en un nivel inferior. He leído sobre la compresión Huffman y parece funcionar con bits individuales a menos que lo entiendo mal. – araisbec

+1

@araisbec: Los bits siempre se recopilan en bytes. No hay nada más detallado que los bytes. Tu algoritmo puede estar manipulando bits; pero lo hace accediendo, modificando y almacenando bytes enteros por valor de bits. –

3
  1. C es una gran opción para escribir un programa de compresión. Aunque puedes usar muchos otros idiomas también.

  2. Su computadora probablemente no puede direccionar directamente unidades de memoria más pequeñas que un byte (prácticamente por definición), por lo que trabajar con bytes es probablemente una buena opción. Parte de cómo trabajas con los datos se verá afectado por el algoritmo de compresión que elijas.

¡Buena suerte!

4

Puedes comenzar por mirar Huffman Encoding. Una gran cantidad de informática classes implementar eso como un proyecto por lo que debe ser manejable. C sería apropiado para la codificación Huffman, pero podría ser más fácil hacerlo primero en un lenguaje de nivel superior para que usted entienda los conceptos. Hay diapositivas, sugerencias y un proyecto de ejemplo available en Java para un proyecto de nivel de maestría en la Universidad de Pennsylvania (busque "huff" en esa página).

3
  1. Sí, C es muy adecuado para este tipo de trabajo.

  2. Si trabaja con bytes o bits dependerá del algoritmo que decida implementar. Por ejemplo, la codificación de Huffman está inherentemente orientada a bits, mientras que muchos otros algoritmos de compresión no lo son.

3

para responder a sus preguntas:

  1. C es adecuado.
  2. Depende del algoritmo o de la forma en que piense en "compresión".

Mi opinión será, en primer lugar decidir si desea hacer una lossless compression o una lossy compression, a continuación, elegir un algoritmo de implementar. Aquí están algunas sugerencias:

sin pérdidas Para el uno, algunos son muy intuitivo, como la codificación run-length, por ejemplo, si hay 11 a s y 5 b s, que acaba de codificar como 11a5b. Algunos algoritmos usan dictionary, consulte LZW encoding. Finalmente, recomiendo la codificación Huffman ya que es muy sencilla, simple y útil para adquirir experiencia en el algoritmo de aprendizaje (para su propósito educativo).

Para los con pérdida, Discrete Fourier Transform (DFT), o wavelet, se utiliza en compresión JPEG. Esto es útil para comprender la compresión multimedia.

Wikipedia page es un buen punto de partida.

Cuestiones relacionadas