Algoritmos gulosos (greedy) CLRS

Documentos relacionados
Problema de escalonamento

Coloração de intervalos

Alguns comentários. Segunda prova. Programação dinâmica em grafos. Guloso em grafos. Algoritmos p. 1

Algoritmos gulosos (greedy)

Análise de Algoritmos

AULA 21. Algoritmos p.760/792

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.

Abordagens para Resolução de Problemas

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

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

Estruturas de Dados 2

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

Compactação de Dados Letícia Rodrigues Bueno

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

Pré-Processamento de Documentos

APOSTILA DE MÉTODO GULOSO

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

Melhores momentos AULA 2. Otimização Combinatória p. 71

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (DPV 5; CLRS 4)

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

Algoritmos de Compressão sem Perdas

Estrutura de dados 1. Processamento de Cadeias de Caracteres

Organização de Computadores I

AULA 22. Algoritmos p.793/823

Algoritmos para compressão de URLs

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

Análise de Algoritmos

Complexidade computacional

Sub-grafo. Árvore Geradora Mínima

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

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

Codificação de Huffman

SCC-502 Algoritmos e Estruturas de Dados 1 M. Cristina/Jorge. Trabalho Rec Codificação de Huffman

Algoritmos de ordenação Heapsort

TÉCNICAS DE CODIFICAÇÃO DE SINAIS

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

Análise de algoritmos

Matemática Discreta 10

Melhores momentos AULA 24. Algoritmos p.906/953

Ordenação em tempo linear

Otimização em Grafos

2 Teoria da Informação

EET-49 Comunicações II

Projeto e Análise de Algoritmos

Caminhos mínimos de única origem

Análise de algoritmos

Aula 8: Gramáticas Livres de Contexto

Algoritmos em Strings (compressão de texto)

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Continuidade de processos gaussianos

Melhores momentos AULA 22. Algoritmos p.824/855

AULA 20. Algoritmos p.725/759

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

Teoria dos Grafos Aula 14

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

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

Projeto e Análise de Algoritmos. Método Guloso

Exercícios: Alg Gulosos. Eduardo Laber

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

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Análise e Síntese de Algoritmos

Lista de Prioridades. Estrutura de Dados II Prof. Erinaldo

Demonstração. Relação invariante chave. Implementações do algoritmo de Prim. Implementação grosseira

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

Árvores Auto-ajustadas

Teoria da Informação

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Complexidade computacional

ESTRUTURAS DE DADOS II

Melhores momentos AULA 3. Otimização Combinatória p. 102

Aula 20: Árvores Binárias de Busca. Algoritmos de busca e inserção

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

Princípios Básicos de Teoria da Informação

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de todos os pares

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

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Casamento de Padrões

Heaps binomiais. Gabriel Pedro de Castro. 20 de setembro de 2007

Tipos de códigos de fonte

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

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort.

Métodos Numéricos - Notas de Aula

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford. O problema tem subestrutura óptima

CIC 110 Análise e Projeto de Algoritmos I

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

Organização de Arquivos

Organização de Arquivos

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford

Limite assintótico para a ordenação, Ordenação em tempo linear

Problemas de otimização

Algoritmos gulosos (greedy) CLRS Cap 16 e KT Cap 4

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

Programação dinâmica

Redução polinomial. Permite comparar o grau de complexidade de problemas diferentes.

INF 1010 Estruturas de Dados Avançadas

Algoritmos Combinatórios: Introdução

Transformada Imagem-Floresta (IFT)

Método das Secantes. Marina Andretta/Franklina Toledo ICMC-USP. 4 de setembro de 2012

Introdução à Ciência da Computação. Aula 04 Carlos André Guerra Fonseca

Transcrição:

Algoritmos gulosos (greedy) CLRS 16.3-16.5

Problema de escalonamento Considere n tarefas indicadas pelos números 1,..., n

Problema de escalonamento Considere n tarefas indicadas pelos números 1,..., n t i : duração da tarefa i d i : prazo de entrega da tarefa i

