43
Algoritmos Gulosos e Aproximados Dianne Dias Silva Inael Rodrigues Jarderson Cruz

Paa algoritmos gulosos

Embed Size (px)

DESCRIPTION

Apresentação de Algoritmos Gulosos na disciplina Análise de Algoritmos do mestrado da UFG.

Citation preview

Page 1: Paa  algoritmos gulosos

Algoritmos Gulosos e AproximadosDianne Dias SilvaInael RodriguesJarderson Cruz

Page 2: Paa  algoritmos gulosos

O que são algoritmos gulosos?

Page 3: Paa  algoritmos gulosos

O que são algoritmos gulosos?

Algoritmo guloso, ou ganancioso, é uma técnica de algoritmos para resolver problemas de otimização, sempre realizando a escolha que parece ser a

melhor no momento; fazendo uma escolha ótima local, na esperança de que esta escolha leve até a solução ótima global.

Page 4: Paa  algoritmos gulosos

Características dos Algoritmos

● Utilizados para otimização; ● Um algoritmo guloso é "míope";● Nunca voltam atrás;● Algoritmos simples e de fácil

implementação;● Nem sempre conduz à soluções ótimas

globais;● Podem efetuar cálculos repetitivos.

Page 5: Paa  algoritmos gulosos

Elementos do Algoritmo Guloso

● Propriedade de escolha gulosa;

● Subestrutura ótima.

Page 6: Paa  algoritmos gulosos

Algoritmo Guloso Genérico

Page 7: Paa  algoritmos gulosos

Problema do Troco

Page 8: Paa  algoritmos gulosos

Problema do Troco

● Troco de $2.89;

● Moedas = { 100, 25, 10, 5 , 1 };

● Min (Troco): 2 de valor 100, 3 de valor 25, 1 de valor 10 e 4 de valor 1.

Page 9: Paa  algoritmos gulosos

Algoritmo do Troco

Page 10: Paa  algoritmos gulosos

Seleção de Atividades

Page 11: Paa  algoritmos gulosos

Seleção de Atividades

● S = a1, a2, . . . , an um conjunto n atividades que desejam utilizar um mesmo recurso;

● ai possui um tempo de início (si) e um tempo de término (fi);

● 0 ≤ si < fi < ∞;

● ai e aj são compatíveis se si ≥ fj ou sj ≥ fi.

Page 12: Paa  algoritmos gulosos

Seleção de Atividades

Page 13: Paa  algoritmos gulosos

Seleção de Atividades

Page 14: Paa  algoritmos gulosos

Seleção de Atividades

Page 15: Paa  algoritmos gulosos

Seleção de Atividades

Page 16: Paa  algoritmos gulosos

Seleção de Atividades

Page 17: Paa  algoritmos gulosos

Seleção de Atividades

Page 18: Paa  algoritmos gulosos

Seleção de Atividades

Page 19: Paa  algoritmos gulosos

Seleção de Atividades

Page 20: Paa  algoritmos gulosos

Algoritmo da Seleção de Atividades

Page 21: Paa  algoritmos gulosos

Algoritmo da Seleção de Atividades

Page 22: Paa  algoritmos gulosos

Estratégia Gulosa X Programação Dinâmica

● Programação Dinâmica: Escolha depende das soluções para os subproblemas (Top-down), ou seja, subproblemas menores para os maiores;

● Estratégia Gulosa: Não depende das soluções para os subproblemas (Bottom-up), isto é, a instância de um problema é reduzida a cada iteração, através da escolha gulosa.

Page 23: Paa  algoritmos gulosos

Problema da Mochila

● Problema da mochila 0-1: um ladrão tem que levar itens inteiros e pode levar um mesmo item apenas uma vez;

● Problema da mochila fracionária: o ladrão pode levar frações de cada item;

● Pode se utilizar uma estratégia gulosa para resolver o problema da mochila fracionária, mas não para resolver o da mochila 0-1.

Page 24: Paa  algoritmos gulosos

Problema da Mochila

Page 25: Paa  algoritmos gulosos

Algoritmos Aproximados

● Um algoritmo de aproximação retorna soluções aproximadas;

● São algoritmos de tempo polinomial para vários problemas NP-completos;

● Tais algoritmos possuem relação de aproximação se para qualquer entrada, que indica solução obtida está dentro do fator definido do custo da solução ótima;

Page 26: Paa  algoritmos gulosos

Relação de Aproximação

● A relação de aproximação p(n) é definida em termos do custo C* de uma solução ótima;

● Para qualquer entrada de tamanho n, o custo C da solução produzida pelo algoritmo de aproximação está dentro de um fator p(n) da solução ótima;

Page 27: Paa  algoritmos gulosos

Relação de Aproximação

● Estas definições se aplicam tanto a problemas de minimização quanto maximização;

● Maximização (0<C<C*): a relação C*/C o fator do custo da solução ótima é maior que o custo da solução aproximada;

● Minimização (0<C*<C): a relação C/C* o fator do custo da solução aproximada é maior que o custo da solução ótima;

Page 28: Paa  algoritmos gulosos

Relação de Aproximação

