Compactação de Dados Letícia Rodrigues Bueno

Documentos relacionados
Filas de Prioridades Letícia Rodrigues Bueno

Heapsort Letícia Rodrigues Bueno

Compactação de Dados. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Seção 12.5 em diante.

Listas de Prioridade. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC.

Pré-Processamento de Documentos

Aplicação de Árvores: Código de Huffman

Organização de Arquivos. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira Cristina D. A. Ciferri

Breve Introdução à Complexidade Assintótica de Algoritmos Letícia Rodrigues Bueno

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Aula 28: Listas de Prioridades

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Organização de Arquivos

Organização de Arquivos

Método Guloso. Troco mínimo. Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) junho/2012. Troco mínimo. Troco mínimo

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

COMPRESSÃO E CODIFICAÇÃO SEM PERDAS. Mauro Nogueira Mônica Festa Paulo Antiquera

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Compressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso:

Quicksort Letícia Rodrigues Bueno

Universidade Federal de Mato Grosso do Sul Estruturas de Dados e Programação. Processamento de Cadeias

Estrutura de dados 1. Processamento de Cadeias de Caracteres

Estruturas de Dados. Árvores AVL: Partes I e II. Desempenho de ABBs (Revisão)

EET-49 Comunicações II

Estruturas de Dados 2

Módulo 5 Codificação Sistemas Multimédia Ana Tomé José Vieira

Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno

AULA A 6 ESTRUTURA DE DADOS. Compressão de dados

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Notação Assintótica Letícia Rodrigues Bueno

Organização de arquivos para desempenho. Manutenção de Arquivos. Compressão de dados. Compressão. Notação diferenciada. Técnicas

ESTRUTURA DE DADOS DCC013

4 C odigos de Huffman 4.1 Arvores de c odigo folhas os internos n ıvel altura Arvore bin aria arvore bin aria ordenada

Introdução. Estrutura de Dados II Prof Jairo Francisco de Souza

Compressão Sem Perdas: Codificações Huffman e Aritmética. Adelar da Silva Queiróz Marcelo Teixeira Thiago da Silva Sodré

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

INF 1010 Estruturas de Dados Avançadas

Nivio Ziviani. Conjunto de transparências elaborado por Nivio Ziviani, Patrícia Correia e Fabiano C. Botelho

Algoritmos gulosos (greedy) CLRS

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Algoritmo de Dijkstra Estudo e Implementação

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Teoria da Informação

Árvores de Pesquisa (Parte II)

Organização de Arquivos. SCE-183 Algoritmos e Estruturas de Dados II

Sistemas de Numeração. Tiago Alves de Oliveira

ELEMENTOS MULTIMÍDIA Compressão de dados. Prof. Fabiano Taguchi 06/11/2014.

Tipos de códigos de fonte

Problema de escalonamento

Heapsort ordenação por árvore de seleção

Code Compression for Embedded Systems

Bit (Binary Digit) é a menor unidade de armazenamento de informação dentro do computador; Byte é a união de 8 bits capaz de representar 256

INF 1010 Estruturas de Dados Avançadas

Heapsort ordenação por árvore de seleção

Estrutura de Dados. Estrutura de Dados Recursividade. Exemplo: 5! = 5 x 4! 4! = 4 x 3! 3! = 3 X 2! 2! = 2 x 1! 1! = 1 x 0!

Árvores de Pesquisa (Parte II)

Tipos de Índices. Profa. Dra. Cristina Dutra de Aguiar Ciferri

TÉCNICAS DE CODIFICAÇÃO DE SINAIS

Processamento de Imagem. Compressão de Imagens Professora Sheila Cáceres

Teoria dos Grafos Aula 8

Algoritmos de ordenação: Inserção e Shellsort

Gerenciamento de Memória. Aleardo Manacero Jr.

Web site. Profa. Patrícia Dockhorn Costa.

Nivio Ziviani. Conjunto de transparências elaborado por Nivio Ziviani, Patrícia Correia e Fabiano C. Botelho.

Estrutura de Dados. Plano de Ensino. Vilson Heck Junior. Campus Lages. Instituto Federal de Santa Catarina

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 2 1: Figura 2 2: Figura 2 3: Figura 2 4:

Engenharia Civil. Representação da Informação. Introdução à Computação

6 Inserção Seletiva de Nulos

Processamento Cosequencial: Ordenação Interna e Externa. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira Cristina D. A.

