Projeto e Análise de Algoritmos

Documentos relacionados
Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5)

Algoritmos Gulosos. Norton T. Roman

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

Tecnicas Essencias Greedy e Dynamic

Estruturas de Dados 2

BCC Projeto e Análise de Algoritmos Aula 0: Apresentação

Algoritmos gulosos (greedy)

Programação Inteira. Solução com o método Branch-and-Bound

Teoria dos Grafos Aula 14

TEORIA: 60 LABORATÓRIO: 0

Paradigmas de Projetos de Algoritmos

Aula 13: Branch-and-bound

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

Tópicos em Algoritmos. André Guedes

Projeto e Análise de Algoritmos

Classes, Herança e Interfaces

Otimização Combinatória - Parte 4

Backtracking. Túlio Toffolo Marco Antônio Carvalho BCC402 Aula 10 Algoritmos e Programação Avançada

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

Teoria da Computação. Complexidade computacional classes de problemas

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

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

Algoritmos gulosos (greedy)

Introdução Paradigmas

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

Algoritmos em Grafos - Aula 07 Algoritmos Gulosos

Projeto e Análise de Algoritmos

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

Algoritmos 3/17/ Algoritmos como área de estudo e investigação

Referências: Notas de aulas do Prof. Silvio Alexandre de Araujo

Conceitos de Linguagens de Programação

ABORDAGENS PARA RESOLVER O PROBLEMA DA MOCHILA 0/1

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

Rascunho. CI165 - Análise de algoritmos (rascunho alterado constantemente) André Guedes Departamento de Informática UFPR. 11 de junho de 2017

Projeto e Análise de Algoritmos

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

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Programação Inteira Resolução por Branch and Bound

Coloração de intervalos

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Algoritmos e Estruturas de Dados II

Projeto e Análise de Algoritmos

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

GRAFOS Aula 08 Árvore Geradora Mínima: Algoritmos de Kruskal e Prim-Jarnik Max Pereira

QUESTÕES DE PROVAS ANTIGAS

Estrutura de Dados e Algoritmos

Projeto de Algoritmos por Divisão e Conquista

Algoritmos em Grafos COM11087-Tópicos Especiais em Programação I

Árvore Binária de Busca Ótima

Ciclos hamiltonianos e o problema do caixeiro viajante

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

Árvores de Suporte de Custo Mínimo

5COP096 TeoriadaComputação

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

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

Algoritmos de Ordenação: Cota Inferior

Desenho e Análise de Algoritmos

BCC202 - Estrutura de Dados I

Redes Neurais (Inteligência Artificial)

Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional

Programação Inteira. Algoritmo Branch-and-Bound (ou enumeração implícita)

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

Estruturas de Dados. Pedro Ribeiro 2017/2018 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Estruturas de Dados 2017/ / 16

Transcrição:

Projeto e Análise de Algoritmos Aula 04 Técnicas de Projeto de Algoritmos (Método Guloso) Edirlei Soares de Lima <edirlei@iprj.uerj.br>

Estratégias de Projeto de Algoritmos Força Bruta (Brute Force) Dividir e Conquistar (Divide and Conquer) Diminuir e Conquistar (Decrease and Conquer) Transformar e Conquistar (Transform and Conquer) Compromisso Tempo Espaço (Space and Time Tradeoffs) Estratégia Gulosa (Greedy) Programação Dinâmica (Dynamic Programming) Voltando Atrás (Backtracking) Ramificar e Limitar (Branch and Bound) Algoritmos Aproximados

Método Guloso Ideia: quando temos uma escolha a fazer, fazemos aquela que pareça ser a melhor no momento. Ou seja, fazemos uma escolha ótima local, na esperança de obter uma solução ótima global. O método guloso sugere construir uma solução através de uma sequência de passos, cada um expandindo uma solução parcialmente construída até o momento, até uma solução completa para o problema ser obtida. Métodos gulosos nem sempre garantem soluções ótimas, mas quando eles garantem, geralmente são as soluções mais simples e eficientes.

