• No se han encontrado resultados

Compresión de Datos. Introducción

N/A
N/A
Protected

Academic year: 2021

Share "Compresión de Datos. Introducción"

Copied!
207
0
0

Texto completo

(1)

Compresión de Datos

(2)

Introducción

¿Por qué es importante conocer sobre Compresión?

(3)

FIUBA Organización de Datos - Curso Servetto 3

¿Por qué es importante conocer

sobre Compresión?

●Cada vez más información se maneja en forma

digital (Redes Sociales, digitalización de documentos).

●Cada vez se necesita más capacidad de

almacenamiento y transmisión de información (cloud computing)

●Cada vez se requiere un mejor uso de los recursos

(4)

FIUBA Organización de Datos - Curso Servetto 4

¿Qué area de la ciencia aplica?

● La compresión como álgebra, análisis

matemático, probabilidad y estadística y algoritmia aplicados.

(5)

FIUBA Organización de Datos - Curso Servetto 5

¿Qué conceptos

involucra?Teoría de la

Información

● Información (definición epistemológica)

● Datos Interpretados.

● Datos

● Característica (dimensión) + Valor (medida)

(6)

FIUBA Organización de Datos - Curso Servetto 6

Teoría de la Información

● Información (definición cuantitativa)

● Teorema de Shannon 1948 – matemática

estadística.

● PROBABILIDAD = ENTROPIA

● Información (definición analítica)

● Teorema de muestreo de Nyquist-Shannon 1949 –

matemática analítica.

(7)

FIUBA Organización de Datos - Curso Servetto 7

Teoría de la Información

● Información (definición cuantitativa)

(8)

FIUBA Organización de Datos - Curso Servetto 8

Teoría de la información

(matemática estadística)

● Entropía (definición estadístical)

● Teorema Shannon (información promedio).

● Dentro de una fuente F, recibimos el símbolo Fi, que

tenía probabilidad pi

(9)

FIUBA Organización de Datos - Curso Servetto 9

Teoría de la información

(matemática analítica)

● Transformada (definición analítica)

● Teorema de muestreo de Nyquist-Shannon 1949 (se

puede representar con elementos discretos la misma información que con elementos contiuos).

● => 0111010101011100101

● No importa el medio de transmisión, la información

(10)

FIUBA Organización de Datos - Curso Servetto 10

Representación de los Datos

(códigos de representación).

● Dentro de un medio digital, podemos representar

la información de diferentes formas.

COLOR = ROJO (texto)

677976798232613282797479 (ASCII)

0010000000100011110100010100001100010100101000010100110000010100111101000101001000 1000110011101111100001101111001010 (Binario comprimido)

(11)

FIUBA

Organización de Datos - Curso Servetto

11

Representación de los Datos

(códigos de representación).

● La representación resultante puede ser

– sin pérdida de información (existe un proceso inverso que

reconstruye exactamente los datos originales – o la representación original).

– “HOLA” => 01011101010100100 => “HOLA”

– con pérdida (no se puede reconstruir con exactitud, pero

se tiene control del error cometido).

(12)

FIUBA Organización de Datos - Curso Servetto 12

Representación de los Datos

(códigos de representación).

● Clasificación por longitud

– Longitud Fija

● Los ASCII:

0011 1000 0011 1110

– Longitud Variable:

● Los UNICODE variables:

100 1110 110 101000

(13)

FIUBA Organización de Datos - Curso Servetto 13

Representación de los Datos

(códigos de representación).

● Clasificación por Instantaneidad

– Código instantáneo es aquel que no debe esperar a que

lleguen más códigos para identificarlo (es inconfundible).

00, 01,11

– Código no instantáneo es aquel que requiere de identificar

al código siguiente, o parte de aquél, para reconocerlo.

0, 01, 11  00111

(14)

FIUBA Organización de Datos - Curso Servetto 14

Representación de los Datos

(códigos de representación).

● Códigos Prefijos

– Son aquellos en donde un código no puede conformar el

comienzo de otro. ● No Prefijo A = 010111 C = 1000 B = 0100 D = 10 ● Prefijo A = 001111 C = 010 B = 0001 D = 10

– Los códigos prefijos son instantáneos.

(15)

FIUBA Organización de Datos - Curso Servetto 15

Representación de los Datos

(códigos de representación).

● Redundancia en la representación: – Códigos Tipo A: A = 00001 E = 00010 I = 00100 O = 01000 U = 10000 – Códigos Tipo B: A = 001 E = 011 I = 100 O = 101 U = 110

(16)

FIUBA Organización de Datos - Curso Servetto 16

Referencias

● David Salomon , “A Concise Introduction to Data

Compression ”, Springer-Verlag London Limited 2008 , pp 21-29.

(17)

FIUBA Organización de Datos - Curso Servetto 17

Algoritmos de Codificación

● Son algoritmos para modificar la representación

de una fuente.

● La representación resultante es sin pérdida de

información.

● Generan códigos prefijos.

● Para permitir la descompresión pueden necesitar

(18)

FIUBA Organización de Datos - Curso Servetto 18

Algoritmos de Codificación

● Clasificación según la forma de reconocer la

redundancia

● Estadístico

– Los códigos aproximan a la representación del teorema de

Shanon

● Run-Length

● Por Diccionario

– Los códigos se generan en base a la repetición de

(19)

FIUBA

Organización de Datos - Curso Servetto

19

Algoritmos de

Codificación(Cont.)

● Clasificación según la forma de reconocer la

redundancia

● Predictor

– Lleva un registro de lo ya procesado y aplica un algoritmo

para predecir (puede acertar o no) los que vendrán.

– Pueden utilizar la técnica de múltiples contextos: que utiliza

la probabilidad condicional, modificando la fórmula de Shanon, y aumenta las probabilidades de aparición, generando códigos más cortos (comprimiendo más).

● Híbrido

– Combina algoritmos de diferentes características

(20)

FIUBA Organización de Datos - Curso Servetto 20

Algoritmos de Codificación

● Clasificación según la forma de procesar los datos

● Estático

– Genera una sola vez los códigos y se producen reemplazos

idénticos en todo el proceso de compresión.

– En general necesita procesar dos veces a toda la fuente (o

archivo) para definir los códigos.

– Los códigos generados son los más cortos que el algoritmo

(21)

FIUBA Organización de Datos - Curso Servetto 21

Algoritmos de

Codificación(Cont.)

● Clasificación según la forma de procesar los datos

● Dinámico

– Los códigos se generan en base a un supuesto inicial que se

va modificando a medida que avanza la compresión.

– Genera códigos distintos y se producen reemplazos

diferentes dureante el proceso de compresión.

– Los códigos generados, en general, mejoran con el avance

(22)

FIUBA

Organización de Datos - Curso Servetto

22

Formas de Finalizar un Archivo

comprimido

● Conteo de Emisiones

● Se guarda un valor, que se lee al principio, para

identificar la cantidad de códigos generados. Entonces se procesa realizando una cuenta regresiva, cuando llega a cero se finaliza.

● Relleno de bits(Padding)

● Se completan los bits faltantes para que el archivo

tenga longitud entera de bytes (si ya la tiene se le agrega un byte maś) con ceros (“0”) y un uno (“1”). (Con algunos compresores no tiene sentido esta técnica) . Ejemplo: 01010101 01011000

(23)

FIUBA Organización de Datos - Curso Servetto 23

Formas de Finalizar un Archivo

comprimido(Cont.)

● Mensaje Especial

● Se agrega un caracter especial en el diccionario,

cuya aparición significa el fin del archivo. Entonces cuando se termina el archivo original se realizar una compresión más, como si apareciese ese caracter.

(24)

FIUBA Organización de Datos - Curso Servetto 24

Algoritmos de

Compresión Sin

Pérdida

(Lossless)

Estadísticos Por Diccionario Predictores Híbridos

(25)

FIUBA Organización de Datos - Curso Servetto 25

Algoritmos de

Compresión

Estadísticos

Algoritmo de Huffman Algoritmo Aritmético

(26)

