COMPRESSÃO ARITMÉTICA

Slides:



Advertisements
Apresentações semelhantes
Inteligência Artificial
Advertisements

ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Analise de Algoritmos e Notação Assintótica
Algoritmos para Geração de Variáveis Aleatórias
Amintas engenharia.
Desenvolvendo Algoritmos
1- É O CRIADOR DA TEORIA DA INFORMAÇÃO George Boole Blase Pascal V
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Lógica Fuzzy Aplicada a Sistemas de Diagnóstico
Engenharia de Computação.
INTRODUÇÃO À ENGENHARIA DE COMPUTAÇÃO Prof. Wanderley
Compressão de Dados ORI Ednaldo Pizzolato.
Centro Federal de Educação Tecnológica do Espírito Santo
Conteúdo: - Variáveis Especiais.
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Compressão de Dados.
Estatística Básica Utilizando o Excel
Estatística 8 - Distribuições de Probabilidade de Variáveis Aleatórias Contínuas Prof. Antonio Fernando Branco Costa Página.
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Capítulo 5 Medidas Descritivas.
Conversão de bases binário decimal – decimal binário
ELEMENTOS DE ORGANIZAÇÃO DE COMPUTADORES : HARDWARE : MEMÓRIA, DADOS
Para consertar uma engrenagem, é necessário substituir uma peça circular danificada por outra, cujo raio r, em u.c., deve satisfazer à relação.
QUESTÕES de 01 a 03 INSTRUÇÃO: Para responder a essas questões, identifique as afirmativas verdadeiras e, em seguida, marque na Folha de Respostas a alternativa.
Crescimento de Funções
Decodificador 2 para 4 (2 : 4)
Complexidade de Algoritmos
1 4.6 – Variáveis - introdução Nesta altura (ao nível da programação) interessa saber que um computador tem: Nesta altura (ao nível da programação) interessa.
UNIVERSIDADE FEDERAL DE UBERLÂNDIA FACULDADE DE MATEMÁTICA
ESTATÍSTICA: O estudo numérico dos fatos sociais
Coordenação Geral de Ensino da Faculdade
Redes de Computadores Transmissão da Informação.
Processamento Digital de Imagens
Compressão de Textos Juliano Palmieri Lage.
Variável Aleatória Contínua.
Prática de Ensino de Matemática I Aula 02
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
ORDENAÇÃO POR CONTAGEM
Fábio de Oliveira Borges
Algoritmos Crescimento de Funções
CLASSES: SÃO INTERVALOS DE VARIAÇÃO DA VARIÁVEL.
ENGA78 – Síntese de Circuitos Digitais
Profª Fabiana Damasco Unidade de Ensino Paz
INF-103: Avaliação de Desempenho Carlos Alberto Kamienski ( ) UFABC Geração de Números Aleatórios.
Capítulo II Gramáticas e Linguagens
Campus de Caraguatatuba Licenciatura em Matemática Semestre de 2013
Máquina de Turing Universal
André Luiz da Costa Carvalho
SISTEMAS OPERACIONAIS I Memória Virtual e Paginação
Programas Inteiros -Seleção de Investimentos Problema: Uma empresa tem $ de capital disponível para novos investimentos. Ela pré-selecionou 4 bons.
Aula 05 Distribuição de freguência Prof. Diovani Milhorim
Algoritmos de Chave Pública
PROCESSAMENTO DIGITAL DE IMAGENS
FUNDAMENTOS DE COMPUTAÇÃO
Fernando Gláuber Júnior Luana. Fase quente Fase fria.
Estrutura de Dados III Revisão
Algoritmo de Huffman.
Complexidade de Computação Katia Guimarães. Avaliando a Qualidade de um Algoritmo É preciso ter bem definido –O que é dado de entrada e –O que é esperado.
Analise de Algoritmos e Notação Assintótica
INTRODUÇÃO AOS MÉTODOS NUMÉRICOS Professor: Dr. Edwin B. Mitacc Meza
Técnicas de Compressão de Dados
Codificadores e Decodificadores
PROCESSO DE POISSON [ Parte II ] 1 - INTRODUÇÃO 2 - PROCESSO DE POISSON 3 - TEMPOS DE CHEGADA 4 - TEMPOS ENTRE CHEGADAS 5 - PROCESSOS DE RENOVAÇÃO 6 -
Aula 03: Efeito de iluminação sequencial com LED e Efeito interativo de iluminação com LED
Distribuição de freqüências
Profª Juliana Schivani MEDIDAS.
Codificadores e Decodificadores Prof. Lucas Santos Pereira
Profª Juliana Schivani MEDIDAS.
Transcrição da apresentação:

COMPRESSÃO ARITMÉTICA 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ímbolo Tamanho 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 a2 0.02 11 a3 0.03 10

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

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.

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.

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)

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:

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.

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.

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:

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

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

Char Cálculo do index Low/High S W I 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.5 + ( 1 – 0.5 )*0.5 = 0.75 7500 7500 H= 0.5 + ( 1 – 0.5 )*1.0 = 1.0 9999 9999

Char Cálculo do index Low/High _ M I S 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

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

Exemplo - Decodificação LOW=0000, HIGH=9999, CODE = 7175 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

Exemplo - Decodificação 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 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 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 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 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.