Método Guloso Em cada passo de um algoritmo guloso, a escolha deve: Possível: deve satisfazer as restrições do problema; Localmente ótima: deve ser a melhor escolha local dentre todas as escolhas disponíveis naquele passo; Irreversível: uma vez feita, ele não pode ser alterada nos passos subsequentes do algoritmo.

Exemplo 1: Problema da Mochila Dados n itens: Pesos: w 1, w 2,..., w n Valores: v 1, v 2,, v n Uma mochila de capacidade W Problema: encontrar o subconjunto mais valioso de itens que caibam dentro da mochila (Knapsack Problem).

Exemplo 1: Problema da Mochila Problema da Mochila 0-1: Um ladrão rouba uma loja que contém n itens: o item i tem peso w i e vale v i. Ele quer levar o maior valor possível em uma mochila de carga máxima W. Quais itens escolher? Problema da Mochila Fracionada: Mesmo formulação anterior, mas agora ele pode carregar frações dos itens, ao invés da escolha binária (0-1).

Exemplo 1: Problema da Mochila (Fracionada) Algoritmo Guloso (ideia): Ordene os itens por valor/peso (v i /w i ); Começando em i = 1, coloque na mochila o máximo possível do item i que estiver disponível ; Se puder levar mais, passe para o próximo item.

Exemplo 1: Problema da Mochila Algoritmo Guloso: (Fracionada) 1. Mochila_Fracionada(item, valor, peso, n, totalmochila) 2. MergeSort(item, valor, peso, n) 3. carga 0 4. i 1 5. enquanto (carga < totalmochila) e (i <= n) faça 6. se (peso[i] totalmochila carga) então 7. pegue todo o item[i] 8. carga carga + peso[i] 9. senão 10. pegue (totalmochila - carga)/peso[i] do item[i] 11. carga carga + (totalmochila - carga)/peso[i] 12. i i + 1 13. retorne itens pegados O(n log n)

Exemplo 2: Seleção de Atividades Seja: S = {a 1,..., a n ): conjunto de n atividades que podem ser executadas em um mesmo local. Exemplo: palestras em um auditório. Para todo i = 1,..., n, a atividade a i começa no instante s i e termina no instante f i, com 0 < s i < f i <. As atividades a i e a j são ditas compatíveis se os intervalos [s i,f i ] e [s j, f j ] são disjuntos. Problema: Encontre em S um subconjunto de atividades mutuamente compatíveis que tenha tamanho máximo.

Exemplo 2: Seleção de Atividades Exemplo: i 1 2 3 4 5 6 7 8 9 10 11 s i 1 3 0 5 3 5 6 8 8 2 12 f i 4 5 6 7 8 9 10 11 12 13 14 Pares de atividades incompatíveis: (a 1, a 2 ), (a 1, a 3 ) Pares de atividades compatíveis: (a 1, a 4 ), (a 4, a 8 ) Conjuntos máximos de atividades compatíveis: (a 1, a 4, a 8, a 11 ) e (a 2, a 4, a 9, a 11 )

Exemplo 2: Seleção de Atividades Algoritmo Guloso: 1. Seleciona_Atividade(a, s, f, n) 2. MergeSort(a, s, f, n) //ordenação crescente por f i 3. A {a 1 } 4. i = 1 5. Para m 2 até n faça 6. se s m f i então 7. A A {a m } 8. i m 9. retorne A O(n log n)

Método Guloso Outros algoritmos gulosos que veremos ao longo do curso: Algoritmo de Prim (Árvores Geradoras Mínimas) Algoritmo de Kruskal (Árvores Geradoras Mínimas) Algoritmo de Dijkstra (Distâncias Mínimas)

Comentários sobre o Método Guloso Vantagens: Algoritmos simples; Fácil implementação; Quando garantem soluções ótimas, geralmente são os algoritmos mais simples e eficientes; Desvantagens: Nem sempre garantem soluções ótimas locais; Podem efetuar cálculos repetitivos; Escolhe o caminho que, à primeira vista, é mais econômico;

Exercícios Lista de Exercícios 04 Método Guloso http://www.inf.puc-rio.br/~elima/paa/

Leitura Complementar Levitin. Introduction to the Design and Analysis of Algorithms, 3rd Edition, 2011. Capítulo 9: Greedy Technique