● A relação de aproximação nunca é menor que 1, pois C/C*<1 implica C*/C>1;

● Quando a relação de aproximação é independente de n, a denotamos de p(n);

● É possível alcançar relações de aproximação cada vez melhores, mas ao custo de mais tempo de computação.

Page 29: Paa  algoritmos gulosos

Esquemas de Aproximação

●O esquema de aproximação é um algoritmo de aproximação que toma como entrada não apenas uma instância do problema, mas também um valor ε;

●Tal que para qualquer ε fixo, o esquema é um algoritmo de aproximação (1 + ε);

Page 30: Paa  algoritmos gulosos

Esquemas de Aproximação

● Se o esquema de aproximação é executado em tempo polinomial para qualquer ε > 0 fixo, o chamamos de esquema de aproximação de tempo polinomial;

● Se o tempo de execução é polinomial em 1/ε quanto ao tamanho n da instância da entrada, o chamamos de esquema de aproximação de tempo completamente polinomial.

Page 31: Paa  algoritmos gulosos

Algoritmos Aproximados

● Cobertura de Vértices: Problema de Decisão;

● Cobertura de Vértices Mínima: Problema de Otimização.

Page 32: Paa  algoritmos gulosos

Cobertura de Vértices

● Se o problema é enunciado como um problema de decisão, é chamado de o problema da cobertura de vértices:○ Instância: Grafo G e um inteiro positivo K.○ Questão: Tem G uma cobertura de vértices de

tamanho máximo de K?

● O problema da cobertura de vértices é um problema dos 21 problemas NP-completos de Karp.

Page 33: Paa  algoritmos gulosos

Cobertura de Vértices

● O problema da cobertura de vértices mínima é um problema de otimização que consiste em encontrar a menor cobertura de vértices em um grafo dado.○ INSTÂNCIA: Grafo G;○ SAÍDA: Menor número K de tal forma que G tem

uma cobertura de vértices de tamanho K.

.

Page 34: Paa  algoritmos gulosos

Cobertura de Vértices

● Definição: Na Teoria dos grafos, uma cobertura de vértices de um grafo é um conjunto de vertices tal que cada aresta do grafo é incidente, a pelo menos, um vértice do conjunto.

Page 35: Paa  algoritmos gulosos

Cobertura de Vértices

● A versão de otimização do problema de cobertura de vértices consiste em encontrar a cobertura de vértices de um grafo que requer o menor número de vértices.○ A chamada cobertura de vértices ótima.

Page 36: Paa  algoritmos gulosos

Cobertura de Vértices

● Cobertura qualquer:

● Cobertura Mínima:

Page 37: Paa  algoritmos gulosos

Cobertura de Vértices

● Como seria uma heurística plausível para obter uma boa cobertura de vértices?○ Adicione os nós de maior grau a C até que todas as

arestas estejam cobertas.

● Esta heurística não é uma aproximação○ A sua relação de aproximação cresce a uma taxa

log n, em que n é o número de vértices.

Page 38: Paa  algoritmos gulosos

Cobertura de Vértices

● Para criarmos um algoritmo de aproximação neste caso, usaremos uma técnica que aparentemente é menos sofisticada do que aquela heurística.○ Comece com C Vazio; ○ Enquanto houver alguma aresta não coberta,

escolha arbitrariamente uma aresta (u,v), adiciona-a a um conjunto A, adicione u e v a C e os remova de G, juntamente com as demais arestas incidentes a elas.

Page 39: Paa  algoritmos gulosos

Cobertura de Vértices

Page 40: Paa  algoritmos gulosos

Cobertura de Vértices

● Quão distante do ótimo a cobertura de vértices obtida pode ser?○ A contém arestas de G, das quais, nenhuma

compartilha um mesmo vértice:■ É um emparelhamento.

○ Limitante: Uma cobertura de vértices ótima, obviamente contém pelo menos um vértice ligado a cada uma das arestas A:■ Senão alguma aresta não seria coberta;■ Então |C*|>= |A|.

Page 41: Paa  algoritmos gulosos

Cobertura de Vértices

● A cobertura de vértices C comtém os dois vértices de cada aresta em A, logo:

|C|=2|A|

● Combinando as duas equações, temos que:

|C|<=2|C*|

Page 42: Paa  algoritmos gulosos

Cobertura de Vértices

● Desta forma, este é um algoritmo de aproximação 2 de cobertura de vértices○ O tamanho da cobertura de vértice retornada é no

máximo 2 vezes maior do que a cobertura de vértices ótima.

● Ainda, o algoritmo é polinomial○ Consiste em remoção e adição de arestas e adição

de elementos em um conjunto.● Surpreedentemente, este é um dos

melhores algoritmos de aproximação para cobertura de vértices.

Page 43: Paa  algoritmos gulosos

Referências Bibliográficas

● CORMEN, T. H., LEISERSON, C, E., RIVEST, R. L. e STEIN, C. “Algoritmos: Teoria e Prática”. 2ª ed. Ed. Campus, 2002.

● ZIVIANI, Nivio. "Projeto de Algoritmos com Implementações em Pascal e C". 3ª ed. Ed. Pioneira Thomson Learning, 2010.