Problema de escalonamento Considere n tarefas indicadas pelos números 1,..., n t i : duração da tarefa i d i : prazo de entrega da tarefa i Escalonamento: permutação de 1 a n onde π(i) é a tarefa a ser executada na posição i. Para um escalonamento π, o tempo de início da tarefa π(i) é s π(i) = i 1 t π(j) j=1 (soma da duração das tarefas anteriores a π(i)).

Problema de escalonamento Considere n tarefas indicadas pelos números 1,..., n t i : duração da tarefa i d i : prazo de entrega da tarefa i Escalonamento: permutação de 1 a n onde π(i) é a tarefa a ser executada na posição i. Para um escalonamento π, o tempo de início da tarefa π(i) é s π(i) = i 1 t π(j) j=1 (soma da duração das tarefas anteriores a π(i)). O tempo de término da tarefa i é f i = s i + t i.

Problema de escalonamento Para um escalonamento π, o tempo de início da tarefa i é soma da duração das tarefas anteriores a i. O tempo de término da tarefa i é f i = s i + t i.

Problema de escalonamento Para um escalonamento π, o tempo de início da tarefa i é soma da duração das tarefas anteriores a i. O tempo de término da tarefa i é f i = s i + t i. O atraso da tarefa i é o número { 0 se f l i = i d i f i d i se f i > d i.

Problema de escalonamento Para um escalonamento π, o tempo de início da tarefa i é soma da duração das tarefas anteriores a i. O tempo de término da tarefa i é f i = s i + t i. O atraso da tarefa i é o número { 0 se f l i = i d i f i d i se f i > d i. Problema: Dados t 1,..., t n e d 1,..., d n, encontrar um escalonamento com o menor atraso máximo. Ou seja, que minimize L = max i l i.

Exemplo n = 5 i 1 2 3 4 5 t i 6 2 1 2 4 d i 8 3 5 12 10

Exemplo n = 5 i 1 2 3 4 5 t i 6 2 1 2 4 d i 8 3 5 12 10 Para π = (3, 4, 2, 5, 1), temos L = 7: i 1 2 3 4 5 f i 15 5 1 3 9 l i 7 2 0 0 0

Exemplo n = 5 i 1 2 3 4 5 t i 6 2 1 2 4 d i 8 3 5 12 10 Para π = (3, 4, 2, 5, 1), temos L = 7: i 1 2 3 4 5 f i 15 5 1 3 9 l i 7 2 0 0 0 Para π = (2, 3, 1, 5, 4), temos L = 3: i 1 2 3 4 5 f i 9 2 3 15 13 l i 1 0 0 3 3

Algoritmo guloso Devolve escalonamento com atraso máximo mínimo. ESCALONAMETO (t, d, n) 1 seja π a permutação de 1 a n tal que 2 devolva π d[π[1]] d[π[2]] d[π[n]]

Algoritmo guloso Devolve escalonamento com atraso máximo mínimo. ESCALONAMETO (t, d, n) 1 seja π a permutação de 1 a n tal que 2 devolva π d[π[1]] d[π[2]] d[π[n]] Consumo de tempo: O(n lg n).

Algoritmo guloso Devolve escalonamento com atraso máximo mínimo. ESCALONAMETO (t, d, n) 1 seja π a permutação de 1 a n tal que 2 devolva π d[π[1]] d[π[2]] d[π[n]] Consumo de tempo: O(n lg n). Na aula, vimos a prova de que este algoritmo está correto (devolve um escalonamento com atraso máximo mínimo).

Ingredientes da prova Uma inversão em um escalonamento π é um par (i, j) tal que i < j e d[π[i]] > d[π[j]].

Ingredientes da prova Uma inversão em um escalonamento π é um par (i, j) tal que i < j e d[π[i]] > d[π[j]]. Mostre que dois escalonamentos que não têm inversões têm o mesmo atraso máximo.

Ingredientes da prova Uma inversão em um escalonamento π é um par (i, j) tal que i < j e d[π[i]] > d[π[j]]. Mostre que dois escalonamentos que não têm inversões têm o mesmo atraso máximo. Mostre que se um escalonamento tem uma inversão, então ele tem uma inversão do tipo (i, i + 1).

Ingredientes da prova Uma inversão em um escalonamento π é um par (i, j) tal que i < j e d[π[i]] > d[π[j]]. Mostre que dois escalonamentos que não têm inversões têm o mesmo atraso máximo. Mostre que se um escalonamento tem uma inversão, então ele tem uma inversão do tipo (i, i + 1). Mostre então que, se trocarmos π[i] e π[i + 1], obteremos um escalonamento com atraso máximo não superior ao atraso máximo de π.

Códigos de Huffman Motivação: compressão de textos

Códigos de Huffman Motivação: compressão de textos Código ASCII: todo símbolo tem um código de 8 bits.

Códigos de Huffman Motivação: compressão de textos Código ASCII: todo símbolo tem um código de 8 bits. Σ: alfabeto finito f i : frequência de símbolo i em Σ (coleção de números não-negativos cuja soma é 1)

Códigos de Huffman Motivação: compressão de textos Código ASCII: todo símbolo tem um código de 8 bits. Σ: alfabeto finito f i : frequência de símbolo i em Σ (coleção de números não-negativos cuja soma é 1) Objetivo: atribuir um código binário para cada símbolo de modo que um texto seja convertido para um arquivo binário o mais compacto possível e seja fácil de decodificar.

Códigos de Huffman Motivação: compressão de textos Código ASCII: todo símbolo tem um código de 8 bits. Σ: alfabeto finito f i : frequência de símbolo i em Σ (coleção de números não-negativos cuja soma é 1) Objetivo: atribuir um código binário para cada símbolo de modo que um texto seja convertido para um arquivo binário o mais compacto possível e seja fácil de decodificar. Códigos livres de prefixo: o código de um símbolo não é prefixo do código de nenhum outro símbolo.

Códigos de Huffman Motivação: compressão de textos Código ASCII: todo símbolo tem um código de 8 bits. Σ: alfabeto finito f i : frequência de símbolo i em Σ (coleção de números não-negativos cuja soma é 1) Objetivo: atribuir um código binário para cada símbolo de modo que um texto seja convertido para um arquivo binário o mais compacto possível e seja fácil de decodificar. Códigos livres de prefixo: o código de um símbolo não é prefixo do código de nenhum outro símbolo. Códigos livres de prefixo são fáceis de decodificar.

Exemplo letra freq código a 45 0 b 13 101 c 12 100 d 16 111 e 9 1101 f 5 1100

Exemplo letra freq código a 45 0 b 13 101 c 12 100 d 16 111 e 9 1101 f 5 1100

Exemplo 100 a : 45 55 25 30 letra freq código a 45 0 b 13 101 c 12 100 d 16 111 e 9 1101 f 5 1100 c : 12 b : 13 f : 5 14 e : 9 d : 16

Algoritmo de Huffman n: número de símbolos em Σ

Algoritmo de Huffman n: número de símbolos em Σ Guloso: Comece com n árvores disjuntas, cada uma com um único nó, com o símbolo e sua frequência. a : 45 d : 16 b : 13 c : 12 e : 9 f : 5

Algoritmo de Huffman n: número de símbolos em Σ Guloso: Comece com n árvores disjuntas, cada uma com um único nó, com o símbolo e sua frequência. a : 45 d : 16 b : 13 c : 12 e : 9 f : 5 A cada iteração, escolha as duas árvores de frequência menor e junte-as, com frequência somada. a : 45 d : 16 14 b : 13 c : 12 f : 5 e : 9

Algoritmo de Huffman n: número de símbolos em Σ Guloso: Comece com n árvores disjuntas, cada uma com um único nó, com o símbolo e sua frequência. a : 45 d : 16 b : 13 c : 12 e : 9 f : 5 A cada iteração, escolha as duas árvores de frequência menor e junte-as, com frequência somada. a : 45 d : 16 14 b : 13 c : 12 f : 5 e : 9 Pare quando restar uma única árvore.

Algoritmo de Huffman: exemplo a : 45 d : 16 b : 13 c : 12 e : 9 f : 5

Algoritmo de Huffman: exemplo a : 45 d : 16 b : 13 c : 12 e : 9 f : 5 a : 45 d : 16 14 b : 13 c : 12 f : 5 e : 9

Algoritmo de Huffman: exemplo a : 45 d : 16 b : 13 c : 12 e : 9 f : 5 a : 45 d : 16 14 b : 13 c : 12 f : 5 e : 9 a : 45 25 d : 16 14 c : 12 b : 13 f : 5 e : 9

Algoritmo de Huffman: exemplo a : 45 d : 16 b : 13 c : 12 e : 9 f : 5 a : 45 d : 16 14 b : 13 c : 12 f : 5 e : 9 a : 45 25 d : 16 14 c : 12 b : 13 f : 5 e : 9 a : 45 30 25 14 d : 16 c : 12 b : 13 f : 5 e : 9

Algoritmo de Huffman: exemplo a : 45 25 d : 16 14 c : 12 b : 13 f : 5 e : 9 a : 45 30 25 14 d : 16 c : 12 b : 13 f : 5 e : 9 55 a : 45 25 30 c : 12 b : 13 14 d : 16 f : 5 e : 9

Algoritmo de Huffman: exemplo 55 a : 45 25 30 c : 12 b : 13 14 d : 16 f : 5 e : 9 100 a : 45 55 25 30 c : 12 b : 13 14 d : 16 f : 5 e : 9

Árvore de Huffman 100 a : 45 55 25 30 c : 12 b : 13 14 d : 16 f : 5 e : 9

Árvore de Huffman Como obter os códigos a partir da árvore?

Árvore de Huffman Como obter os códigos a partir da árvore? Associe a cada símbolo um número binário assim:

Árvore de Huffman Como obter os códigos a partir da árvore? Associe a cada símbolo um número binário assim: Rotule com 0 as arestas da árvore que ligam um nó com seu filho esquerdo e com 1 as arestas que ligam um nó com seu filho direito. 0 100 1 a : 45 0 55 1 0 25 30 1 0 c : 12 b : 13 14 0 f : 5 1 e : 9 1 d : 16

Árvore de Huffman Como obter os códigos a partir da árvore? 0 100 1 a : 45 0 55 1 0 25 30 1 0 c : 12 b : 13 14 0 f : 5 1 e : 9 1 d : 16 O código correspondente a cada símbolo é a concatenação dos bits associados às arestas do caminho da raiz até a folha correspondente ao símbolo. Exemplo: O código de b é 101.

Algoritmo de Huffman n: número de símbolos em Σ Guloso: Comece com n árvores disjuntas, cada uma com um único nó, com o símbolo e sua frequência. A cada iteração, escolha as duas árvores de frequência menor e junte-as, com frequência somada. Pare quando restar uma única árvore.

Algoritmo de Huffman n: número de símbolos em Σ Guloso: Comece com n árvores disjuntas, cada uma com um único nó, com o símbolo e sua frequência. A cada iteração, escolha as duas árvores de frequência menor e junte-as, com frequência somada. Pare quando restar uma única árvore. Perguntas: Este algoritmo produz um código ótimo? Como implementá-lo do modo mais eficiente possível?

Algoritmo guloso HUFFMAN (A, f, n) 1 Q BUILD-MIN-HEAP(A, f, n) 2 para i 1 até n 1 faça 3 x EXTRACT-MIN(Q) 4 y EXTRACT-MIN(Q) 5 z NOVA-CEL() 6 esq[z] x 7 esq[z] y 8 f [z] f [x] + f [y] 9 INSEREHEAP(Q, z, f [z]) 10 devolva EXTRACT-MIN(Q)

Algoritmo guloso HUFFMAN (A, f, n) 1 Q BUILD-MIN-HEAP(A, f, n) 2 para i 1 até n 1 faça 3 x EXTRACT-MIN(Q) 4 y EXTRACT-MIN(Q) 5 z NOVA-CEL() 6 esq[z] x 7 esq[z] y 8 f [z] f [x] + f [y] 9 INSEREHEAP(Q, z, f [z]) 10 devolva EXTRACT-MIN(Q) Consumo de tempo: O(n lg n).