Tecnología

Inicio

Compresión y descompresión Algoritmos

Compresión y descompresión Algoritmos


programas y archivos informáticos grandes a menudo contienen demasiados datos para transmitir con facilidad o guardarlos. Para resolver este problema, los programadores han llegado con algoritmos o ingeniosos sistemas para comprimir y descomprimir archivos. Se utilizan para disminuir el tamaño de la imagen, vídeo, software y otros archivos para que puedan ser más fácilmente utilizable.

Compresión

Un algoritmo de compresión necesita específicamente un diccionario de código y un búfer de salida que es 50 por ciento mayor que los datos. Los datos se igualó y luego se redujo hasta su forma más simplificada. Por ejemplo, si usted tiene una pieza de 32 bytes de código que puede coincidir con un byte 16, entonces usted es capaz de reducir la memoria a la mitad. A las pruebas de compresión de archivos para simplificar toda su base de código.

Descompresión

Descompresión es un poco más simple que la compresión, ya que no requiere una posición de memoria específica. Cuando se descomprime simplemente determinar si los datos son un partido o literal. Si se trata de una coincidencia, la descompresión es innecesario y se copian los datos de la última memoria intermedia. Si se trata de un literal, a continuación, se codifica la diferencia al buffer de salida.

código de compresión

Un algoritmo para comprimir datos utiliza punteros para identificar la ubicación de la memoria, que coincida con los datos y luego restar el código adicional una vez que se comprime. Por lo que el "si - los demás" función algorítmica puede aparecer como sigue:

si (valid_pointer (partido) && && partido == entrada + 1) == partido ((entrada + 1)) {

if (literal < input)
OutputLiteral(literal, input - literal);

}
más

++input;

Código de descompresión

Un código de descompresión por el contrario simplemente copia de código literal de manera que pueda ser reproducida en un búfer de salida en el momento apropiado. A continuación, resta la memoria adicional del programa. La función de "si-mientras que" podría aparecer como sigue:

mientras que (entrada <final) {
si (* Entrada y 0x80) {// partido

length = DecodeLength(&amp;input);
offset = DecodeOffset(&amp;input); // same algorithm as DecodeLength
while (length-- > 0)
{
*output = *(output - offset);
++output;