Teoria dos Grafos Aula 8

Algoritmos e Estruturas de Dados I Aula 15 Árvores de busca balanceadas (e mais...)

Métodos de Pesquisa de Dados (II) Árvore N-ária de Pesquisa

Trabalho Prático: Camada de Enlace de Dados Enquadramento

Ordenação e Busca em Arquivos

Busca em Memória Primária Estrutura de Dados II

Busca em Memória Primária Estrutura de Dados II

SCC0601 Introdução à Ciência da Computação II. Prof. Lucas Antiqueira

Abordagens para Resolução de Problemas

Compressão de Textos

SM - Sistemas Multimédia CODIFICAÇÃO DE FONTE (parte 2) 4.º / 6.º semestre LEIC (verão 2016/2017)

Strings (Compressão) Estrutura de Dados II Jairo Francisco de Souza

Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011

Algoritmos de Compressão sem Perdas

Compressão de Dados. Prof. Flávio Humberto Cabral Nunes

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof Márcio Bueno. / Material da Prof a Ana Eliza

Unidades de Medida. Maria de Fátima de Freitas Bueno Marcílio Fundamentos de Informática

Algoritmos em Strings (compressão de texto)

Projeto e Análise de Algoritmos

Pesquisa Linear. Adriano J. Holanda 15/3/2016

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

COMUNICAÇÃO DIGITAL INTRODUÇÃO À TEORIA DE INFORMAÇÃO

Árvores Binárias e AVL Felipe Barros Pontes Gustavo Márcio de Morais Cunha Márcio de Medeiros Ribeiro

Técnicas de análise de algoritmos

Algoritmos em Grafos: Caminho Mínimo

Fabio Bento

Aula 15 Árvores Digitais / Trie

MC3305 Algoritmos e Estruturas de Dados II. Aula 02 Hashing. Prof. Jesús P. Mena-Chalco.

Transcrição:

Compactação de Dados Letícia Rodrigues Bueno UFABC

Compactação de Dados: Introdução

Objetivo: Compactação de Dados: Introdução

Compactação de Dados: Introdução Objetivo: 1. minimizar espaço de memória utilizado;

Compactação de Dados: Introdução Objetivo: 1. minimizar espaço de memória utilizado; 2. minimizar custo da transmissão dos arquivos na rede ou tempo de leitura do arquivo no disco;

Compactação de Dados: Introdução Objetivo: 1. minimizar espaço de memória utilizado; 2. minimizar custo da transmissão dos arquivos na rede ou tempo de leitura do arquivo no disco; 3. minimizar tempo de pesquisa no arquivo.

Compactação de Dados: Introdução

Compactação de Dados: Introdução Possível solução: substituir símbolos do texto por outros com menor número de bits ou bytes

Compactação de Dados: Introdução Possível solução: substituir símbolos do texto por outros com menor número de bits ou bytes (codificação de mensagens);

Compactação de Dados: Introdução Possível solução: substituir símbolos do texto por outros com menor número de bits ou bytes (codificação de mensagens); 1. Dada uma cadeia de caracteres (mensagem);

Compactação de Dados: Introdução Possível solução: substituir símbolos do texto por outros com menor número de bits ou bytes (codificação de mensagens); 1. Dada uma cadeia de caracteres (mensagem); 2. problema: codificar mensagem através de atribuição de códigos a símbolos;

Compactação de Dados: Introdução Possível solução: substituir símbolos do texto por outros com menor número de bits ou bytes (codificação de mensagens); 1. Dada uma cadeia de caracteres (mensagem); 2. problema: codificar mensagem através de atribuição de códigos a símbolos; 3. tabela de códigos armazenada para decodificação;

Algoritmo de Frequência de Caracteres

Algoritmo de Frequência de Caracteres BBBEAAAAFFHHHHHCBMMALLLCDDBBBBBBBCC

Algoritmo de Frequência de Caracteres BBBEAAAAFFHHHHHCBMMALLLCDDBBBBBBBCC 3B1E4A2F5H1C1B2M1A3L1C2D7B2C

Algoritmo de Frequência de Caracteres BBBEAAAAFFHHHHHCBMMALLLCDDBBBBBBBCC 3B1E4A2F5H1C1B2M1A3L1C2D7B2C 3BE4A2F5HCB2MA3LC2D7B2C