FIUBA Organización de Datos - Curso Servetto 26

Algoritmo de Huffman

(Estadístico)

(27)

FIUBA

Organización de Datos - Curso Servetto 27

Algoritmo de Huffman

(Estadístico)

● Árbol de generación de códigos.

● Genera Códigos Prefijos de longitud variable.

● Esos códigos aproximan a las longitudes calculadas

por el Teorema de Shannon en bits enteros y no existe arbol capaz de generar codigos con emision de bits enteras mejores que Huffman.

● Utiliza un árbol para generar los códigos.

● En las hojas del árbol están los caracteres posibles

de comprimir.

● El camino desde la raiz hacia las hojas define el

(28)

FIUBA Organización de Datos - Curso Servetto 28

Algoritmo de Huffman

(Estadístico)

●Árboles de Huffman

●Se generan en función de las veces que aparece un

caracter en el archivo (frecuencia); cuanto más aparece, más cerca de la raíz está y códigos más cortos de

reemplazo tiene.

(29)

FIUBA Organización de Datos - Curso Servetto 29

Algoritmo de Huffman

(Estadístico)

●Las codificaciones de los símbolos son:

–A: 000 B: 001 C: 01 D: 1

●Como se basa en la frecuencia solamente es un

(30)

FIUBA Organización de Datos - Curso Servetto 30

Algoritmo de Huffman

(Estadístico)

●Construcción paso a paso fuente JERRYRICE:

●Se utiliza una lista con par(simbolo,frecuencia), ordenada por

frecuencia.

●Se unen los nodos con menor frecuencia, para generar el nodo

padre.

●El nodo padre que se cree en cada paso, tendra como hijo

izquierdo al primero de la lista y derecho al segundo.

●En caso de haber un nodo de igual frecuencia al agregar, se

agrega al final de esa repeticion de frecuencias(mejorar la longitud de los codigos)

(31)

FIUBA Organización de Datos - Curso Servetto 31

Algoritmo de Huffman

(Estadístico)

●Construcción paso a paso fuente JERRYRICE:

● Se obtienen las frecuencias de cada símbolo.

● 1) Se genera un nodo con C e I como hijos(frecuencia 2, por lo que van a continuacion de la E). ● 2) Se genera un nodo con J e Y como hijos(frecuencia 2, por lo que van a continuacion de la C-I).

● 3) Se genera un nodo con E y C-I como hijos(frecuencia 3, por lo que van a continuacion de la R). Si hubiesemos

puesto en primer lugar a C-I y J-Y en la tabla(antes que la E), hubiesemos tenido al momento de armar un nodo padre 4 simbolos a una distancia 2 del mismo padre(codigos mas largos).

● 4) Se genera un nodo con J-Y y R.

(32)

FIUBA Organización de Datos - Curso Servetto 32

Algoritmo de Huffman

(Método estático)

Arbol final para la fuente JERRYRICE

Codificación: C=010, E=00, I=011, J=100, R=11, Y=101 Representación final: 100-00-11-11-101-11-011-010-00

●22 bits de longitud contra 21.74 dados por la entropía ●Notar que la cantidad de bits es entera!!!

(33)

FIUBA Organización de Datos - Curso Servetto 33

Algoritmo de Huffman

(método estático)

● La emisión debe incluir la tabla de frecuencias,

debido que es necesaria para la descompresión.

● Tabla: C = 1, E = 2, I = 1, J = 1, R = 3, Y = 1

(34)

FIUBA Organización de Datos - Curso Servetto 34

Algoritmo de Huffman

(método estático)

●En primer lugar cabe aclarar que el descompresor

debe armar EL MISMO árbol que el compresor. Para esto se siguen los siguientes pasos:

● El descompresor lee la tabla de frecuencias,

generando el mismo árbol(pensar que el algoritmo es el mismo)

●Finalmente lo que se hace, con el arbol armado,

es leer bit a bit el archivo que tenemos y emitir cuando lleguemos a un nodo hoja.

(35)

FIUBA Organización de Datos - Curso Servetto 35

Algoritmo de Huffman

(método estático)

Descompresión de la fuente JERRYRICE

● Se lee la tabla de frecuencias y se arma el mismo

árbol final(0 a izq, 1 a derecha ):

● Se lee bit a bit y se mueve sobre las ramas del

árbol emitiendose cuando se llega a un hoja obteniendose la siguiente tabla:

(36)

FIUBA Organización de Datos - Curso Servetto 36

Algoritmo de Huffman

(método estático)

Descompresión de la fuente JERRYRICE(Cont.)

Paso 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

Bit Leido 1 0 0 0 0 1 1 1 1 1 0 1 1 1 0 1 1 0 1 0 0 0

Mov. En Arbol Der. Izq Izq. Izq Izq. Der. Der. Der. Der. Der. Izq Der. Der. Der. Izq Der. Der. Izq Der. Izq. Izq Izq.

T.Nodo Int. Int. Hoj. Int. Hoj. Int. Hoj. Int. Hoj. Int. Int. Hoj. Int. Hoj. Int. Int. Hoj. Int. Int. Hoj. Int. Hoj.

(37)

FIUBA Organización de Datos - Curso Servetto 37

Algoritmo de Huffman

(método dinámico)

●Todas las frecuencias se asumen

inicialmente iguales a 1

●Se construye el árbol completo en cada

paso para la tabla de frecuencias actual

●En la siguiente diapositiva se muestra el

árbol final antes de cada emisión, no la construcción paso a paso.

(38)

FIUBA Organización de Datos - Curso Servetto 38

Algoritmo de Huffman

(método dinámico)

Emisión: 111-101-110-01-110-10-011-010-101 25 bits (3 más que el estático)

(39)

FIUBA Organización de Datos - Curso Servetto 39

Algoritmo de Huffman

(método dinámico)

●La emisión no incluye la tabla de

frecuencias

●El compresor y el descompresor conocen

implícitamente el alfabeto (por ejemplo, los bytes del 0 a 255), no hace falta

transmitirlo

●Para emitir bytes completos, se usan las

mismas técnicas vistas para finalizar archivos

(40)

FIUBA Organización de Datos - Curso Servetto 40

Algoritmo de Huffman

(método dinámico)

● Descompresión:

● Sigue la misma idea que el estático, salvo que la

tabla de frecuencias arrancan para todos los caracteres en 1.

● Se lee el archivo bit a bit, moviéndonos en el árbol

hasta llegar a un nodo hoja. Es en este momento donde emitimos el carácter correspondiente.

● A diferencia del anterior, debemos incrementar la

frecuencia de dicho carácter(siempre siguiendo la misma lógica que en el compresor)

(41)

FIUBA Organización de Datos - Curso Servetto 41

Algoritmo de Huffman

(método dinámico)(Cont.)

Tabla Ejemplo Descompresión JERRYRICE:

Paso 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Bit Leido 1 1 1 1 0 1 1 1 0 0 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 Mov. En Arbol Izq. Izq. Izq. Izq. Der. Izq. Izq. Izq. Der. Der. Izq. Izq. Izq. Der. Izq. Der. Der. Izq. Izq. Der. Izq. Der. Izq. Der. Izq. T.Nodo Int. Int. Hoj. Int. Int. Hoj. Int. Int. Hoj. Int. Hoj. Int. Int. Hoj. Int. Hoj. Int. Int. Hoj. Int. Int. Hoj. Int. Int. Hoj.

Emisión ---- ---- J ---- ---- E ---- ---- R ---- R ---- ---- Y ---- R ---- ---- I ---- ---- C ---- ---- E Actualización

(42)

FIUBA Organización de Datos - Curso Servetto 42

Algoritmo de Huffman

(método dinámico)

● Descompresión(Cont.):

Arboles finales generados en cada paso de la

(43)

FIUBA Organización de Datos - Curso Servetto 43

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

●Logra una actualización rápida del árbol

de un paso al otro

●No cambia el nivel de compresión

●Los nodos tienen 2 hijos o ninguno

●Para tener un árbol óptimo alcanza con

