Projeto de algoritmos: Algoritmos Gulosos

Documentos relacionados
Algoritmos de Ordenação: MergeSort

Complexidade de Algoritmos

Algoritmos de Ordenação: Cota Inferior

Tabelas Hash Endereçamento Direto

Algoritmos de Ordenação: QuickSort

Hashing. ACH Introdução à Ciência da Computação II. Delano M. Beder

Técnicas de projeto de algoritmos: Indução

Complexidade de Algoritmos. Edson Prestes

Classes, Herança e Interfaces

Algoritmos de Ordenação: HeapSort

Complexidade Assintótica

Algoritmos Gulosos. Norton T. Roman

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

Algoritmos de Ordenação

Técnicas de projeto de algoritmos: Indução

5COP096 TeoriadaComputação

Endereçamento Aberto

Algoritmos de Ordenação: Tempo Linear

Métodos de Ordenação Parte 2

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Hashing Endereçamento Direto Tabelas Hash

Tentativa e Erro (Backtracking)

Análise e Complexidade de Algoritmos

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

Complexidade de Algoritmos

FUNDAÇÃO UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

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;

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

2. Ordenação por Seleção

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Projeto e Análise de Algoritmos

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

Análise e Projeto de Algoritmos

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

Programação de Computadores II TCC

Projeto e Análise de Algoritmos

Centro de Informá-ca Universidade Federal de Pernambuco. Vinicius Cardoso Garcia 2011 Vinicius Cardoso Garcia

FUNDAÇÃO UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO

Introdução Paradigmas

Técnicas de Concepção de Algoritmos: Branch and Bound

MINISTÉRIO DA EDUCAÇÃO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS DIRETORIA DE GRADUAÇÃO

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

BCC202 - Estrutura de Dados I

Classificação e Pesquisa

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular ALGORITMOS E ESTRUTURAS DE DADOS Ano Lectivo 2018/2019

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Paradigmas de Projetos de Algoritmos

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível:

Busca em Profundidade. Busca em Grafos. Busca em Grafos. Busca em Grafos. Busca em Grafos. Os objetivos da busca são: Aplicações???

Invariantes de Laço. Profa. Sheila Morais de Almeida. junho DAINF-UTFPR-PG

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Métodos de ordenação. Bubble sort:

Informações Importantes! INF TURMA A

Projeto e Análise de Algoritmos. Introdução. Prof. Ademir Constantino Universidade Estadual de Maringá Departamento de Informática

Classificação e Pesquisa

Programação Estruturada Aula - Estruturas de Repetição

Projeto e Análise de Algoritmos

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA DEPARTAMENTO DE INFORMÁTICA APLICADA

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Análise e Projeto de Algoritmos

Implementação de algoritmos para consultas de segmentos em janelas

5COP096 TeoriadaComputação

Trabalho de Análise de Algoritmos. Problema da Mochila

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Algoritmos de Busca em Vetores

Filas de Prioridades Letícia Rodrigues Bueno

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Classificação por Seleção Direta

Carlos Eduardo Batista. Centro de Informática - UFPB

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

1 a Lista de Exercícios

Ciclos hamiltonianos e o problema do caixeiro viajante

Estruturas de Dados 2

Ordenação por Intercalação Métodos de Ordenação Parte 4

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Árvores Binárias. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 17/03/2015

APOSTILA DE MÉTODO GULOSO

Linguagem C: Ordenação

Classificação Externa: Intercalação de Partições Classificadas

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Algoritmos em Strings

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular ALGORITMOS E ESTRUTURAS DE DADOS Ano Lectivo 2017/2018

Busca em Profundidade. Componentes Conexos. Grafos. Maria Adriana Vidigal de Lima. Fevereiro

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet

13 Hashing (parte 2) SCC201/501 - Introdução à Ciência de Computação II

Complexidade de Tempo e Espaço

Projeto e Análise de Algoritmos

TEORIA: 60 LABORATÓRIO: 0

Programação Estruturada

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

SCC Capítulo 6 Paradigmas e Técnicas de Projetos de Algoritmos

Transcrição:

Projeto de algoritmos: Algoritmos Gulosos ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 09/2008 Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 1 / 12

Algoritmos Gulosos: Conceitos Básicos Tipicamente algoritmos gulosos são utilizados para resolver problemas de otimização. Um algoritmo guloso sempre faz a escolha que parece ser a melhor a cada iteração. Ou seja, a escolha é feita de acordo com um critério guloso! É uma decisão localmente ótima! Propriedade da escolha gulosa: garante que a cada iteração é tomada uma decisão que levará a um ótimo global. Em um algoritmo guloso uma escolha que foi feita nunca é revista, ou seja, não há qualquer tipo de backtracking. Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 2 / 12

Algoritmos Gulosos: Idéias Básicas A idéia básica da estratégia gulosa é construir por etapas uma solução ótima. Em cada passo, após selecionar um elemento da entrada (o melhor), decide-se se ele é viável - vindo a fazer parte da solução - ou não. Após uma seqüência de decisões, uma solução para o problema é alcançada. Nessa seqüência de decisões, nenhum elemento é examinado mais de uma vez: ou ele fará parte da solução, ou será descartado. Freqüentemente, a entrada do problema já vem ordenada. Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 3 / 12

