ESTRUTURAS DE DADOS II



Documentos relacionados
Figure 2 - Nós folhas de uma árvore binária representando caracteres ASCII

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

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

2. Execução do algoritmo de Huffman para construção de uma árvore binária (árvore de Huffman).

Nenhum dado é perdido durante o processo de compressão. Preserva todas as informações que permitirão a reconstrução exata da imagem. Reversível.

ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS. Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms.

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

Organização e Arquitetura de Computadores I

Informática. Prof. Macêdo Firmino. Macêdo Firmino (IFRN) Informática Setembro de / 16

Pesquisa em Memória Primária. Prof. Jonas Potros

Arquitetura de Computadores. Tipos de Instruções

Você pode dizer isso de novo! Compressão de Texto

Busca. Pesquisa sequencial

Unidade 5: Sistemas de Representação

Árvores de Suporte de Custo Mínimo

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

20 Caracteres - Tipo char

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

Compressão com perdas

Circuitos Digitais. Conteúdo. Sistema de Numeração e Códigos :: Conversões de Binário para Decimal SISTEMA DE NUMERAÇÃO E CÓDIGOS

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

Representação Binária de Dados

PROGRAMADOR JAVA. Aula 0 20 semanas. Instrutor : Léo Billi leo.billi@gmail.com

Algoritmos para compressão de URLs

Organização e Arquitetura de Computadores I

2. Representação Numérica

Estruturas de Armazenamento e Indexação. Rafael Lage Moreira Barbosa

Métodos de Pesquisa em Memória Primária

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES SISTEMAS DE NUMERAÇÃO: REPRESENTAÇÃO EM PONTO FLUTUANTE. Prof. Dr. Daniel Caetano

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Web site. Objetivos gerais. Introdução. Profa. Patrícia Dockhorn Costa

Dadas a base e a altura de um triangulo, determinar sua área.

Sistemas de Numeração

EAD Árvore árvore binária

Linguagem algorítmica: Portugol

Sistema de Numeração e Conversão entre Sistemas. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Prof. Marcelo Machado Cunha Parte 3

Memória Cache. Prof. Leonardo Barreto Campos 1

Aula 2 Modelo Simplificado de Computador

Informática I. Aula 6. Aula 6-12/09/2007 1

Introdução à Tecnologia Web HTML HyperText Markup Language XHTML extensible HyperText Markup Language Formatos de Imagens

Endereçamento IP 09/05/2014. Endereçamento IP CLASSE B CLASSE A CLASSE A CLASSE C

Sistemas Operacionais. Andrique Amorim Gerência de Arquivos

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Árvore Binária de Busca

Hit dos Bits. Série Matemática na Escola

Organização e Arquitetura de Computadores I

Árvores e Árvores Binárias

Algoritmos de Busca em Tabelas

Aula 04. Código BCD, Códigos Alfa-numéricos e Sistemas de Detecção de Erros

Árvores. Algoritmos e Estruturas de Dados 2005/2006

13 Números Reais - Tipo float

Organização e Arquitetura de Computadores. Aula 10 Ponto Flutuante Parte I Juliana F. Camapum Wanderley

Figura 1 - O computador

Hardware de Computadores

1. NÍVEL CONVENCIONAL DE MÁQUINA

Projetos. Universidade Federal do Espírito Santo - UFES. Mestrado em Informática 2004/1. O Projeto. 1. Introdução. 2.

Sistemas de Numerações.

Sistemas numéricos. Prof. Leandro Tonietto Introdução a computação e suas aplicações Curso de Segurança da Informação UNISINOS ago-09

COMPRESSÃO DE DADOS MULTIMÍDIA

Representação de Informação -- Texto -- Representação de Informação. Representação de Caracteres

INFORMÁTICA BÁSICA. Prof. Rafael Zimmermann

Introdução à Lógica de Programação

Prof. Daniela Barreiro Claro

Análise e Complexidade de Algoritmos

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

Aula T20 BCC202 Pesquisa (Parte 2) Árvores de Pesquisa. Túlio Toffolo

3 Qualidade de serviço na Internet

APLICAÇÃO REDE APLICAÇÃO APRESENTAÇÃO SESSÃO TRANSPORTE REDE LINK DE DADOS FÍSICA 1/5 PROTOCOLOS DE REDE

Conceitos Importantes:

Copyright 2013 VW Soluções

CT-234. Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

ferramentas da imagem digital

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA

A máscara de sub-rede pode ser usada para dividir uma rede existente em "sub-redes". Isso pode ser feito para:

APLICATIVOS GRÁFICOS (AULA 4)