que:

Si P(A) > P(B) entonces L(A) ≤ L(B) Si P(A) = P(B) entonces |L(A)-L(B)| ≤ 1 Regla de oro: Si #A > #B => F(A) ≤ F (B)

(44)

FIUBA Organización de Datos - Curso Servetto 44

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

●Se numeran (#) los nodos en forma

ascendiente, de la raíz hacia abajo y de derecha a izquierda, y se escribe la

(45)

FIUBA Organización de Datos - Curso Servetto 45

Huffman dinámico:

manejo eficiente

●Si aumenta en 1 la frecuencia de la Y, la

estructura del árbol no necesita cambiar

porque la frecuencia aumenta de izq a der, de abajo a arriba:

(46)

FIUBA Organización de Datos - Curso Servetto 46

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

●Si en vez de eso aumenta en 1 la

frecuencia de la E, la estructura del árbol cambia: se intercambia el nodo de la E

(nodo 10) y el nodo de menor numeración con frecuencia superior (nodo 7):

(47)

FIUBA Organización de Datos - Curso Servetto 47

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

●Caso particular: al aumentar la frecuencia

de C en este árbol(hoja- no hoja)

El nodo candidato para el intercambio es el 3. Se realiza el intercambio y el árbol queda..

(48)

FIUBA

Organización de Datos - Curso Servetto

48

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

●Notar que se intercambio el sub-árbol

entero del nodo 3.

●Este árbol sigue siendo un árbol de

Huffman ya que cumple con todas las propiedades

(49)

FIUBA Organización de Datos - Curso Servetto 49

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

● Ejemplo de compresión(fte: porotosEOF)

(50)

FIUBA Organización de Datos - Curso Servetto 50

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

● Ejemplo de compresión(fte: porotosEOF)

1) Arbol Inicial 2)Lectura p(Emisión 10)

(51)

FIUBA Organización de Datos - Curso Servetto 51

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

● Ejemplo de compresión(fte: porotosEOF)

5) Lectura o(Emision 11) 6)Lectura t(Emisión 001)

(52)

FIUBA Organización de Datos - Curso Servetto 52

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

● Ejemplo de compresión(fte: porotosEOF)

9) Lectura EOF(Emision 101)

● Notar que se emite con el arbol de la figura anterior a la lectura. ● En el ultimo paso no es neceseario actualizar el arbol.

(53)

FIUBA Organización de Datos - Curso Servetto 53

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

● Ejemplo de descompresión(fte: porotosEOF)

(54)

FIUBA Organización de Datos - Curso Servetto 54

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

● Ejemplo de descompresión(fte: porotosEOF)

● El método es similar a la descompresión explicada anteriormente.

● 1) Se lee bit 1, luego bit 0 -> se emite p-> se actualiza el arbol.

(55)

FIUBA Organización de Datos - Curso Servetto 55

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

● Ejemplo de descompresión(fte: porotosEOF)

● El método es similar a la descompresión explicada anteriormente.

● 3) Se lee bit 0, luego bit 1 y bit 1 -> se emite r-> se actualiza el arbol.

(56)

FIUBA Organización de Datos - Curso Servetto 56

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

● Ejemplo de descompresión(fte: porotosEOF)

● El método es similar a la descompresión explicada anteriormente.

● 5) Se lee bit 0, luego bit 0 y bit 1 -> se emite t-> se actualiza el arbol.

(57)

FIUBA Organización de Datos - Curso Servetto 57

Algoritmo de Huffman

Manejo Eficiente

(método dinámico)

● Ejemplo de descompresión(fte: porotosEOF)

● El método es similar a la descompresión explicada anteriormente.

● 7) Se lee bit 1, luego bit 1 y bit 0 -> se emite s-> se actualiza el arbol.

(58)

FIUBA Organización de Datos - Curso Servetto 58

Referencias

● D.A. Huffman, "A Method for the Construction of

Minimum-Redundancy Codes", Proceedings of the I.R.E., September 1952, pp 1098–1102.

(59)

FIUBA Organización de Datos - Curso Servetto 59

Algoritmo de Aritmético

(Estadístico)

(60)

FIUBA Organización de Datos - Curso Servetto 60

Algoritmo Aritmético

(Estadístico)

●Segmento de generación de códigos.

●Genera un único código, que representa a todo el archivo, longitud

variable.

●Ese código aproxima a las longitudes calculadas por el Teorema

de Shannon en fracciones bits.

●No asigna a cada símbolo un código en bits de longitud entera. Se

puede decir que cada símbolo está representado por un código de longitud no entera de bits, formando parte del código único.

(61)

FIUBA Organización de Datos - Curso Servetto 61

Algoritmo Aritmético

(Estadístico)

●Segmento de generación de códigos(Cont.)

●Utiliza un segmento dividido en función de las probabilidades de

los caracteres a considerar para generar las emisiones.

●El camino de decisiones tomadas, segmento a segmento, genera

emisiones de números binarios que se concatenan y dan como resultado el archivo comprimido.

Conceptualmente codifica el archivo entero como un número real

(62)

FIUBA Organización de Datos - Curso Servetto 62

Algoritmo Aritmético

(Estadístico)

●Segmento Aritmético

● Ej: AAABBCC

● Se divide el intervalo de “0 a 1” según la probabilidad de los símbolos (se

adapta al intervalo con el que se está comprimiento. Ej: 0 – 255)

●En cada paso se elige un subintervalo según el símbolo leído

●En el siguiente paso se divide el subintervalo elegido de la misma forma ●Se repite hasta llegar al último carácter

(63)

FIUBA Organización de Datos - Curso Servetto 63

Algoritmo Aritmético

(Estadístico)

●Soluciones técnicas para las limitaciones del

hardware (Overflow y Underflow):

●Las computadoras no trabajan nativamente con números reales de

precisión arbitraria.

●En vez de utilizar un intervalo real para trabajar, se elige un

intervalo entero de 0 a 2N. Los números de ese intervalo tendrán N

(64)

FIUBA

Organización de Datos - Curso Servetto

64

Algoritmo Aritmético

(Estadístico)

●División de un intervalo:

●Se divide el intervalo [Piso1,

TechoN] en N subintervalos de

diversas longitudes

●Sea L = TechoN - Piso1 + 1

●Techoi = floor(Pisoi + P(si).L) - 1 ●Pisoi+1 = Techoi + 1

●En el siguiente paso, el

subintervalo elegido es el que se subdivide

(65)

FIUBA Organización de Datos - Curso Servetto 65

Algoritmo Aritmético

(Estadístico)

●Overflow:

●Situación en la que se permite dejar

de considerar el bit más significativo de los límites del intervalo, dado que ese valor pertenece con seguridad al código final generado.

1101

1000

Emito el '1' y completo.

1011

(66)

FIUBA Organización de Datos - Curso Servetto 66

Algoritmo Aritmético

(Estadístico)

●Underflow:

●Situación en la que se pierde

presición porque en el proceso de compresión se llegó a una situación donde la diferencia entre el techo y el piso es inferior a la unidad del bit más significativo y de su siguiente, por lo que solo podrán cambiar los restantes en los pasos que continúan. Esto

puede llevar a que se congelen más bits, al punto de no poder avanzar por tener congelados a todos.

1010

0110

Sumo '1' al contador De Underflow,

Quito el segundo Bit y completo.

1101

0100 UF=1 UF=0

(67)

FIUBA Organización de Datos - Curso Servetto 67

Algoritmo Aritmético

(Estadístico)

●Es posible que tras normalizar un overflow,

se descubra un underflow

Techo: 11011001  11100111

(68)

FIUBA Organización de Datos - Curso Servetto 68

Algoritmo Aritmético

(Estadístico)

●Al detectar un overflow y realizar la emisión, se emiten

tras el primer dígito tantos dígitos negados como sea el contador de underflow y se pone el contador en 0

(U=2)

Techo: 11101101  11101111

Piso: 11010110  00110000

(69)

FIUBA Organización de Datos - Curso Servetto 69

Algoritmo Aritmético

