A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Teoria da Informação COMPRESSÃO ARITMÉTICA Epifanio Diniz Giovani Facchini Renato Costa."— Transcrição da apresentação:

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

2 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ímbolo Tamanho médio=1.05 bits/símbolo Diferença de 0.715 bits/símbolo que é 213% da entropia! LetraProbabilidadeCódigo a10.950 a20.0211 a30.0310

3 Motivação A codificação aritmética resolve o problema de probabilidades acumuladas. Bastante útil também com pequenos alfabetos.

4 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.

5 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.

6 Modelo Matemático Mapeamento dos símbolos da fonte em números: X(a i )=i a i Є A Onde A={a 1,a 2,...,a m } é 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(a i ) E a função de densidade cumulativa é dada por: F x (i) = i k=1 P(X = k)

7 Gerando uma Tag Exemplo: considere um alfabeto de três letras A={a 1,a 2,a 3 }, com P(a 1 )=0.7, P(a 2 )=0.1 e P(a 3 )=0.2. Com a função de densidade temos F x (1)=0.7, F x (2)=0.8 e F x (3 )=1. Particionando o intervalo como na figura a seguir:

8 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.

9 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 x i temos: Onde y < x significa que y precede x na ordem e o sobrescrito significa o tamanho da seqüência.

10 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:

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

12 LOW=0000, HIGH=9999 NovoLow = VelhoLow + Intervalo*IntervaloLow(X) NovoHigh = VelhoLow + Intervalo*InvertaloHigh(X) Intervalo = VelhoHigh - VelhoLow Exemplo - Codificação

13 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 70000 H= 0.5 +( 1 – 0.5 )*0.5 = 0.75 7499 74999 L= 0 +( 0.5 - 0 )*0.2 = 0.1 1000 10000 H= 0 +( 0.5 - 0 )*0.4 = 0.2 1999 19999 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 SWISSSWISS CharCálculo do index Low/High

14 L= 0.75 +( 1 – 0.75 )*0.0= 0.75 7500 75000 H= 0.75 +( 1 – 0.75 )*0.1=0.775 7749 77499 L= 0.5 +(0.75 – 0.5)*0.1=0.525 5250 52500 H= 0.5 +(0.75 – 0.5)*0.2 = 0.55 5499 54999 L= 0.25 +(0.5 – 0.25)*0.2 = 0.3 3000 30000 H= 0.25 +(0.5 – 0.25)*0.4 =0.35 3499 34999 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 _MISS_MISS CharCálculo do index Low/High

15 Valor de saída: 717533750 Exemplo - Codificação

16 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

17 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

18 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

19 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

20 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

21 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


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

Apresentações semelhantes


Anúncios Google