Intercalação (Fusão) de Vetores No livro [2], foi apresentado um método para intercalação(fusão) de vetores: Intercalação de Vetores int [] intercalacao(int [] a, int [] b) { int posa = 0, posb = 0, posc = 0; int [] c = new int [a.length + b.length]; // Enquanto nenhuma das seqüências está vazia... while (posa < a.length && posb < b.length) { // Pega o menor elemento das duas seqüências if(b[posb] <= a[posa]) { c[posc] = b[posb]; posb++; } else { c[posc] = a[posa]; posa++; } posc++; } Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 4 / 12

Intercalação de Vetores (continuação) Intercalação de Vetores (continuação) // Completa com a seqüência que ainda não acabou while (posa < a.length) { c[posc] = a[posa]; posc++; posa++; } while (posb < b.length) { c[posc] = b[posb]; posc++; posb++; } return c; // retorna o valor resultado da intercalação } Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 5 / 12

Intercalação sucessiva de Vetores Um exemplo simples que ilustra bem a estratégia gulosa é o problema da intercalação sucessiva de vetores. Trata-se de intercalar n vetores Há várias maneiras possíveis de se realizar uma seqüência de intercalações Ocorre que isso pode afetar o número de comparações necessárias Lembremos o caso mais simples de intercalação de dois vetores, com tamanhos m 1 e m 2 O tamanho do vetor resultante é m 1 + m 2 O número de comparações necessárias (no pior caso) será m 1 + m 2 1 Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 6 / 12

Intercalação sucessiva de Vetores Três vetores V 1, V 2 e V 3, com respectivos tamanhos 15, 10 e 5. Uma maneira de realizar a intercalação seria: primeiro intercalar V 1 e V 2 e depois o vetor resultante V 12 com V 3. O número de comparações para produzir V 12 é 15 + 10 1 = 24. Para intercalar V 12 com V 3 é (15 + 10) + 5 1 = 29. No total, teremos 24 + 29, ou seja, 53 comparações. Primeiro intercalar V 2 e V 3 e depois o vetor resultante V 23 com V 1. O número de comparações para produzir V 23 é 10 + 5 1 = 14. Para intercalar V 23 com V 1 é (10 + 5) + 15 1 = 29. No total, teremos 14 + 29, ou seja, 43 comparações. Primeiro intercalar V 1 e V 3 e depois o vetor resultante V 13 com V 2. Quantas comparações são feitas? A ordem das intercalações influencia substancialmente o número de comparações requeridas Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 7 / 12

Intercalação sucessiva de Vetores Quantidade de comparações V 1 + V 2 V 12 e V 12 + V 3 V 123 m 1 + m 2 1 para produzir V 12 m 12 + m 3 1 para produzir V 123 Ou seja, m 1 + m 2 1 + m 1 + m 2 + m 3 1 2(m 1 + m 2 ) + m 3 2 V 2 + V 3 V 23 e V 23 + V 1 V 123 m 2 + m 3 1 para produzir V 23 m 23 + m 1 1 para produzir V 123 Ou seja, m 2 + m 3 1 + m 2 + m 3 + m 1 1 2(m 2 + m 3 ) + m 1 2 V 1 + V 3 V 13 e V 13 + V 2 V 123 m 1 + m 3 1 para produzir V 13 m 13 + m 2 1 para produzir V 123 Ou seja, m 1 + m 3 1 + m 1 + m 3 + m 2 1 2(m 1 + m 3 ) + m 2 2 O primeiro par de vetores a ser intercalado dá contribuição com maior peso para o total. Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 8 / 12

Intercalação sucessiva de Vetores um algoritmo guloso para esse problema Seleciona, a cada passo um par com soma mínima dentre os presentes para fazer parte da solução. Ao final, teremos uma seqüência ótima de intercalações. 10 20 30 40 50 30 30 40 50 60 40 50 60 90 150 Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 9 / 12

Procedimento Intercala Ótima de Vetores procedimento intercala_ótima_vetores Entrada: Conjunto V de n vetores (com seus tamanhos) Saída: par (intercalação dos n vetores, número de comparações) BEGIN numcmp = 0; REPITA escolhe os dois menores vetores A e B (seleção gulosa) V = V - { A, B }; C = Intercala ( A, B ); V = V + { C }; numcmp = numcmp + tam(a) + tam(b) - 1 ATÉ QUE V = 1; retorne_saída(v, numcmp); END Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 10 / 12

int[] merge(int[][] conjunto) { int tam = conjunto.length; int numcmp = 0; } do { /* escolhe os dois menores vetores A e B (seleção gulosa) */ Menores menores = menoresvetores(conjunto); int prim = menores.getprimeiro(); int seg = menores.getsegundo(); int[] A = conjunto[prim]; int[] B = conjunto[seg]; /* V = V - A, B ; */ conjunto = removevetores(conjunto, menores); /* C = Intercala(A, B); */ int[] C = merge(a, B); /* V = V + C */ conjunto[tam - 2] = C; numcmp = numcmp + A.length + B.length - 1; tam = tam - 1; } while (tam > 1); System.out.println("Foram feitas " + numcmp + " Comparações"); return conjunto[0]; Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 11 / 12

Resumo Foi apresentada a técnica de projeto de algoritmos: algoritmos gulosos A idéia básica da estratégia gulosa é construir por etapas uma solução ótima. Em cada passo, após selecionar um elemento da entrada (o melhor), decide-se se ele é viável - vindo a fazer parte da solução - ou não. Referências utilizadas [1] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest & Clifford Stein. Algoritmos - Tradução da 2a. Edição Americana. Editora Campus, 2002. [2] Laira V. Toscani & Paulo A.S. Veloso. Complexidade de Algoritmos. Série Livros Didáticos, Instituto de Informática da UFRGS, 2a. Edição, 2005. Delano M. Beder (EACH - USP) Algoritmos Gulosos ACH2002 12 / 12