(Estadístico)

●Cuanto más chico es el intervalo, más precisión hace

falta para representarlo.

●Cuanto más probable es un símbolo, más grande su

intervalo y menos bits se emiten cuando ocurre.

●El método estático emite (guarda) la tabla de

frecuencias y requiere dos pasadas.

●El método dinámico no guarda la tabla de frecuencias,

(70)

FIUBA Organización de Datos - Curso Servetto 70

Algoritmo Aritmético

(método estático)

●Se genera la tabla de frecuencias con la primer

pasada.

●Se divide el intervalo de "0 a 1" según la probabilidad

dada por la tabla de frecuencias (que es estática).

●En cada paso se elige un subintervalo según el símbolo

leído.

(71)

FIUBA Organización de Datos - Curso Servetto 71

Algoritmo Aritmético

(método estático)

●Finalmente se emite un número del subintervalo

elegido en el último paso (por convención, el piso)

●El código resultante es el mejor que puede generar

este compresor.

●Define el fin de archivo con la suma de frecuencias de

(72)

FIUBA Organización de Datos - Curso Servetto 72

Algoritmo Aritmético

(método estático)

● Compresión de BAABCA:

Compresión del caracter 'B' - (Posicion: 0)

Piso inicial: 0 - Techo Inicial 255 Intervalo: 256

N.Piso = 0 + 256 * 3 / 6 = 128 N. Techo = 0 + 256 * 5 / 6 - 1 = 212

Resultado de la normalización:

Piso: 10000000 (128) -> 00000000 (0) Techo: 11010100 (212) -> 10101001 (169) Emisión: 1 C. underflow: 0

Compresión del caracter ‘A' - (Posicion: 1)

Piso inicial: 0 - Techo Inicial 169 Intervalo: 170

N.Piso = 0 + 170 * 0 / 6 = 0 N. Techo = 0 + 170 * 3 / 6 - 1 = 84

Resultado de la normalización:

Piso 00000000 (0) -> 00000000 (0) Techo: 01010100 (84) -> 10101001 (169) Emisión: 0 C. underflow: 0

(73)

FIUBA Organización de Datos - Curso Servetto 73

Algoritmo Aritmético

(método estático)

● Compresión de BAABCA:

Compresión del caracter ‘A' - (Posicion: 2)

Piso inicial: 0 - Techo Inicial 169 Intervalo: 170

N.Piso = 0 + 170 * 0 / 6 = 0 N. Techo = 0 + 170 * 3 / 6 - 1 = 84

Resultado de la normalización:

Piso: 00000000 (0) -> 00000000 (0) Techo: 01010100 (84) -> 10101001 (169) Emisión: 0 C. underflow: 0

Compresión del caracter ‘B' - (Posicion: 3)

Piso inicial: 0 - Techo Inicial 169 Intervalo: 170

N.Piso = 0 + 170 * 3 / 6 = 85 N. Techo = 0 + 170 * 5 / 6 - 1 = 140

Resultado de la normalización:

Piso: 01010101 (85) -> 00101010 (42) Techo: 10001100 (140) -> 10011001 (153) Emisión: C. underflow: 1

(74)

FIUBA Organización de Datos - Curso Servetto 74

Algoritmo Aritmético

(método estático)

● Compresión de BAABCA:

Compresión del caracter ‘C' - (Posicion: 4)

Piso inicial: 42 - Techo Inicial 153 Intervalo: 112

N.Piso = 42 + 112 * 5 / 6 = 135 N. Techo = 42 + 112 * 6 / 6 - 1 = 153

Resultado de la normalización:

Piso: 10000111 (135) -> 00111000 (56) Techo: 10011001 (153) -> 11001111 (207) Emisión: 1000(Underflow) C. underflow: 0

Compresión del caracter ‘A' - (Posicion: 5)

Piso inicial: 56 - Techo Inicial 207 Intervalo: 152

N.Piso = 56 + 152 * 0 / 6 = 56 N. Techo = 56 + 152 * 3 / 6 - 1 = 131

Al ser el ultimo caracter, se emite el piso, incluyendo los underflows: Piso: 00111000 (56) --- > Emisión: 00111000

(75)

FIUBA Organización de Datos - Curso Servetto 75

Algoritmo Aritmético

(método estático)

● Descompresión de BAABCA:

●Archivo comprimido: 100100000111000

●Se leen la tablas de frecuencias(que están en el mismo

archivo):

●A= 3, B=2, C=1

