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

Upload: internet

Post on 17-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

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