Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

21
Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa

Transcript of Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Page 1: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Teoria da Informação

COMPRESSÃOARITMÉTICA

Epifanio Diniz

Giovani Facchini

Renato Costa

Page 2: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Motivação

Considere uma fonte com alfabeto A={a1, a2, a3), com P(a1)=0.95, P(a2)=0.02 e P(a3)=0.03. A entropia, o código de Huffman e o tamanho médio do código estão dispostos abaixo.

H=0.335 bits/símboloTamanho médio=1.05 bits/símbolo

Diferença de 0.715 bits/símbolo que é 213% da entropia!

Letra Probabilidade Código

a1 0.95 0

a2 0.02 11

a3 0.03 10

Page 3: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Motivação

• A codificação aritmética resolve o problema de probabilidades acumuladas.

• Bastante útil também com pequenos alfabetos.

Page 4: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Idéia Principal

• É mais eficiente atribuir um código para um seqüência em particular do que gerar um código para cada símbolo.

• Identificador ÚNICO é gerado para representar a seqüência, este é uma fração binária.

• Ao contrário do algoritmo de Huffman, que precisa de códigos para cada seqüência possível (crescimento exponencial), a Codificação Aritmética gera um código único.

Page 5: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Codificação

• Para distinguir uma seqüência de símbolos é necessário criar um código único. O código pode ser um número dentro do intervalo [0,1).

• Necessitamos de uma função mapeando as seqüências nesse intervalo. A função chama-se função de distribuição acumulativa.

Page 6: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Modelo Matemático

• Mapeamento dos símbolos da fonte em números:

X(ai)=i ai Є A

• Onde A={a1,a2,...,am} é o alfabeto de entrada. X é a variável randômica. A função de densidade de probabilidade para a variável randômica é dada por:

P(X = i) = P(ai)

• E a função de densidade cumulativa é dada por:

Fx(i) = ∑ik=1 P(X = k)

Page 7: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Gerando uma Tag

• Exemplo: considere um alfabeto de três letras A={a1,a2,a3}, com P(a1)=0.7, P(a2)=0.1 e P(a3)=0.2. Com a função de densidade temos Fx(1)=0.7, Fx(2)=0.8 e Fx(3 )=1. Particionando o intervalo como na figura a seguir:

Page 8: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Procedimento Matemático

• Para facilitar, começaremos com uma seqüência de tamanho 1. Para o alfabeto A mapeamos cada símbolo para números reais com a fórmula:

• Analogamente podemos afirmar:

• Com isso, cada símbolo do alfabeto de entrada tem um valor único. Este é exatamente o ponto intermediário do intervalo, mas podemos pegar qualquer número dentro do intervalo para representar o código de entrada.

Page 9: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Procedimento Matemático

• Agora veremos o procedimento para geração de uma tag de uma seqüência de comprimento inteiro qualquer. Para a seqüência xi temos:

• Onde y < x significa que y precede x na ordem e o sobrescrito significa o tamanho da seqüência.

Page 10: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Geração do Limite Superior e Inferior

• Para conseguir o limite superior e inferior do intervalo que queremos avaliar temos:

• Com isso temos o intervalo no qual podemos escolher um número qualquer. Para pegar-se o ponto intermediário usa-se:

Page 11: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Exemplo - Codificação

Expressar a frase “SWISS_MISS” em um número, através do método de Codificação Aritmética por Deslocamento.

Caracter Freqüência Probabilidade Intervalo CumFreqS 5 5 / 10 = 0.5 [0.5, 1.0) 5W 1 1 / 10 = 0.1 [0.4, 0.5) 4I 2 2 / 10 = 0.2 [0.2, 0.4) 2

M 1 1 / 10 = 0.1 [0.1, 0.2) 1_ 1 1 / 10 = 0.1 [0.0, 0.1) 0

Page 12: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

LOW=0000, HIGH=9999

NovoLow = VelhoLow + Intervalo*IntervaloLow(X)

NovoHigh = VelhoLow + Intervalo*InvertaloHigh(X)

Intervalo = VelhoHigh - VelhoLow

Exemplo - Codificação

Page 13: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

L= 0 + ( 1 – 0 )*0.5 = 0.5 5000 5000

H= 0 + ( 1 – 0 )*1.0 = 1.0 9999 9999

L= 0.5 + ( 1 – 0.5 )*0.4 = 0.7 7000 7 0000

H= 0.5 + ( 1 – 0.5 )*0.5 = 0.75 7499 7 4999

L= 0 + ( 0.5 - 0 )*0.2 = 0.1 1000 1 0000

H= 0 + ( 0.5 - 0 )*0.4 = 0.2 1999 1 9999

L= 0 + ( 1 – 0 )*0.5 = 0.5 5000 5000

H= 0 + ( 1 – 0 )*1.0 = 1.0 9999 9999

L= 0.5 + ( 1 – 0.5 )*0.5 = 0.75 7500 7500

H= 0.5 + ( 1 – 0.5 )*1.0 = 1.0 9999 9999

S

W

I

S

S

Char Cálculo do index Low/High

Page 14: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

L= 0.75 + ( 1 – 0.75 )*0.0= 0.75 7500 7 5000