Algoritmo de Frequência de Caracteres BBBEAAAAFFHHHHHCBMMALLLCDDBBBBBBBCC 3B1E4A2F5H1C1B2M1A3L1C2D7B2C 3BE4A2F5HCB2MA3LC2D7B2C texto não pode ter caracteres numéricos;

Algoritmo de Frequência de Caracteres BBBEAAAAFFHHHHHCBMMALLLCDDBBBBBBBCC 3B1E4A2F5H1C1B2M1A3L1C2D7B2C 3BE4A2F5HCB2MA3LC2D7B2C texto não pode ter caracteres numéricos; pode-se utilizar uma representação para diferenciar símbolos e frequências;

Algoritmo de Frequência de Caracteres BBBEAAAAFFHHHHHCBMMALLLCDDBBBBBBBCC 3B1E4A2F5H1C1B2M1A3L1C2D7B2C 3BE4A2F5HCB2MA3LC2D7B2C texto não pode ter caracteres numéricos; pode-se utilizar uma representação para diferenciar símbolos e frequências; AAA33333BA6666888DDDDDDD99999999999AABBB

Algoritmo de Frequência de Caracteres BBBEAAAAFFHHHHHCBMMALLLCDDBBBBBBBCC 3B1E4A2F5H1C1B2M1A3L1C2D7B2C 3BE4A2F5HCB2MA3LC2D7B2C texto não pode ter caracteres numéricos; pode-se utilizar uma representação para diferenciar símbolos e frequências; AAA33333BA6666888DDDDDDD99999999999AABBB 3A5@3BA4@63@87D11@92A3B

proposto em 1952; Algoritmo de Huffman

Algoritmo de Huffman proposto em 1952; ideia básica: atribuir códigos mais curtos a símbolos com frequências altas;

Algoritmo de Huffman proposto em 1952; ideia básica: atribuir códigos mais curtos a símbolos com frequências altas; implementação tradicional: considera caractere como símbolo (comprime texto em 25%);

Algoritmo de Huffman proposto em 1952; ideia básica: atribuir códigos mais curtos a símbolos com frequências altas; implementação tradicional: considera caractere como símbolo (comprime texto em 25%); considerar palavras como símbolos comprime texto em 60%;

Algoritmo de Huffman Conjunto de símbolos: S = {s 1, s 2,..., s n }, n > 1;

Algoritmo de Huffman Conjunto de símbolos: S = {s 1, s 2,..., s n }, n > 1; f i é frequência de s i no texto, para 1 i n;

Algoritmo de Huffman Conjunto de símbolos: S = {s 1, s 2,..., s n }, n > 1; f i é frequência de s i no texto, para 1 i n; Queremos atribuir um código a cada símbolo para compactar o texto todo;

Algoritmo de Huffman Conjunto de símbolos: S = {s 1, s 2,..., s n }, n > 1; f i é frequência de s i no texto, para 1 i n; Queremos atribuir um código a cada símbolo para compactar o texto todo; Nenhum código deve ser prefixo de outro: árvore binária de prefixo;

Algoritmo de Huffman Conjunto de símbolos: S = {s 1, s 2,..., s n }, n > 1; f i é frequência de s i no texto, para 1 i n; Queremos atribuir um código a cada símbolo para compactar o texto todo; Nenhum código deve ser prefixo de outro: árvore binária de prefixo; Cada símbolo s i é associado a uma folha da árvore;

Algoritmo de Huffman Conjunto de símbolos: S = {s 1, s 2,..., s n }, n > 1; f i é frequência de s i no texto, para 1 i n; Queremos atribuir um código a cada símbolo para compactar o texto todo; Nenhum código deve ser prefixo de outro: árvore binária de prefixo; Cada símbolo s i é associado a uma folha da árvore; Códigos dos símbolos são sequências binárias;

Algoritmo de Huffman Conjunto de símbolos: S = {s 1, s 2,..., s n }, n > 1; f i é frequência de s i no texto, para 1 i n; Queremos atribuir um código a cada símbolo para compactar o texto todo; Nenhum código deve ser prefixo de outro: árvore binária de prefixo; Cada símbolo s i é associado a uma folha da árvore; Códigos dos símbolos são sequências binárias; Vantagem de utilizar código de prefixo: facilidade para codificação e decodificação;

Algoritmo de Huffman: (de)codificação

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101 0101

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101 0101 0101

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101 0101 0101 0100

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101 0101 0101 0100 0101

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101 0101 0101 0100 0101 1

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101 0101 0101 0100 0101 1 0100

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101 0101 0101 0100 0101 1 0100 0100

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101 0101 0101 0100 0101 1 0100 0100 0100