●Se plantea el intervalo inicial y se leen de a N bits(N

(76)

FIUBA Organización de Datos - Curso Servetto 76

Algoritmo Aritmético

(método estático)

● Descompresión de BAABCA:

Descompresión del caracter 'B‘ ●Rangos iniciales:

●C = [213 - 255] = [11010101 - 11111111]; B = [128 - 212] = [10000000 - 11010100] ; A = [000 - 127] = [00000000 - 01111111] ●Se leen 8 bits: 10010000 -> Cae en el rango de la B(128-212)

Se emite una B.

Descompresión del caracter ‘A'

Se plantea el nuevo intervalo(128-212)(Overflow de 1)

Resultado de la normalización(Overflow de 1):

Piso: 10000000 (128) -> 00000000 (0) Techo: 11010100 (212) -> 10101001 (169)

Nuevos Intervalos:

C [141 - 169] = [10001101 - 10101001] ; B [085 - 140] = [01010101 - 10001100] ; A [000 - 084] = [00000000 - 01010100] Debido al overflow, descartamos el 1er bit leído anteriormente y leemos uno mas del archivo: 100100000

00100000 -> Cae en el rango de la A

(77)

FIUBA Organización de Datos - Curso Servetto 77

Algoritmo Aritmético

(método estático)

● Descompresión de BAABCA:

Descompresión del caracter ‘A‘

Se plantea el nuevo intervalo(0-84)(Overflow de 1)

Resultado de la normalización(Overflow de 1):

Piso 00000000 (0) -> 00000000 (0) Techo: 01010100 (84) -> 10101001 (169)

C [141 - 169] = [10001101 a 10101001] ; B [085 - 140] = [01010101 - 10001100] ; A [000 - 084] = [00000000 - 01010100] Debido al overflow, descartamos el 1er bit leído anteriormente y leemos uno mas del archivo: 1001000001

01000001 -> Cae en el rango de la A

Se emite una A.

Descompresión del caracter ‘B‘

Se plantea el nuevo intervalo(0-84)(Overflow de 1)

Resultado de la normalización(Overflow de 1):

Piso 00000000 (0) -> 00000000 (0) Techo: 01010100 (84) -> 10101001 (169)

Nuevos Intervalos:

C [141 - 169] = [10001101 - 10101001] ; B [085 - 140] = [01010101 - 10001100] ; A [000 - 084] = [00000000 - 01010100] Debido al overflow, descartamos el 1er bit leído anteriormente y leemos uno mas del archivo: 10010000011

01000001 -> Cae en el rango de la B

(78)

FIUBA Organización de Datos - Curso Servetto 78

Algoritmo Aritmético

(método estático)

● Descompresión de BAABCA:

Descompresión del caracter ‘C‘

Se plantea el nuevo intervalo(85-140)(Underflow -> Cont. UF=1)

Resultado de la normalización(Underflow de 1):

Piso: 01010101 (85) -> 00101010 (42) Techo: 10001100 (140) -> 10011001 (153)

Nuevos Intervalos:

C [135 - 153] = [10000111 - 10011001] ; B [098 - 134] = [01100010 - 10000110] ; A [042 - 097] = [00101010 - 01100001]

Debido al Underflow, dejamos fijo el 1er bit en inspección y luego descartar tantos bits como underflows tengamos(1 bit en este caso, 0), completar del archivo leyendo los bits necesarios para 1 byte : 1001(Fijo)0(Descartado)0000111(leído)

10000111 -> Cae en el rango de la C

Se emite una C.

Descompresión del caracter ‘A‘

Se plantea el nuevo intervalo(135-153)(Overflow de 3)

Resultado de la normalización(Overflow de 3):

Piso: 10000111 (135) -> 00111000 (56) Techo: 10011001 (153) -> 11001111 (207)

Nuevos Intervalos:

C [182 - 207] = [10110110 - 11001111] ; B [132 - 181] = [10000100 - 10110101] ; A [056 - 131] = [00111000 - 10000011]

Debido al overflow, descartamos los 3 1eros bits leídos anteriormente y leemos 3 mas del archivo: 1001(O)000(O)00111000(Leidos) 00111000 -> Cae en el rango de la A

(79)

FIUBA Organización de Datos - Curso Servetto 79

Algoritmo Aritmético

(método dinámico)

●Se asigna frecuencia 1 a todos los símbolos

●Se divide el intervalo de "0 a 1" según la probabilidad

dada por la tabla de frecuencias

●En cada paso se elige un subintervalo según el símbolo

leído. Luego se modifica la tabla de frecuencias

●En el siguiente paso se divide el subintervalo elegido

según la nueva tabla

(80)

FIUBA Organización de Datos - Curso Servetto 80

Algoritmo Aritmético

(método dinámico)

●Finalmente se emite un número del subintervalo

elegido en el último paso

●Las probabilidades se van modificando, adecuando, a

medida que se avanza en la compresión.

●El código resultante es igual o peor que el generado

por el estático (pero no necesita tabla de frecuencias).

●El fin de archivo, generalmente, se define con un

caracter especial (EOF). También se pueden indicar la cantidad de emisiones al principio del archivo.

(81)

FIUBA Organización de Datos - Curso Servetto 81

Algoritmo Aritmético

(Dinamico)

● Compresión de ABAC:

Compresión del caracter ‘A' - (Posicion: 0) A=1, B=1, C=1  A=2, B=1, C=1

Piso inicial: 0 - Techo Inicial 255 Intervalo: 256

N.Piso = 0 + 256 * 0 = 0 N. Techo = 0 + 256 * 1 / 3 - 1 = 84

Resultado de la normalización:

Piso: 00000000 (0) -> 00000000 (0) Techo: 01010100 (84) -> 10101001 (169) Emisión: 0 C. underflow: 0

Compresión del caracter ‘B' - (Posicion: 1) A=2, B=1, C=1  A=2, B=2, C=1

Piso inicial: 0 - Techo Inicial 169 Intervalo: 170

N.Piso = 0 + 170 * 2 / 4 = 85 N. Techo = 0 + 170 * 3 / 4 - 1 = 126

Resultado de la normalización:

Piso 01010101 (85) -> 01111110 (126) Techo: 01010100 (84) -> 11111011 (251) Emisión: 01 C. underflow: 0

(82)

FIUBA Organización de Datos - Curso Servetto 82

Algoritmo Aritmético

(Dinamico)

● Compresión de ABAC :

Compresión del caracter ‘A' - (Posicion: 2) A=2, B=2, C=1  A=3, B=2, C=1

Piso inicial: 84 - Techo Inicial 251 Intervalo: 168

N.Piso = 84 + 168 * 0 / 5 = 84 N. Techo = 84 + 168 * 2 / 5 - 1 = 150

Resultado de la normalización:

Piso: 01010100 (84) -> 00101000 (40) Techo: 10010110 (150) -> 10101101 (173) Emisión: - C. underflow: 1

Compresión del caracter ‘C' - (Posicion: 3) A=3, B=2, C=1  A=3, B=2, C=2

Piso inicial: 40 - Techo Inicial 173 Intervalo: 134

N.Piso = 40 + 134 * 5 / 6 = 151 N. Techo = 40 + 134 * 6 / 6 - 1 = 173

Al ser el ultimo caracter, se emite el piso, incluyendo los underflows: Piso: 10010111 (151) --- > Emisión: 100010111

(83)

FIUBA Organización de Datos - Curso Servetto 83

Algoritmo Aritmético

(Dinamico)

● Descompresión de ABAC:

Descompresión del caracter ‘A‘ A=1, B=1, C=1  A=2, B=1, C=1 ●Rangos iniciales:

●C = [170 - 255] = [10101010 - 11111111]; B = [85 - 169] = [001010101 - 10101001] ; A = [0 - 84] = [00000000 - 001010100] ●Se leen 8 bits: 00110001 (25) -> Cae en el rango de la A(0-84)

Se emite una A.

Descompresión del caracter ‘B‘ A=2, B=1, C=1  A=2, B=2, C=1

Se plantea el nuevo intervalo(0-84)(Overflow de 0)

Resultado de la normalización(Overflow de 0):

Piso: 00000000 (0) -> 00000000 (0) Techo: 01010100 (84) -> 10101001 (169)

Nuevos Intervalos:

C [127 - 169] = [01111111 - 10101001] ; B [85 - 126] = [01010101 - 01111110] ; A [0 - 84] = [00000000 - 01010100] Debido al overflow, descartamos el 1er bit leído anteriormente y leemos uno mas del archivo: 001100010 01100010 (98) -> Cae en el rango de la B

(84)

FIUBA Organización de Datos - Curso Servetto 84

Algoritmo Aritmético

(Dinamico)

● Descompresión de ABAC:

Descompresión del caracter ‘A‘ A=2, B=2, C=1  A=3, B=2, C=1

Se plantea el nuevo intervalo(85-126)(Overflow de 01)

Resultado de la normalización(Overflow de 01):

Piso 01010101 (85) -> 01010100 (84) Techo: 01111110 (126) -> 11111011 (251) C [218 - 251]; B [151 - 217]; A [84 - 150]

Debido al overflow, descartamos los dos primeros bits leídos anteriormente y leemos dos mas del archivo: 00110001011(leídos) 10001011 (139) -> Cae en el rango de la A

Se emite una A.

Descompresión del caracter ‘C‘ A=3, B=2, C=1  A=3, B=2, C=2

Se plantea el nuevo intervalo(84-150)(Underflow de 1)

Resultado de la normalización(Underflow de 1):

Piso 01010100 (84) -> 00101000 (40) Techo: 10010110 (150) -> 10101101 (173)

Nuevos Intervalos:

C [151 – 173] ; B [107 - 150] ; A [40 - 106]

Debido al Underflow, dejamos fijo el 1er bit en inspección y luego descartar tantos bits como underflows tengamos(1 bit en este caso, 0), completar del archivo leyendo los bits necesarios para 1 byte : 0011(Fijo)0(Descartado)0010111(leídos)

10010111 (151) -> Cae en el rango (es el piso) de la C

(85)

FIUBA Organización de Datos - Curso Servetto 85

Referencias

● Witten, Ian H.; Neal, Radford M.; Cleary, John G.

(June 1987). "Arithmetic Coding for Data

Compression" (PDF). Communications of the ACM 30 (6): 520–540. Retrieved 2007-09-21.

(86)

FIUBA Organización de Datos - Curso Servetto 86

Algoritmos de

Compresión No

estadística

Algoritmo Lz77 Algoritmo Lz78/W

(87)

FIUBA Organización de Datos - Curso Servetto 87

Algoritmos de Compresión

Run Length

● Detecta repeticiones de símbolos y las reemplaza

por pares (símbolo,longitud)

● Funciona bien cuando hay secuencias de

símbolos que se repiten mucho

● Se suelen implementar como parte de algoritmos

(88)

FIUBA Organización de Datos - Curso Servetto 88

Algoritmos de Compresión

Run Length

Ejemplos:

● Notar que aumenta el tamaño si no se repiten los

caracteres ABCABCABC 1A1B1C1A1B1C1A1B1C AAABBBCCC 3A3B3C Estadístico: Mal

Run length.: Mal

Estadístico: Igual de mal

(89)

FIUBA Organización de Datos - Curso Servetto 89

Algoritmos de Compresión por

Diccionario

● Consisten en sustituir una cadena de varios

símbolos por un puntero a la entrada en un

diccionario, el cual puede ser estático o adaptable (dinámico)

● Un mismo símbolo no siempre se sustituye con lo

mismo (≠ codificación)

“Esto es una clase de

organización de datos. Cátedra servetto”

233/4 219/5 579/2 121/9 182/1 393/7 182/1 180/1 99/15

(90)

FIUBA Organización de Datos - Curso Servetto 90

Algoritmo Lz77

(por Diccionario)

● Abraham Lempel y Jacob Ziv en 1977

● Es la base del formato gráfico PNG(B&N)

● El diccionario es la ventana de memoria

(adaptativo) Ventana de Inspección (Lookahead Window) Tamaño N Ventana de Memoria (Memory Window) Tamaño M

Logitud Mínima de Match (A)

(91)

FIUBA Organización de Datos - Curso Servetto 91

Algoritmo Lz77

(por Diccionario)

● Siempre nos quedamos con el acierto más grande y en caso de haber un

acierto de la misma longitud, nos quedamos con el de menor posición.

● Un bit más para distinguir la codificación de un par ordenado de un carácter. ● Para codificar posiciones y longitudes:

● P posiciones posibles (0,..,P): K bits -> K = Techo(Log2 (M – A + 1)) ● L longitudes posibles (A,…,L): K2 bits ->K2 = Techo(Log2 (Min(M,N)–

A+1))

(92)

FIUBA Organización de Datos - Curso Servetto 92

Algoritmo Lz77

(por Diccionario)

● Método de Compresión :

● Inicialmente se toma la ventana de memoria como vacía (con algún caracter especial para indicar ello por

ejemplo) y se carga la ventana de inspección con los primeros N caracteres del archivo

● Mientras sigan quedando caracteres en la ventana de inspección (mientras no se haya llegado al fin del archivo)

se compara el string que comienza en la posición 0 de dicha ventana con todos los strings que comienzan en cada posición de la ventana de memoria.

● Si no hay ningún match de longitud mayor a la mínima, entonces se emite el primer caracter de la ventana de inspección

y ambas ventanas se desplazan 1 caracter (la ventana de memoria pierde su primer caracter y el ultimo pasa a ser el caracter recientemente comprimido; la ventana de inspección también pierde su primer caracter y lee del archivo a comprimir el siguiente caracter, que ubica al final)

• Si hay al menos un match de longitud mayor a la mínima, se toma el match de mayor longitud (puede haber varios

matchs) y se emite primero la posición en la que se dio el match en la ventana de memoria y luego la longitud del mismo. Las dos ventanas se desplazan tantos caracteres como sea la longitud de dicho match (la de memoria pierde sus primeros k caracteres y los k últimos pasan a ser el substring que matcheo, la de inspección también pierde sus primeros k caracteres y lee otros k del archivo que los ubica al final). En caso de empate entre 2 matchs con la longitud máxima se debe tomar alguna convención, por ejemplo emitir la de menor posición

(93)

FIUBA Organización de Datos - Curso Servetto 93

Algoritmo Lz77

(por Diccionario)

● Ejemplo de Compresión fuente

RAPATAPATAPARAPAPA :

● Tamaño Ventana de Memoria = 6

● Tamaño Ventana de Inspección= 5

● Tamaño mínimo match = 2

● Longitudes posibles= L2,L3,L4,L5

● Techo(Log2 (Min(M,N)–A+1)) = Techo(log2(4))=2bits ● Posiciones posibles= 0,1,2,3,4(P5 no se puede dar)

● Techo(Log2 (M – A + 1))= Techo(log2(5))=3 bits

● Par (posicion,longitud) = 6 bits y carácter 9 bits.

(94)

FIUBA Organización de Datos - Curso Servetto 94

Algoritmo Lz77

(por Diccionario)

● Ejemplo de Compresión fuente

RAPATAPATAPARAPAPA :

Ventana de Memoria(6) Ventana de Inspeccion(5) Salida del Compresor Ubicaciones de las ventanas en file

--- RAPAT R |RAPAT|APATAPARAPAPA

---R APATA A |R|APATA|PATAPARAPAPA

----RA PATAP P |RA|PATAP|ATAPARAPAPA

---RAP ATAPA A |RAP|ATAPA|TAPARAPAPA

--RAPA TAPAT T |RAPA|TAPAT|APARAPAPA

-RAPAT APATA (P2-L4) |RAPAT|APATA|PARAPAPA

ATAPAT APARA (P2-L3) RAP|ATAPAT|APARA|PAPA

PATAPA RAPAP R RAPATA|PATAPA|RAPAP|A

ATAPAR APAPA (P2-L3) RAPATAP|ATAPAR|APAPA|

(95)

FIUBA Organización de Datos - Curso Servetto 95

Algoritmo Lz77

(por Diccionario)

● Ejemplo de Compresión fuente

RAPATAPATAPARAPAPA :

● 6 caracteres * 9 bits = 54 bits

● 4 pares(pos,long) * 6 bits= 24 bits

● Total: 78 bits= 9,75 bytes.

● Tam. Original: 18 caracteres => 18 bytes

● Tasa Compresión= 9,75 bytes/18 bytes* 100% = 54,16%

R A P A T (P2-L4) (P2-L3) R (P2-L3) (P0-L2)

(96)

FIUBA Organización de Datos - Curso Servetto 96

Algoritmo Lz77

(por Diccionario)

● Descompresión:

● El descompresor tiene la misma configuracion que el

compresor.

● La idea de la descompresión es leer primero un

bit(para saber cuantos leer luego).

● Considerando que un 0 es un caracter y 1 (pos,long)

● Si ese bit es 0 -> leemos 8 bits mas. ● Si ese bit es 1 -> leemos 5 bit mas.

(97)

FIUBA Organización de Datos - Curso Servetto 97

Algoritmo Lz77

(por Diccionario)

● Ejemplo de Descompresión fuente

RAPATAPATAPARAPAPA :

Ventana de Memoria(6) Lectura del archivo comprimido Salida del Descompresor

--- R R ---R A A ----RA P P ---RAP A A --RAPA T T -RAPAT (P2-L4) APAT ATAPAT (P2-L3) APA PATAPA R R ATAPAR (P2-L3) APA PARAPA (P0-L2) PA

(98)

FIUBA Organización de Datos - Curso Servetto 98

Referencias

● Jacob Ziv and Abraham Lempel; A Universal

Algorithm for Sequential Data Compression,

IEEE Transactions on Information Theory, 23(3), pp. 337–343, May 1977.

(99)

FIUBA Organización de Datos - Curso Servetto 99

Algoritmo Lz78/W

(por Diccionario)

Abraham Lempel y Jacob Ziv en 1978

●También utiliza un diccionario adaptativo, pero de todos los símbolos anteriores

●La cantidad de bits emitidos dependen del tamaño de la tabla ●Original: 11 letras x 8 bits = 88 bits

(100)

FIUBA Organización de Datos - Curso Servetto 100

Algoritmo Lz78/W

(por Diccionario)

●Descompresión

–El tamaño de la tabla indica la cantidad de bits que tengo que leer –Se empieza con el diccionario vacío y se va regenerando

–Siempre se almacena lo anterior más la primera letra del próximo

●Caso Especial

–Cuando para agregar una entrada en la tabla tengo que leer un símbolo que no tengo

¿Cómo lleno este

símbolo? LA (256) + L

(primera letra del símbolo actual)

(101)

FIUBA Organización de Datos - Curso Servetto 101

Algoritmo Lz78/W

(por Diccionario)

● Ejemplo Compresión (Fte: TETETERARA)

Ubicación en el archivo String actual ¿Esta en Tabla? Codigo Emitido Actualizacion de Tablas

TETETERARA T SI --- --- ETETERARA TE NO T 256-TE ETETERARA E SI --- --- TETERARA ET NO E 257-ET TETERARA T SI --- --- ETERARA TE SI --- ---

TERARA TET NO 256 258-TET

TERARA T SI --- ---

ERARA TE SI --- ---

RARA TER NO 256 259-TER

RARA R SI --- --- ARA RA NO R 260-RA ARA A SI --- --- RA AR NO A 261-AR RA R SI --- --- A RA SI --- --- fin 260 ---

(102)

FIUBA Organización de Datos - Curso Servetto 102

Algoritmo Lz78/W

(por Diccionario)

● Ejemplo de descompresion (Fc = T-E-256-258-E-R-A-262-A)

● Archivo original: F=TETETETERAAAA

Ubicación en el archivo String actual ¿Esta en Tabla? Codigo Emitido Actualizacion de Tablas

T-E-256-258-E-R-A-262-A T SI T ---

E-256-258-E-R-A-262-A E SI E 256-TE

256-258-E-R-A-262-A 256 SI TE 257-ET

258-E-R-A-262-A 258

NO (caso

especial) TE*  TET

258-TE* (lo emitido en el paso anterior + primer carácter de emisión actual) Primer caracter = T 258-TET E-R-A-262-A E SI E 259-TETE R-A-262-A R SI R 260-ER A-262-A A SI A 261-RA

262-A 262 NO A*  AA 262-A*  262-AA

(103)

FIUBA Organización de Datos - Curso Servetto 103

Algoritmo Lz78/W

(por Diccionario)

● La tabla crece a medida que avanza la compresión y

aumenta la complejidad de las búsquedas y comparaciones.

● El diccionario puede implementarse como un árbol para

acelerar las búsquedas.

Clearing: Para evitar que la tabla crezca indefinidamente

(ya no gano demasiado en compresión) puedo:

●Dejar de agregar cosas al diccionario

●Limpiar la tabla (usando un carácter especial que simbolice

limpieza de tabla o no).

(104)

FIUBA Organización de Datos - Curso Servetto 104

Referencias

● Terry Welch, "A Technique for High-Performance

Data Compression", IEEE Computer, June 1984, p. 8–19.

(105)

FIUBA Organización de Datos - Curso Servetto 105

Algoritmos de

Compresión

Predictores

Algoritmo Aritmético de Orden mayor a 1 Algoritmo PPMC

(106)

FIUBA Organización de Datos - Curso Servetto 106

Algoritmos de Compresión

Predictores

● Utilizan estructuras de datos para registrar pasos anteriores de la

compresión.

● Se parte de una concepción estadística, que reconoce como

altamente probable la aplicación de la misma acción ante una misma situación (eso es el acierto predictor).

● Se basa en algoritmos estadísticos clásicos, pero modifican la

forma de calcular la probabilidad de las apariciones,

considerando probabilidades condicionales (Contextos).

● Funciona bien cuando se cumple la regla de la concepción

(107)

FIUBA Organización de Datos - Curso Servetto 107

Algoritmos de Compresión

Predictores

● Contextos:

● Se parte de la base de que un texto tiene secuencias que se

repiten.

– Ej: En un programa escrito en C, luego del carácter “;” es altamente probable un fin de línea.

● Para cada carácter, el o los caracteres precedentes son su

contexto.

● El orden de un contexto es la cantidad de caracteres

precedentes que se toman en cuenta para predecir. Orden 0 (“O(0)”) significa ningún carácter. Orden 1 (“O(1)”), un carácter.

● Aumentan considerablemente el consumo de memoria por la

(108)

FIUBA Organización de Datos - Curso Servetto 108

Algoritmo Aritmético O(n)

(Predictor)

(109)

FIUBA Organización de Datos - Curso Servetto 109 A - B - C

Algoritmos Aritmético O(n)

(Predictor)

● Es una generalización del Algoritmo Aritmético de compresión.

● Separa las estructuras de Emisión y de Distribución de probabilidades. ● Para cada caracter (o cadena) se almacena una tabla de probabilidades

asociada, para considerar a todos los caracteres que le pueden seguir.

Dado el Contexto 1 A - B - C Dado el Contexto 2 A - B - C Dado el Contexto 3 1111 0000 Segmento de emisión 0101 0001 1011 0010 Emito '0'

(110)

FIUBA Organización de Datos - Curso Servetto 110

Algoritmos de Compresión

Predictores

● Ventajas de utilizar contextos

• Utilizar distintas tablas de probabilidades según el contexto ayuda a predecir mejor

• Una mejor predicción equivale a mejores modelos probabilísticos

• Mejores modelos equivalen a una menor emisión en bits.

(111)

FIUBA Organización de Datos - Curso Servetto 111

Algoritmos de Compresión

Predictores

● Desventajas de utilizar

contextos

• O (0) necesita una tabla de 256 posiciones(una para cada

carácter)

• O (1) necesita una tabla de

256x256 posiciones. O (2), una tabla de 256x256x256.

• El tamaño de las tablas crece exponencialmente.

• Si la fuente no tiene patrones repetidos (no es estructurada), utilizar contextos no mejora la compresión A - B - C - D - .. A - B - C - D - .. A - B - C - D - .. A - B - C - D - .. A - B - C - .. A - B - C - .. A - B - C - ..

(112)

FIUBA Organización de Datos - Curso Servetto 112

Algoritmo Aritmético

(Orden 1)

● Compresión de ABACAB:

Compresión del caracter ‘A' - (Posicion: 0) Contexto \b: A=1, B=1, C=1

Piso inicial: 0 - Techo Inicial 255 Intervalo: 256

N.Piso = 0 + 256 * 0 = 0 N. Techo = 0 + 256 * 1 / 3 - 1 = 84

Resultado de la normalización:

Piso: 00000000 (0) -> 00000000 (0) Techo: 01010100 (84) -> 10101001 (169) Emisión: 0 C. underflow: 0

Compresión del caracter ‘B' - (Posicion: 1)

Contexto A: A=1, B=1, C=1  Contexto A: A=1, B=2, C=1

Piso inicial: 0 - Techo Inicial 169 Intervalo: 170

N.Piso = 0 + 170 * 1 / 3 = 56 N. Techo = 0 + 170 * 2 / 3 - 1 = 112

Resultado de la normalización:

Piso 00111000 (56) -> 01110000 (112) Techo: 01110000 (112) -> 11100001 (225) Emisión: 0 C. underflow: 0

(113)

FIUBA Organización de Datos - Curso Servetto 113

Algoritmo Aritmético

(Orden 1)

● Compresión de ABACAB :

Compresión del caracter ‘A' - (Posicion: 2)

Contexto B: A=1, B=1, C=1  Contexto B: A=2, B=1, C=1

Piso inicial: 112 - Techo Inicial 225 Intervalo: 114

N.Piso = 112 + 114 * 0 / 3 = 112 N. Techo = 112 + 114 * 1 / 3 - 1 = 149

Resultado de la normalización:

Piso: 01110000 (112) -> 01000000 (64) Techo: 10010101 (149) -> 11010111 (215) Emisión: 0 C. underflow: 2

Compresión del caracter ‘C' - (Posicion: 3)

Contexto A: A=1, B=2, C=1  Contexto A: A=1, B=2, C=2

Piso inicial: 64 - Techo Inicial 215 Intervalo: 152

N.Piso = 64 + 152 * 3 / 4 = 178 N. Techo = 64 + 152 * 4 / 4 - 1 = 215

Resultado de la normalización:

Piso: 10110010 (178) -> 01001000 (72) Techo: 11010111 (215) -> 11011111 (223) Emisión: 100(Underflow) C. underflow: 1

(114)

FIUBA Organización de Datos - Curso Servetto 114

Algoritmo Aritmético

(Orden 1)

● Compresión de ABACAB:

Compresión del caracter ‘A' - (Posicion: 4)

Contexto C: A=1, B=1, C=1  Contexto C: A=2, B=1, C=1

Piso inicial: 72 - Techo Inicial 223 Intervalo: 152

N.Piso = 72 + 152 * 0 / 3 = 72 N. Techo = 72 + 152 * 1 / 3 - 1 = 121

Resultado de la normalización:

Piso: 01001000 (72) -> 00100000 (32) Techo: 01111001 (121) -> 11100111 (231) Emisión: 011(Underflow) C. underflow: 0

Compresión del caracter ‘B' - (Posicion: 5)

Contexto A: A=1, B=2, C=2  Contexto A: A=1, B=3, C=2

Piso inicial: 32 - Techo Inicial 231 Intervalo: 200

N.Piso = 32 + 200 * 1 / 5 = 72 N. Techo = 32 + 200 * 3 / 5 - 1 = 151

Al ser el ultimo caracter, se emite el piso, incluyendo los underflows: Piso: 01001000 (72) --- > Emisión: 01001000

(115)

FIUBA Organización de Datos - Curso Servetto 115

Algoritmo Aritmético

(Orden 1)

● Descompresión de ABACAB:

Descompresión del caracter ‘A‘ Contexto \b: A=1, B=1, C=1

●Rangos iniciales:

●C = [170 – 255]; B = [85 - 169] ; A = [0 – 84]

●Se leen 8 bits: 0010001 (32) -> Cae en el rango de la A(0-84) ●Se emite una A.

Descompresión del caracter ‘B‘

Contexto A: A=1, B=1, C=1  Contexto A: A=1, B=2, C=1

Se plantea el nuevo intervalo(0-84)(Overflow de 0)

Resultado de la normalización(Overflow de 0):

Piso: 00000000 (0) -> 00000000 (0) Techo: 01010100 (84) -> 10101001 (169)

Nuevos Intervalos:

C [113 – 169]; B [55 – 112] ; A [000 - 55]

Debido al overflow, descartamos el 1er bit leído anteriormente y leemos uno mas del archivo: 001000111 01000111 (71) -> Cae en el rango de la B

(116)

FIUBA Organización de Datos - Curso Servetto 116

Algoritmo Aritmético

(Orden 1)

● Descompresión de ABACAB:

Descompresión del caracter ‘A‘

Contexto B: A=1, B=1, C=1  Contexto B: A=2, B=1, C=1

Se plantea el nuevo intervalo(56-169)(Overflow de 0)

Resultado de la normalización(Overflow de 0):

Piso 00111000 (56) -> 01110000 (112) Techo: 01110000 (112) -> 11100001 (225) C [188 - 225]; B [150 - 187]; A [112 - 149] = [01110000 - 10010101]

Debido al overflow, descartamos el 1er bit leído anteriormente y leemos uno mas del archivo: 0010001101 10001110 (142) -> Cae en el rango de la A

Se emite una A.

Descompresión del caracter ‘C‘

Contexto A: A=1, B=2, C=1  Contexto A: A=1, B=2, C=2

Se plantea el nuevo intervalo(112-149)(Underflow de 2)

Resultado de la normalización(Underflow de 2):

Piso 01110000 (112) -> 01000000 (64) Techo: 10010101 (149) -> 110101111 (215)

Nuevos Intervalos:

C [178 - 215] ; B [102 – 177]; A [64 - 101]

Debido al Underflow, dejamos fijo el 1er bit en inspección y luego descartar tantos bits como underflows tengamos(2 bit en este caso, 0), completar del archivo leyendo los bits necesarios para 1 byte : 001(Fijo)00(Descartados)0110100(leídos)

10110100 (180) -> Cae en el rango de la C

(117)

FIUBA Organización de Datos - Curso Servetto 117

Algoritmo Aritmético

(Orden 1)

● Descompresión de ABACAB:

Descompresión del caracter ‘A‘

Contexto C: A=1, B=1, C=1  Contexto C: A=2, B=1, C=1

Se plantea el nuevo intervalo(178-215)(Overflow 1 y Underflow -> Cont. UF=1)

Resultado de la normalización(Overflow de 1 y Underflow de 1):

Piso: 10110010 (178) -> 01001000 (72) Techo: 11010111 (215) -> 11011111 (223)

Nuevos Intervalos:

C [173 - 223]; B [122 - 172] ; A [72 – 121]

Debido al Overflow, descartamos el bit que había quedado fijo.

Debido al Underflow, dejamos fijo el 1er bit en inspección y luego descartar tantos bits como underflows tengamos(1 bit en este caso, 1), completar del archivo leyendo los bits necesarios para 1 byte : 001(Descartado)000(Fijo)1(Descartado)1010010(leídos) 01010010 (82) -> Cae en el rango de la A

Se emite una A.

Descompresión del caracter ‘B‘

Contexto A: A=1, B=2, C=2  Contexto A: A=1, B=3, C=2

Se plantea el nuevo intervalo(72-121)(Overflow de 2)

Resultado de la normalización(Overflow de 2):

Piso: 01001000 (72) -> 00100000 (32) Techo: 01111001 (121) -> 11100111 (231)

Nuevos Intervalos:

C [152 - 231] ; B [72 – 151] ; A [32 - 71]

Debido al overflow, descartamos los 2 1eros bits leídos anteriormente y leemos 2 mas del archivo: 0010001101001000(Leidos) 01001000 -> Cae en el rango (es el piso) de la B

(118)

FIUBA Organización de Datos - Curso Servetto 118

Referencias

● Gordon Cormack and Nigel Horspool, "Data

Compression using Dynamic Markov Modelling", Computer Journal 30:6 (December 1987)

(119)

FIUBA Organización de Datos - Curso Servetto 119

Algoritmo PPMC

(Prediction by Partial

Matching Mode C)

(120)

FIUBA Organización de Datos - Curso Servetto 120

Algoritmo PPMC

(Predictor)

• Compresor predictor con base estadística (utiliza un aritmético).

• No utiliza un solo contexto para comprimir, sino varios para una mejor predicción (hasta 6).

• Soluciona algunas de las desventajas de utilizar contextos.

(121)

FIUBA Organización de Datos - Curso Servetto 121

Algoritmo PPMC

(Predictor)

• Problema de utilización de contextos al inicializar todos los caracteres en forma equiprobable.

• En el contexto del carácter “Q”, una “U” debería tener probabilidad casi 1.

• Luego de 20 veces de encontrado el patrón, la probabilidad es de, solamente, 21/277.

(122)

FIUBA Organización de Datos - Curso Servetto 122

Algoritmo PPMC

(Predictor)

• Si inicializamos los caracteres en frecuencia 0, no tenemos probabilidades para emitir.

• Se agrega un carácter especial (carácter de ESCAPE), que se inicializa con frecuencia 1.

• Cuando no se encuentra el carácter a emitir en el contexto actual, se emite un ESCAPE y se

(123)

FIUBA Organización de Datos - Curso Servetto 123

Algoritmo PPMC

(Predictor)

• Compresión:

• Se usan varios contextos.

• Se comienza desde el contexto de mayor orden y si el carácter a emitir se encuentra con probabilidad 0, se emite un ESCAPE y se va al contexto

inmediatamente menor.

• El último contexto es el -1. Contiene a los 256

caracteres ASCII y al EOF con frecuencia 1 (fija para todos).

(124)

FIUBA Organización de Datos - Curso Servetto 124

Algoritmo PPMC

(Predictor)

• Exclusión:

– Se excluye del contexto actual, los caracteres leídos en contextos anteriores.

– Si pasé por un contexto donde hubo caracteres con frecuencia mayor a 0 y no los utilicé, tampoco los necesito en la tabla del contexto actual.

Referencias

Documento similar

[r]

SECUNDARIA COMPRENDE LOS

La primera opción como algoritmo de compresión para secuencias biológicas que sugirió la directora del proyecto fue la adaptación de los algoritmos de Lempel-Ziv al alfabeto formado

U-Ranking cuenta con la colaboración del Ministe- rio de Universidades, al permitirnos el acceso al Sistema Integrado de Información Universitaria (SIIU). El SIIU es

[r]

Además, como señalan McCullagh y Nelder (1989), en el contexto del análisis de una variable de recuento mediante el modelo lineal general se topa a menudo con la presencia

Plan de Acción 2008-2012 de la Estrategia de Ahorro y Eficiencia Energética en España.. Proyecto revitalización del

Tener en cuenta, que la interfaz de Selecci´ on de Zona de datos dispone de un panel de configuraci´ on (Ver Figura 5.14), el cual permite realizar acciones sobre los mapas como