H= 0.75 + ( 1 – 0.75 )*0.1=0.775 7749 7 7499

L= 0.5 + (0.75 – 0.5)*0.1=0.525 5250 5 2500

H= 0.5 + (0.75 – 0.5)*0.2 = 0.55 5499 5 4999

L= 0.25 + (0.5 – 0.25)*0.2 = 0.3 3000 3 0000

H= 0.25 + (0.5 – 0.25)*0.4 =0.35 3499 3 4999

L= 0 + ( 0.5 – 0 )*0.5 =0.25 2500 2500

H= 0 + ( 0.5 – 0 )*1.0 = 0.5 4999 4999

L= 0.25 + (0.5 – 0.25)*0.5=0.375 3750 3750

H= 0.25 + (0.5 – 0.25)*1.0 = 0.5 4999 4999

_

M

I

S

S

Char Cálculo do index Low/High

Page 15: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Valor de saída:

717533750

Exemplo - Codificação

Page 16: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

Exemplo - Decodificação

index = ((Code-Low+1)*10-1)/(High-Low+1)

Low = Low+(High-Low+1) * LowCumFreq[X]/10

High = Low+(High-Low+1) * HighCumFreq[X]/10-1

LOW=0000, HIGH=9999, CODE = 7175

Page 17: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

1. index= [(7175 - 0 + 1) x 10 - 1]/(9999 - 0 + 1) = 7.1759

-> 7. Symbol "s" is selected.

Low = 0 + (9999-0+ 1) x 5/10 = 5000.

High = 0+ (9999-0+ 1) x 10/10-1 = 9999.

2. index= [(7175 - 5000 + 1) x 10 - 1]/(9999 - 5000 + 1) = 4.3518

-> 4. Symbol "w" is selected.

Low = 5000 + (9999 - 5000 + 1) x 4/10 = 7000.

High = 5000 + (9999 - 5000 + 1) x 5/10 - 1 = 7499.

After the 7 is shifted out, Low=0000, High=4999, and Code=1753.

Exemplo - Decodificação

Page 18: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

3. index= [(1753 - 0 + 1) x 10 - 1]/(4999 - 0 + 1) = 3.5078

-> 3. Symbol "I" is selected.

Low = 0+ (4999 -0+ 1) x 2/10 = 1000.

High = 0+ (4999 - 0+ 1) x 4/10-1 = 1999.

After the 1 is shifted out, Low=0000, High=9999, and Code=7533.

4. index= [(7533 - 0 + 1) x 10 - 1]/(9999 - 0 + 1) = 7.5339

-> 7. Symbol "s" is selected.

Low = 0+(9999-0+ 1) x 5/10 = 5000.

High = 0+(9999-0+ 1) x 10/10-1 = 9999.

Exemplo - Decodificação

Page 19: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

5. index= [(7533 - 5000 + 1) x 10 - 1]/(9999 - 5000 + 1) = 5.0678

-> 5. Symbol "s" is selected.

Low = 5000 + (9999 - 5000 + 1) x 5/10 = 7500.

High = 5000 + (9999 - 5000 + 1) x 10/10 -1 = 9999.

6. index= [(7533 - 7500 + 1) x 10 - 1]/(9999 - 7500 -I- 1) = 0.1356

-> 0. Symbol "u" is selected.

Low = 7500 + (9999 - 7500 + 1) x 0/10 = 7500.

High = 7500 + (9999 - 7500 + 1) x 1/10 - 1 = 7749.

After the 7 is shifted out, Low=5000, High=7499, and Code=5337.

Exemplo - Decodificação

Page 20: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

7. index= [(5337 - 5000 + 1) x 10 - 1]/(7499 - 5000 + 1) = 1.3516

-> 1. Symbol "M" is selected.

Low = 5000 + (7499 - 5000 + 1) x 1/10 = 5250.

High = 5000 + (7499 - 5000 + 1) x 2/10 - 1 = 5499.

After the 5 is shifted out, Low=2500, High=4999, and Code=1375.

8. index= [(3375 - 2500 + 1) x 10 - 1]/(4999 - 2500 + 1) = 3.5036

-> 3. Symbol "I" is selected.

Low = 2500 + (4999 - 2500 + 1) x 2/10 = 3000.

High = 2500 + (4999 - 2500 + 1) x 4/10-1 = 3499.

After the 3 is shifted out, Low=0000, High=4999, and Code=3750.

Exemplo - Decodificação

Page 21: Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa.

9. index= [(3750 - 0 + 1) x 10 - 1]/(4999 - 0 + 1) = 7.5018

-> 7. Symbol "s" is selected.

Low = 0+(4999-0+1) x 5/10 = 2500.

High = 0+ (4999-0+ 1) x 10/10-1 = 4999.

10. index= [(3750 - 2500 + 1) x 10 - 1]/(4999 - 2500 + 1) = 5.0036

-> 5. Symbol "s" is selected.

Low = 2500 + (4999 - 2500 + 1) x 5/10 = 3750.

High = 2500 + (4999 - 2500 + 1) x 10/10 - 1 = 4999.

Exemplo - Decodificação