Sistemas Numéricos bit / Byte BIT BYTE. Prof. Celso Candido ADS / REDES / ENGENHARIA

Projeto e Desenvolvimento de Algoritmos

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Fabio Bento

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Teleprocessamento e Redes (MAB-510) Gabarito da Segunda Lista de Exercícios 01/2010

Árvores Binárias de Busca

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Sistema de Arquivos FAT

PROGRAMAÇÃO II 4. ÁRVORE

Prof. Rafael Gross.

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

Recursos. Um recurso é ou um dispositivo físico (dedicado) do hardware, ou Solicitar o recurso: esperar pelo recurso, até obtê-lo.

Sistemas de Arquivos NTFS

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Seção 5.1 Problemas indecidíveis. Slides originais gentilmente cedidos pela Profa. Ariane Machado Lima

Resolução de problemas e desenvolvimento de algoritmos

Exercício 8 Busca de Músicas

Aula 4 Estatística Conceitos básicos

Sistemas de Numeração. Professor: Rogério R. de Vargas INFORMÁTICA 2014/2

Fundamentos em Informática (Sistemas de Numeração e Representação de Dados)

Transcrição:

ESTRUTURAS DE DADOS II Msc. Daniele Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência da Computação UFU Bacharel em Ciência da Computação - UFJF

Conteúdo Programático 1. Introdução 1. Algoritmos 2. Tipo abstrato de dado 3. Revisão de Estruturas de Dados I -- Desafio 2. Princípios de Análise de Algoritmos: 1. Análise Empírica 2. Análise Matemática 3. Análise Assintótica 4. Notação O 3. Recursão 1. Algoritmos recursivos 2. Programação Dinâmica 4. Algoritmos de Busca 1. Busca linear 2. Busca binária 3. Busca em texto 4. Hashing 5. Compressão de Dados 1. Fila de prioridades: heap 2. Algoritmo de Huffman 6. Grafos 1. Terminologia 2. Matriz de adjacência 3. Lista de adjacência 4. Busca em profundidade e em largura 5. Algoritmo de Dijkstra Estruturas de Dados II: Msc. Daniele C. Oliveira 2

Contato e Atendimento E-mail danieleoliveira@fc.ufu.br Página www.danieleoliveira.com.br Horário de Aula Segunda : 10:40 às 12:20 (Teórica) Quarta : 08:50 às 10:40 (Prática) Horário de Atendimento (Sala 404) Segunda : 09hs às 10:30hs Estruturas de Dados II: Msc. Daniele C. Oliveira 3

COMPRESSÃO DE DADOS Estruturas de Dados II: Msc. Daniele C. Oliveira 4

Compressão de Dados Objetivos Reduzir espaço de armazenagem Reduzir tempo de transmissão Muito importante Informação (e dados) tende a crescer de forma exponencial Exemplos: Compressão de arquivos em geral ZIP, GZIP, BZIP, BOA. Sistemas de arquivos: NTFS. Multimedia. Imagens: GIF, JPEG Som: MP3. Vídeo: MPEG, DivX, HDTV Estruturas de Dados II: Msc. Daniele C. Oliveira 5

Compressão x Compactação Compressão Mudança na representação de algum dado para reduzir seu tamanho Compactação União de dados que não estão unidos Exemplo: Compressão do HD: reduzir o tamanho dos arquivos Compactação do HD: juntar partes disjuntas (desfragmentar) Estruturas de Dados II: Msc. Daniele C. Oliveira 6

Sistemas de recuperação de informação Métodos recentes de compressão têm permitido: 1. Pesquisar diretamente o texto comprimido mais rapidamente do que o texto original. 2. Obter maior compressão em relação a métodos tradicionais, gerando maior economia de espaço. 3. Acessar diretamente qualquer parte do texto comprimido sem necessidade de descomprimir todo o texto desde o início Estruturas de Dados II: Msc. Daniele C. Oliveira 7

Codificação e Decodificação Seja M a mensagem que desejamos armazenar/transmitir Codificação: Gerar uma representação comprimida C(M) que, espera-se, utilize menos bits Decodificação: Reconstrução da mensagem original ou alguma aproximação M Razão de Compressão: bits de C(M) / bits de M Compressão sem perda: M = M Texto, programas fonte, executáveis etc. RC: 50-75% ou menos Compressão com perda: M ~ M Imagens, som, vídeo Uma ideia é descartar informação não perceptível pelos sentidos RC: 10% ou mais, dependendo do fator de qualidade Estruturas de Dados II: Msc. Daniele C. Oliveira 8