Algoritmo de Huffman: (de)codificação s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 s 1 :00 s 2 :0100 s 3 :0101 s 4 :011 s 5 :1 0 s 1 1 s 2 s 3 s 4 s 5 011 0101 0101 00 0101 00 011 1 00 0101 0101 0101 0101 0101 0100 0101 1 0100 0100 0100 011

Algoritmo de Huffman Se árvore de prefixo T é conhecida, (de)codificação é feita em O(m) onde m é o tamanho da sequência binária codificada;

Algoritmo de Huffman Se árvore de prefixo T é conhecida, (de)codificação é feita em O(m) onde m é o tamanho da sequência binária codificada; Para 0110101010100010100011100010101010101 01010101010001011010001000100011, custo c(t ) = 69;

Algoritmo de Huffman Se árvore de prefixo T é conhecida, (de)codificação é feita em O(m) onde m é o tamanho da sequência binária codificada; Para 0110101010100010100011100010101010101 01010101010001011010001000100011, custo c(t ) = 69; É necessário minimizar c(t );

Algoritmo de Huffman Se árvore de prefixo T é conhecida, (de)codificação é feita em O(m) onde m é o tamanho da sequência binária codificada; Para 0110101010100010100011100010101010101 01010101010001011010001000100011, custo c(t ) = 69; É necessário minimizar c(t ); Árvore mínima ou árvore de Huffman: árvore de prefixo T com c(t ) mínimo;

Algoritmo de Huffman

Algoritmo de Huffman s 1 :101 s 2 :111 s 3 :0 s 4 :110 s 5 :100 s 3 21 12 5 7 s 5 s 1 s 4 s 2 f 1 :3 f 2 :4 f 3 :9 f 4 :3 f 5 :2

Algoritmo de Huffman s 1 :101 s 2 :111 s 3 :0 s 4 :110 s 5 :100 s 3 21 12 5 7 s 5 s 1 s 4 s 2 f 1 :3 f 2 :4 f 3 :9 f 4 :3 f 5 :2 s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 produz

Algoritmo de Huffman s 1 :101 s 2 :111 s 3 :0 s 4 :110 s 5 :100 s 3 21 12 5 7 s 5 s 1 s 4 s 2 f 1 :3 f 2 :4 f 3 :9 f 4 :3 f 5 :2 s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 produz 110001010101110100101000001110100111111111110

Algoritmo de Huffman s 1 :101 s 2 :111 s 3 :0 s 4 :110 s 5 :100 s 3 21 12 5 7 s 5 s 1 s 4 s 2 f 1 :3 f 2 :4 f 3 :9 f 4 :3 f 5 :2 s 4 s 3 s 3 s 1 s 3 s 1 s 4 s 5 s 1 s 3 s 3 s 3 s 3 s 3 s 2 s 3 s 5 s 2 s 2 s 2 s 4 produz 110001010101110100101000001110100111111111110 que tem c(t ) = 45 e que é mínima.

Ideia do Algoritmo de Huffman

