Compresion Flashcards

Se omite: - entropia conjunta y condicional - informacion mutua - entropia relativa - entropia cruzada

1
Q

Defina complejidad de Kolmogorov

A

complejidad de Kolmogorov: K(x)

Sea x un string, K(x) es igual a la cantidad de bits minimos que debe tener un programa que genera x.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Defina dato aleatorio

A

Sea x un string, se dice que x es random/aleatorio si y sólo si K(x) = |x|. Es decir que la complejidad del string es
igual a la longitud del mismo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Propiedades de complejidad de Kolmogorov

A
  1. K(x) ≥ 0
  2. K(x) ≤ |x|
  3. K(xy) ≤ K(x) + K(y)
  4. K(xy) ≥ K(x), K(y)
  5. K(xy) = K(yx)
  6. K(xx) = K(x)
  7. K(xy) + K(z) ≤ K(xz) + K(yz)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Defina Distancia de Kolmogorov

A

KD(x, y) = K(xy) − min{K(x), K(y)}

```
La normalizada:
N KD(x, y) =
K(xy) − min{K(x), K(y)})/
(max{K(x), K(y)}
~~~

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Por que se dice que K(x) es intractable?

A

Suponiendo que K(x) es computable, se quiere un programa que genere todos los strings posibles en binario (0,1,10,11,100,101,…) hasta encontrar el primero cuya complejidad es de 200Mb para poder imprimirlo y luego
finalizar el programa.

El programa ocupa menos de 200Mb y es capaz de generar un string x cuya complejidad es mayor o igual a 200Mb y esto es un absurdo porque tendrı́amos dos
complejidades para el mismo string x (una que es menor a 200Mb, y otra que es mayor o igual a 200Mb). En consecuencia, queda demostrado que K(x) no puede existir ya que si existiera entonces nuestro este programa invalida su definición.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Como se soluciona el hecho de que K(x) es intractable?

A

Como K(x) es la longitud en bits del programa mas chico que genera x podemos aproximar K(x) por el mejor resultado posible de aplicar un compresor de datos a x, es decir, C(x). De esta forma, el mejor compresor posible existente hasta la fecha, permite determinar la complejidad de un string. Todas las propiedades de K(x) se mantienen con algunos cuidados especiales para C(x). En consecuencia, se puede definir la Distancia Normalizada de Compresión.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Defina Distancia normalizada de compresion.

A
N CD(x, y) =
C(xy) − min{C(x), C(y)}/
max{C(x), C(y)}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Puede un archivo comprimirse por partes? Por que?

A

cuando se comprimen dos archivos concatenados x e y, los compresores aprenden del archivo x y en base a lo aprendido podrán comprimir bien o mal al archivo y. El problema que se presenta es que esto no siempre es cierto. Por ejemplo, cuando se usan compresores que trabajan por bloques, el compresor puede no aprender lo suficiente del archivo x antes de comprimir y entonces el cálculo de NCD podrı́a verse afectado. En principio se exigirá que para calcular NCD el compresor no trabaje de a bloques sino que trabaje procesando a los archivos en su totalidad.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Que es la entropia? Que representa? En que unidades se mide?

A

La entropia es una forma basada en probabilidades de medir la complejidad de un string o archivo, es decir, otra forma de aproximar a K(x).

La entropı́a puede entenderse de diferentes formas. Por un lado es una longitud promedio, es decir la longitud promedio en bits de los códigos usados para representar un mensaje. Por otro lado, es una medida de la cantidad de información representada en la fuente. Si queremos representar a una fuente en la menor longitud posible tenemos que minimizar su entropı́a.

Se mide en bits.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Como se define matematicamente la entropia?

A

La entropia se calcula como la sumatoria de productos entre la probabilidad y longitud de cada uno de los codigos posibles.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Cual es la longitud optima de un codigo?

A

l_i = - log2(p_i)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Es posible que un compresor pueda comprimir cualquier archivo? Justifique

A

Es sencillo demostrar que no existe un compresor que pueda comprimir cualquier tipo de datos y esto se logra mediante el llamado ”counting argument” o ”pigeonhole principle”. Sin perder generalidad, si existieran solo archivos de 3 bits entonces solo habrı́a 8 archivos posibles: 000,001,010,011,100,101,110 y 111. Si un compresor comprime cualquier archivo entonces podrı́a comprimir cada uno de estos archivos en 2 bits, pero solo existen 4 archivos de 2 bits: 00,01,10 y 11. Por lo tanto, dos o mas de los archivos de 3 bits se comprimen en el mismo archivo de 2 bits lo cual implica que será imposible descomprimirlos. Este argumento se extiende fácilmente a ”n” bits que es lo mismo que pensar en cualquier archivo. Existen menos archivos comprimidos que archivos posibles por lo tanto no puede haber una relación 1 a 1 entre ambos lo cual demuestra que ciertos archivos no podrı́an descomprimirse.

Otra forma simple de entender el counting argument es pensar que un algoritmo capaz de comprimir cualquier archivo puede aplicarse recursivamente a la salida del compresor de forma tal que cualquier archivo podrá quedar comprimido finalmente en un bit lo cual es totalmente absurdo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

En que se basa la compresion estadistica?

A

Se basa en, para un archivo, calcular cuantas veces aparece cada caracter.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Describa el problema de frecuenci cero.

A

Para introducir a este problema se puede analizar el siguiente ejemplo: al utilizar un modelo de orden 1 como el Huffman estático, cada caracter se codifica en función del anterior. Si el caracter anterior fuera una Q entonces es muy probable que el próximo sea una U. La primera vez que se da esta situación la probabilidad de la U será 1/256. Suponiendo que siempre luego de Q viene otra U, la segunda vez que aparezca una U su probabilidad será 2/257, luego 3/258, 4/259, etc. Dicho esto, se quiere remarcar que el compresor puede tardar mucho tiempo en aprender que la U tiene una alta probabilidad de ocurriencia en el contexto de la Q. A este problema se lo conoce como el problema de frecuencia cero ya que su origen se debe a que en el contexto Q no se puede tener caracteres con frecuencia 0 ya que si estos ocurrieran no se podrı́an representar. Al inicializar todo en frecuencia 1, el compresor necesitarı́a de un archivo muy grande para tener tiempo de aprender y comprimir eficientemente. Es decir que tanto los métodos estáticos como los dinámicos necesitan de archivos cada vez mas grandes para funcionar con un orden cada vez mayor.

El problema de frecuencia cero se puede resolver en compresores dinámicos de la forma en que lo hace el algoritmo PPMC que se verá más adelante luego de introducir el concepto de compresión aritmética.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Cual es la idea de la Compresion aritmetica?

A

La idea es aproxima lo mejor posible lal ong. estimada por la entropia.

Un compresor aritmético es capaz de comprimir los mensajes de una fuente en una cantidad no-entera de bits y gracias a esta capacidad los compresores aritméticos son óptimos dada una cierta distribución de probabilidades siendo los que mejor aproximan a la longitud ideal de los códigos que es − log_2 P_i .

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Que es lo que determina la long. del archivo comprimido en un compresor aritmetico?

A

Un compresor aritmético transforma un archivo en un número en el intervalo [0, 1), la precisión de este número determina la longitud del archivo comprimido.

17
Q

Que es lo que determina la long. del archivo comprimido en un compresor aritmetico?

A

Un compresor aritmético transforma un archivo en un número en el intervalo [0, 1), la precisión de este número determina la longitud del archivo comprimido.

18
Q

Caracteristicas de PPM (Prediction by partial matching).

A
  • usa varios modelos a la vez, siendo el primero el modelo -1, luego el 0, 1, …
  • es necesario fijar un nivel maximo.
  • el modelo de orden -1 tiene todos los caracteres posibles mas el EOF, y nunca se actualiza.
  • la frecuancia de ESC es igual a la cantidad de caracteres que hay en el modelo.
  • solamente se actualizan los modelos que se utilizan y esto se hace luego de haber comprimido cada caracter.
  • es uno de los que mas comprime (suele ser el ganador para textos).
19
Q

En que es imbatible la flia. LZ de compresores? Por que es importante?

A

En descompresion. Esto es muy importante porque uan vez que los datos estan comprimidos, su lectura es tan eficiente que puede llegar a casi no haber diferencia entre leerlo comprimido o descomprimido, lo que significa que en lectura no hay degradacion de performance en tiempo de lectura, teniendo el beneficio de haber optimizado el aspecto espacial de almacenamiento.

20
Q

Explique LZ77.

A

En LZSS se usa un bit para distinguir repeticiones de no-repeticiones. Cada vez que se comprime un caracter del archivo se busca hacia atrás hasta una cierta cantidad máxima de caracteres llamada ventana en busca de repeticiones. Si se encuentra una repetición entonces se emite un bit en 1 seguido de la posición de la repetición en la ventana y la longitud de la misma. Cuando no se encuentran repeticiones se emite un bit en 0 y luego el caracter en cuestión en 8 bits (es decir, sin comprimir).

21
Q

Es LZ77 adecuado para aproximar la complejidad de un string?

A

Notar que las limitaciones en el tamaño de la máxima longitud representable y el tamaño de la ventana hacen que LZSS no sea un compresor adecuado para aproximarnos a la complejidad de un string y por lo tanto no es usable en el cálculo de la distancia normalizada de compresión. (LZMA sı́ lo es y pertenece a la misma familia que LZSS).

22
Q

Que parametros hay que ajustar en LZ77?

A

En principio entonces hay que fijar dos parámetros: la longitud de la ventana en la que se buscan las repeticiones y la longitud mı́nima de un match (podrı́a no tener sentido buscar matches de longitud 1).

23
Q

Explique lazy parsing en LZ77 y sus consecuencias.

A

El mecanismo de parsing de LZSS es de tipo ”lazy” es decir que siempre que se encuentra un match lo reemplazamos por un offset y una longitud. Curiosamente esto no siempre es óptimo ya que podrı́a ser mejor ignorar un match para luego poder encontrar un match mas largo.

24
Q

Explique Deflate.

A

Tambien conocido como LzHuf, deflate modela el archivo de igual forma que LZ77, o sea que se basa en matches, y codifica las posiciones y tamanos de los matches.

La codificación del modelo es lo que cambia en DEFLATE. Para empezar se utiliza un árbol de Huffman dinámico en donde conviven los 256 caracteres posibles y además todas las longitudes posibles desde LMIN hasta LMAX. Este árbol se utilizará para codificar los caracteres literales cuando no hay un match y para las longitudes cuando hay un match. Cada vez que se emite un caracter literal hay que actualizar el árbol incrementando su frecuencia. Cuando hay un match se emite su longitud en base al código de la misma en el árbol y a continuación su posición en la ventana en una cierta cantidad de bits que se puede fijar mediante otro árbol de Huffman o bien de forma fija. Luego, se actualiza la frecuencia de la longitud en el árbol y se sigue comprimiendo el resto de los caracteres.

25
Q

Que ventajas trae Deflate respecto de LZ77?

A
  • Esto introduce mejoras respecto al LZSS: en primer lugar ya no hace falta distinguir con un bit en 0 o 1 si se trata de un match o no. Cuando se emite un caracter no hay match y cuando se emite una longitud hay match. El de- scompresor sabe que si descomprime una longitud lo siguiente será una posición mientras que si descomprime un literal lo siguiente es o bien un literal o bien una longitud (mismo árbol).
  • Una segunda ventaja es que se puede aprender cuáles son los caracteres literales mas frecuentes en el archivo y usar menos bits para los mismos. También se puede aprender cuáles son las longitudes mas frecuentes en los matches y usar menos bits para estas longitudes que para las que son no tan comunes. Esto implica un importante ahorro de bits que termina generando un mejor nivel de compresión que LZSS.
26
Q

Explique LZW, tambien concido como LZ78.

A

La idea principal de LZW es la misma que la de todos los algoritmos de la familia LZ: reemplazar secuencias previamente observadas por un código que las represente. LZW logra esto mediante la utilización de una tabla o diccionario en donde va almacenando las secuencias previamente observadas en el archivo. De esta forma cuando encuentra alguna secuencia que ya vio simplemente la reemplaza por el ı́ndice de la misma en el diccionario o tabla.

Inicialmente LZW comienza con una tabla de 512 posiciones en donde las primeras 256 entradas ya están llenas con las 256 combinaciones posibles de 8 bits y las restantes 256 posiciones están vacı́as. Cada posición de la tabla se representa lógicamente mediante 9 bits.

27
Q

Que pasa en LZW cuando la tabla se completa?

A

Cuando la tabla se completa, el compresor duplica la tabla y comienza a emitir códigos de 10 bits en lugar de 9. Este proceso se repite tantas veces como sea necesario.

Puede prestar a confusión en qué momento el compresor comienza a emitir sı́mbolos de 10 bits. Esto puede ocurrir o bien cuando se llena la tabla o bien un sı́mbolo más adelante. Se pueden adoptar las siguientes dos polı́ticas:

  1. Duplicar la tabla y emitir el próximo código en 10 bits
  2. Emitir el próximo código en 9 bits y luego duplicar la tabla para agregar el sı́mbolo nuevo

No hay un standard por lo que lamentablemente muchos compresores y descompresores LZW necesitan algún tipo de flag para indicar cuál de estas dos polı́ticas han usado. El formato PDF usa LZW y admite ambas polı́ticas de actualización del diccionario mediante un flag.

28
Q

Explicar mecanismo de clearing en LZW.

A

Se ha visto que en LZW a medida que se agregan strings en el diccionario se emiten cada vez mas bits. Llega un punto en el cual el nivel del compresor puede ser malo, esto se debe a que tiene en la tabla muchos strings que ya no vuelven a ocurrir en el archivo y por lo tanto está generando códigos mucho mas grandes de lo necesario. Cuando el compresor detecta que el nivel de compresión (bits x byte) no es bueno puede usar un sı́mbolo especial para avisarle al descompresor que tiene que hacer una purga de la tabla. Para esto se puede, por ejemplo, dedicar los sı́mbolos 256,257,etc empezando a guardar los strings a partir del 258 o mas adelante, todo depende de cuantos ”comandos” querramos tener a nuestra disposición en el compresor. Algunos de estos comandos pueden ser por ejemplo:

  1. Eliminar todas las tablas, volver a 9 bits
  2. Eliminar de las tablas los sı́mbolos menos usados para pasar a 1 bit menos
  3. Eliminar de las tablas todos los sı́mbolos que se emitieron menos de x veces (x sigue a continuación en ”m” bits)
29
Q

Donde yace la suboptimalidad de la codificacion en LZW?

A

Como hemos mencionado que comprimir es modelar y codificar debemos notar que en LZW la codificación no es óptima, esto es muy fácil de demostrar puesto que al empezar con códigos de 9 bits podemos emitir 512 sı́mbolos diferentes, de los cuales solo 256 son posibles, luego solo 257 son posibles y ası́ sucesivamente, es decir que existen códigos que el compresor nunca puede emitir. Por ejemplo, el segundo código emitido puede ser a lo sumo 256 pero nunca 257 o superior. El descompresor también sabe esto pero sin embargo no hay forma de solucionarlo. Estos códigos imposibles hacen a la ineficiencia de LZW ya que no cualquier archivo es algo que se pueda descomprimir con LZW.

Una forma de solucionar esto es usando compresión aritmética, en donde al principio tenemos 256 elementos en la tabla, todos equiprobables y luego al agregar el primer string al diccionario pasamos a tener 257 sı́mbolos y ası́ sucesivamente. La codificación aritmética como sabemos solo necesita −log 2 (1/257) = 8.00562454 bits que es mucho menos que los 9 bits que emitirı́amos en la versión tradicional de LZW.

30
Q

Es posible estimar la complejidad de un string mediante LZ? Como?

A

Es posible usar LZ78 para estimar la complejidad de un string[60] desde el punto de vista de este compresor. La complejidad se define simplemente como la cantidad de patrones diferentes que ocurren en el string. Por ejemplo si tenemos el string 010101011 empezamos con el primer bit 0 y lo agregamos a la tabla. El segundo bit 1 no está en la tabla por lo que lo agregamos. Luego leemos 0 que ya fue visto ası́ que leemos otro bit: 01 no está en la tabla y lo agregamos. De esta forma continuamos y nos queda algo de tipo: 0|1|01|010|11| con lo cual estimarı́amos que la complejidad LZ de este string es 5.

Es evidente que en un string o archivo en donde hay muchos patrones repetidos conllevará a tener una complejidad baja mientras que en un string o archivo completamente aleatorio eventualmente se tendrı́a una gran cantidad de patrones diferentes.

Es posible usar esto para calcular la entropı́a de acuerdo a un compresor LZ simplemente calculando la probabilidad de cada patrón que es la cantidad de veces que el mismo ocurre en el archivo dividido la cantidad total de patrones encontrados.

En un archivo aleatorio, se obtendrı́a algo del estilo 0|1|01|10|11|00|001|100|010|011|101. En este caso, la frecuencia de todos los patrones es 1 y la cantidad total de patrones depende de la longitud del archivo. Se tendrán siempre 2 patrones de longitud 1, 4 patrones de longitud 2, 8 patrones de longitud 3, etc. Eventualmente se puede probar que para un archivo random la entropı́a de acuerdo a la complejidad LZ es igual a la entropı́a simplemente calculando la probabilidad de cada bit es decir igual a la longitud del archivo mismo.

31
Q

Explique Snappy.

A

En Snappy el primer byte de cada bloque indica en sus primeros 2 bits el tipo de dato que sigue a continuación:

00 = literales
01 = 1 byte match
10 = 2 byte match

Literales
Cuando se indican literales (primeros dos bits =00) los siguientes 6 bits se usan
para la longitud de los mismos de la siguiente forma:
0 a 59: Cantidad de literales 1 a 60
60: La cantidad de literales se indica en el proximo byte.
61: La cantidad de literales se indica en los proximos dos bytes.
62: La cantidad de literales se indica en los proximos tres bytes.
63: La cantidad de literales se indica en los proximos cuatro bytes.

Matches
Los matches de longitud 4 a 11 con offsets 1 a 2047 se almacenan usando 1 byte extra. La longitud del match menos 4 se almacena en los primeros 3 bits de los 6 bits que sobran en el byte de control. Los restantes 3 bits y los 8 bits del byte siguiente se usan para almacenar el offset.

32
Q

Explique LZMA.

A

En cada paso LZMA puede generar 7 códigos diferentes, a saber:

  • literal
  • match: es un match en el estilo de LZSS indicando longitud (len) y distancia en el buffer al mismo.
  • shortrep: es un match de longitud 1 cuya distancia es igual a la distancia anterior emitida
  • longrep[0]: es un match cuya longitud se indica y cuya distancia es igual a la i-ésima distancia anteriormente emitida, es decir la última para LONGREP[0], la ante-última para LONGREP1 y ası́ sucesivamente.
  • longrep[1]
  • longrep[2]
  • longrep[3]
33
Q

Que es un archivo localizado?

A

Un archivo está localizado cuando en determinadas zonas del mismo hay preponderancia de un cierto conjunto de caracteres.

34
Q

Explicar transformacion de Burrows-Wheeler.

A

[ver ejemplo en apunte]

35
Q

Desarrolle archivos localizados y MTF.

A

[ver ejemplo en apunte]

36
Q

Explicar Block sorting.

A

Los pasos a seguir en block sorting son los siguientes:

  • aplicar transformacio de Burrow-Wheeler
  • Aplicar MTF
  • aplicar algun compresor aritmetico.
37
Q

Explique PAQ.

A

PAQ es un compresor aritmético que funciona bit a bit, es decir que por cada bit a comprimir del archivo PAQ estima la probabilidad de que dicho bit sea 1 o 0 y subdivide el intervalo actual de acuerdo a dichas probabilidades quedándose con el intervalo que le corresponde al bit leı́do del archivo. Cuanto mejor sea capaz PAQ de estimar las probabilidades menos bits va a necesitar para representar la precisión necesaria para el siguiente intervalo y por lo tanto el archivo comprimido va a ser mas pequeño.

Para llegar a la probabilidad del 1 y el 0 PAQ va a combinar la predicción de varios modelos que se detallarán luego. Suponiendo que tenemos ”n” modelos y que cada uno de ellos calcula la probabilidad de que el próximo bit sea un 1, lo que PAQ necesita es encontrar pesos de forma tal que la probabilidad final de que el bit sea 1 surja del promedio ponderado de las probabilidades de todos los modelos utilizados. Estos pesos en PAQ surgen de una red neuronal. El funcionamiento es en realidad muy simple, todos los bits anteriores y las predicciones de los modelos sirven como set de entrenamiento.