Codificação por Seqüências Repetidas Conhecida como Run-length encoding (RLE). Ideia é explorar longas sequências de caracteres repetidos Inicialmente, escolhe-se um valor de byte especial, que não ocorre no arquivo. Esse byte será usado para indicar que, a seguir, vem um código RLE. A seguir, executa-se o algoritmo RLE, como segue: leia a sequência, copiando sequencialmente os valores para um arquivo destino, exceto quando o mesmo valor ocorre mais de uma vez sucessivamente. quando dois ou mais valores iguais ocorrem em sequência, substitua-os pelos seguintes 3 bytes: 1. o byte especial que indica RLE 2. o valor que se repete 3. o número de vezes que o valor repete Estruturas de Dados II: Msc. Daniele C. Oliveira 9

Exemplo Compressão RLE Como ficaria a sequência abaixo, se o byte especial é ff? 22 23 24 24 24 24 24 24 24 25 26 26 26 26 26 26 25 Resposta:?? Exemplo: AAAABBBAABBBBBCCCCCCCCDABCBAAABBBBCCCD Resposta:?? Estruturas de Dados II: Msc. Daniele C. Oliveira 10

Exemplo Compressão RLE Como ficaria a sequência abaixo, se o byte especial é ff? 22 23 24 24 24 24 24 24 24 25 26 26 26 26 26 26 25 Resposta: 22 23 ff 24 07 25 ff 26 06 25 Exemplo: AAAABBBAABBBBBCCCCCCCCDABCBAAABBBBCCCD Resposta: 4A3BAA5B8CDABCB3A4B3CD Problema: Como representar o número de repetições? Alguns esquemas + ou complicados Pode levar à inflação de um arquivo se as sequências são curtas Estruturas de Dados II: Msc. Daniele C. Oliveira 11

Codificação de Huffman É um método de compactação que usa as probabilidades de ocorrência dos símbolos no conjunto de dados a ser compactado para determinar códigos de tamanho variável para cada símbolo. Considere a string bom esse bombom. Usando ASCII teríamos: A string bom esse bombom seria escrita numericamente assim: 98 111 109 32 101 115 115 101 32 98 111 109 98 111 109 Em binário, seria assim: 0110 0010 0110 1111 0110 1101 0010 0000 0110 0101 0111 0011 0111 0011 0110 0101 0010 0000 0110 0010 0110 1111 0110 1101 0110 0010 0110 1111 0110 1101 Estruturas de Dados II: Msc. Daniele C. Oliveira 12

Codificação de Huffman Procurando compactar este texto, podemos reduzir a codificação para: A string seria numericamente escrita assim: e em binário: 0 1 2 5 3 4 4 3 5 0 1 2 0 1 2 000 001 010 101 011 100 100 011 101 000 001 010 000 001 010 Estruturas de Dados II: Msc. Daniele C. Oliveira 13

Codificação de Huffman Usando 3-bits por caractere, a string bom esse bombom usa um total de 48 bits ao invés de 128. A economia de bits poderia ser ainda maior se usarmos menos de 3 bits para codificar caracteres que aparecem mais vezes (b, o, m ) e mais bits para caracteres que aparecem menos vezes (e, s). Essa é a ideia básica da codificação de Huffman: usar menor número de bits para representar caracteres com maior frequência. Essa técnica pode ser implementada usando uma árvore binária que armazena caracteres nas folhas, e cujos caminhos da raiz até as folhas provêm a sequência de bits que são usados para codificar os respectivos caracteres. Estruturas de Dados II: Msc. Daniele C. Oliveira 14

Árvore de Codificação Usando uma árvore binária, podemos representar todos os caracteres como folhas de uma árvore completa Arcos da esquerda são numerados com 0 enquanto arcos da direita com 1. O código para qualquer caractere/folha é obtido seguindo o caminho da raiz à folha e concatenando os 0 s e 1 s. Para maximar a compactação, precisamos encontrar uma árvore ótima, que apresente um número mínimo de codificação por caractere. O algoritmo para encontrar essa árvore ótima é chamado de codificação de Huffman Estruturas de Dados II: Msc. Daniele C. Oliveira 15

Algoritmo de Huffman Assuma que cada caractere em um texto está associado a um peso, que é definido pelo número de vezes que o caractere aparece em um arquivo. Na string bom esse bombom, os caracteres b, o e m têm peso 3, enquanto os caracteres e, s e espaço têm peso 2. Para usar o algoritmo de Huffman, é necessário calcular esses pesos Estruturas de Dados II: Msc. Daniele C. Oliveira 16

Algoritmo de Huffman Aplique o Algoritmo de Huffman: Estruturas de Dados II: Msc. Daniele C. Oliveira 17

Algoritmo de Huffman Estruturas de Dados II: Msc. Daniele C. Oliveira 18