Ideia do Algoritmo de Huffman f(t ) f(t") T T"

Ideia do Algoritmo de Huffman f(t ) f(t") = f(t )+f(t") T T" T T"

Construção da Árvore de Huffman

Construção da Árvore de Huffman s 1 s 2 s 3 s 4 s 5

Construção da Árvore de Huffman s 1 s 2 s 3 s 4 s 5 5 s 2 s 3 s 4 s 1 s 5

Construção da Árvore de Huffman s 1 s 2 s 3 s 4 s 5 5 s 2 s 3 s 4 s 1 s 5 5 7 s 3 s 1 s 5 s 4 s 2

Construção da Árvore de Huffman 5 7 s 3 s 1 s 5 s 4 s 2

Construção da Árvore de Huffman 5 7 s 3 s 1 s 5 s 4 s 2 12 s 3 5 7 s 1 s 5 s 4 s 2

Construção da Árvore de Huffman 5 12 7 s 3 s 1 s 5 s 4 s 2

Construção da Árvore de Huffman 5 12 7 s 3 s 1 s 5 s 4 s 2 s 3 21 12 5 7 s 1 s 5 s 4 s 2

Algoritmo de Huffman: inserção em lista de prioridades

Algoritmo de Huffman: inserção em lista de prioridades 1 inserir(t, f, F ): 2 F[n + 1] T 3 n++ 4 subir(n)

Algoritmo de Huffman: inserção em lista de prioridades 1 inserir(t, f, F ): 2 F[n + 1] T 3 n++ 4 subir(n) 1 subir(i): 2 j = i/2 3 se j 1 então 4 se T [i] < T [j] então 5 T [i] T [j] 6 subir(j)

Algoritmo de Huffman: inserção em lista de prioridades 1 inserir(t, f, F ): 2 F[n + 1] T 3 n++ 4 subir(n) 1 subir(i): 2 j = i/2 3 se j 1 então 4 se T [i] < T [j] então 5 T [i] T [j] 6 subir(j) inserir(t, f, F ) e subir(i): métodos de lista de prioridades implementada por heap;

Algoritmo de Huffman: remoção de lista de prioridades

Algoritmo de Huffman: remoção de lista de prioridades 1 minimo(t, f, F): 2 se n 0 então 3 remove T [1] 4 T [1] T [n] 5 n- - 6 descer(1, n)

Algoritmo de Huffman: remoção de lista de prioridades 1 minimo(t, f, F): 2 se n 0 então 3 remove T [1] 4 T [1] T [n] 5 n- - 6 descer(1, n) 1 descer(i, n): 2 j = 2 i 3 se j n então 4 se j < n então 5 se T [j + 1] < T [j] então 6 j = j + 1 7 se T [i] > T [j] então 8 T [i] T [j] 9 descer(j, n)

Algoritmo de Huffman: remoção de lista de prioridades 1 minimo(t, f, F): 2 se n 0 então 3 remove T [1] 4 T [1] T [n] 5 n- - 6 descer(1, n) 1 descer(i, n): 2 j = 2 i 3 se j n então 4 se j < n então 5 se T [j + 1] < T [j] então 6 j = j + 1 7 se T [i] > T [j] então 8 T [i] T [j] 9 descer(j, n) minimo(t, f, F ) e descer(1, n): métodos de lista de prioridades implementada por heap;

1 huffman(): 2 para i 1 até n 1 faça 3 minimo(t, f, F ); 4 minimo(t, f, F ); 5 T T T ; 6 f (T ) f (T ) f (T ); 7 inserir(t, f, F); Algoritmo de Huffman

Algoritmo de Huffman 1 huffman(): 2 para i 1 até n 1 faça 3 minimo(t, f, F ); 4 minimo(t, f, F ); 5 T T T ; 6 f (T ) f (T ) f (T ); 7 inserir(t, f, F); Operação de minimização ou inclusão na lista de prioridades: O(log n);

Algoritmo de Huffman 1 huffman(): 2 para i 1 até n 1 faça 3 minimo(t, f, F ); 4 minimo(t, f, F ); 5 T T T ; 6 f (T ) f (T ) f (T ); 7 inserir(t, f, F); Operação de minimização ou inclusão na lista de prioridades: O(log n); operação requer número constante de passos;

Algoritmo de Huffman 1 huffman(): 2 para i 1 até n 1 faça 3 minimo(t, f, F ); 4 minimo(t, f, F ); 5 T T T ; 6 f (T ) f (T ) f (T ); 7 inserir(t, f, F); Operação de minimização ou inclusão na lista de prioridades: O(log n); operação requer número constante de passos; Total de n 1 iterações;

Algoritmo de Huffman 1 huffman(): 2 para i 1 até n 1 faça 3 minimo(t, f, F ); 4 minimo(t, f, F ); 5 T T T ; 6 f (T ) f (T ) f (T ); 7 inserir(t, f, F); Operação de minimização ou inclusão na lista de prioridades: O(log n); operação requer número constante de passos; Total de n 1 iterações; Complexidade: O(n log n);

Exercícios 1. Desenhar a árvore de Huffman para o seguinte conjunto de chaves e frequências, respectivamente na primeira e segunda linhas da tabela: s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 1 6 2 1 1 9 2 3 2. A árvore fornecida pelo algoritmo de Huffman é única, ou seja, o algoritmo sempre fornecerá a mesma árvore?

Bibliografia SZWARCFITER, J. L. e MARKENZON, L. Estruturas de Dados e seus Algoritmos, LTC, 1994. ZIVIANI, N. Projeto de Algoritmos: com implementações em Java e C++, 1a edição, Cengage Learning, 2009.

Perguntas?