A codificação de caracteres induzida pela última árvore é a seguinte (considerando 0 para arcos da esquerda e 1 para arcos da direita): Usando essa tabela de codificação, a string bom esse bombom ficaria assim: 111 00 01 110 100 101 101 100 110 111 00 01 111 00 01 Desta forma usamos 39 bits para codificar a string bom esse bombom, ao invés de 48 bits como mostramos usando a codificação de 3-bits. Estruturas de Dados II: Msc. Daniele C. Oliveira 19

Algoritmo de Huffman O algoritmo de Huffman assume que uma árvore será construída a partir de um grupo de árvores. Inicialmente essas árvores têm um único nó com um caractere e o peso desse caractere. À cada iteração do algoritmo, duas árvores são juntadas criando uma nova árvore. Isso faz com que o número de árvores diminua a cada passo. Este é o algoritmo: 1. Comece com uma lista de árvores. Inicialmente, todas as árvores são compostas de um nó apenas, com o peso da árvore igual ao peso do caractere do nó. Caracteres que ocorrerem mais frequentemente têm o maior peso. Caracteres que ocorrerem menos frequentemente têm o menor peso. Ordene a lista de árvores de forma crescente, fazendo com que o nó raiz da primeira árvore seja o caractere de menor peso e o nó raiz da última árvore seja o caractere de maior peso. 2. Repita os passos a seguir até que sobre apenas uma única árvore: 1. Pegue as duas primeiras árvores da lista e as chame de T1 e T2. Crie uma nova árvore Tr cuja raiz tenha o peso igual à soma dos pesos de T1 e T2 e cuja subárvore esquerda seja T1 e subárvore direita seja T2. 2. Exclua T1 e T2 da lista (mantendo T1 e T2 na memória) e inclua Tr na lista, de maneira que a lista seja mantida ordenada. 3. A árvore final será a árvore ótima de codificação. Estruturas de Dados II: Msc. Daniele C. Oliveira 20

Implementação Há duas partes distintas na implementação: um programa que faz a compactação e um programa que faz a descompactação. Para compactar um arquivo, é necessário a tabela de compactação. Como vimos, esta tabela é construída com uma árvore binária de compactação. Assumindo que um número fixo de bits é escrito em um arquivo, um arquivo compactado é criado seguindo os seguintes passos: 1. Construa a tabela de codificação; 2. Leia o arquivo a ser compactado e processe um caractere de cada vez. Para processar o caractere e chegar à sequencia de bits que representa o caractere, use a tabela de caracteres que foi criada no passo anterior. Escreva essa sequencia de bits no arquivo compactado. Estruturas de Dados II: Msc. Daniele C. Oliveira 21

Implementação O arquivo compactado deve conter as informações necessárias para se chegar corretamente ao arquivo original a partir do arquivo compactado. As seguintes informações são necessárias: um cabeçalho no arquivo compactado que deve conter a árvore de codificação; alguma marca de final de arquivo para indicar que a sequencia de bits chegou ao fim. O programa descompactador deve criar a árvore de codificação que está no cabeçalho do arquivo, ler os bits e navegar na árvore até encontrar os nós folhas correspondentes àquela sequencia de bits lidos. O custo deste algoritmo de busca é proporcional à altura da árvore. Estruturas de Dados II: Msc. Daniele C. Oliveira 22

Cabeçalho do arquivo compactado A árvore de codificação pode ser armazenada no início do arquivo compactado. Existem várias maneiras de armazenar a árvore. Por exemplo, use o percurso em pré-ordem para escrever cada nó visitado pela travessia. Nós folha devem ser diferenciados de nós não-folhas. Uma maneira de fazer a diferenciação é escrever um único bit para cada nó, por exemplo 1 para nós folhas e 0 para nós não-folha. Para nós-folha, é também necessário escrever o caractere armazenado. Para nós não-folha é necessário apenas o bit indicando de que se trata de um nó não-folha. Estruturas de Dados II: Msc. Daniele C. Oliveira 23

Caractere de final da sequencia de bits É preciso introduzir um pseudo-caractere de final de arquivo, introduzido explicitamente pelo programador ao final da sequencia de bits válidos. Este caractere também deve entrar na árvore/tabela de codificação para que seja corretamente descompactado pelo programa descompactador. Quando um arquivo compactado é escrito, os últimos bits escritos devem ser os bits que representam o pseudo-caractere. Estruturas de Dados II: Msc. Daniele C. Oliveira 24

Fim da Aula Prática 5 PRÓXIMA AULA: COMPRESSÃO DE DADOS Estruturas de Dados II: Msc. Daniele C. Oliveira 25