bcc402 algoritmos e programação avançada · algoritmos gulosos • algoritmos gulosos...

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

Upload: others

Post on 22-Jul-2020

40 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

BCC402 Algoritmos e Programação AvançadaProf. Marco Antonio M. CarvalhoProf. Túlio Ângelo M. Toffolo2011/1

Page 2: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

2

Na aula anterior

• Programação Dinâmica

Page 3: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

3

Na aula de hoje

• Algoritmos Gulosos.

Page 4: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

4

Problemas Combinatórios

• Como dito anteriormente, problemascombinatórios são problemas em que umasolução é a combinação de um subconjunto de elementos;

• O espaço de busca de um problemacombinatório é o conjunto de todas as soluçõespossíveis, podendo ser restrito as soluçõesviáveis ou não.

Page 5: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

5

Objetivos

• As soluções de um problema combinatório sãoavaliadas de acordo com o objetivo a ser alcançado– Que pode ser representado através de uma

expressão matemática.• Tais expressões possuem como variáveis os

elementos a serem combinados e que formam o espaço de busca;

• Podemos desejar maximizar ou minimizar a função objetivo.

Page 6: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

6

Restrições

• O enunciado de problemas combinatórioselencam um objetivo a ser alcançado de acordocom alguns critérios sobre a estrutura dasolução;

• Tais critérios são chamados de restrições do problema, e são utilizados para definir a viabilidade de uma determinada solução– Uma solução que respeita todas as restrições é

dita viável;– Uma solução que viola uma ou mais restrições é

chamada de inviável.

Page 7: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

7

Problemas Combinatórios

• Consideremos novamente o Problema daMochila:– Dada uma mochila com capacidade C, e n

objetos xi (i=1…n) com peso pi (i=1…n), o objetivo é preencher a mochila com o maior peso total, respeitando a capacidade C.

Page 8: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

8

Problemas Combinatórios

• Este problema pode ser modelado da seguinte maneira:– As variáveis são os elementos xi (i=1…n), cujo domínio é

binário• A variável xi vale 1 caso o elemento i esteja presente na

solução, e 0 caso contrário.

– A função objetivo é a soma das variáveis multiplicadas porseus pesos

• Ou seja, Σpi xi para (i=1…n);• Deve ser maximizada.

– A única restrição é que a soma dos pesos dos objetosselecionados seja menor que a capacidade C.

Page 9: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

9

Modelagem

nix

nip

Cxp

asujeito

xp

i

i

n

i

ii

n

i

ii

K

K

,1}1,0{

,1}1,0{

:

max

1

1

=∈

=∈

≤∑

=

=

Page 10: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

10

Problemas Combinatórios

• Supondo uma mochila de capacidade 15 kg e objetos de peso 12 kg, 2 kg, 4 kg e 8 kg temos– C = 15;– n = 4; – p1 = 12, p2 = 2, p3 = 4, p4 = 8.

Page 11: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

11

Modelagem

4,1}1,0{

4,1}1,0{

84212

:

84212max

4321

4321

K

K

=∈

=∈

≤+++

+++

ix

ip

Cxxxx

asujeito

xxxx

i

i

Page 12: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

12

Espaço de Busca

x1

x2

x1 x2 x3 x4

x2 x3 x4

x2 x4

X1 x2 x3 x4

Page 13: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

13

Soluções

• Uma solução ótima é uma solução viável queotimiza (maximiza ou minimiza) a funçãoobjetiva de um problema combinatório– Ou seja, atinge o melhor valor para um problema.

• Podemos ter uma ou múltiplas soluções ótimaspara um modelo, todas com o mesmo valor de avaliação da função objetivo

Page 14: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

14

Soluções

• Ao explorarmos o espaço de busca utilizandoalguma técnica, podemos realizar movimentosentre soluções– Ou seja, a partir de uma solução atual, a

alteramos de uma determinada maneira e chegamos a outra solução.

• Duas soluções que se diferem entre si por um movimento são ditas vizinhas.

Page 15: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

15

Vizinhança

x1

x2

x1 x2 x3 x4

x2 x3 x4

x2 x4

X1 x2 x3 x4

Page 16: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

16

Ótimo Local x Ótimo Global

• Um ótimo global é uma solução consideradaótima entre todas as soluções possíveis– Ou seja, considerando-se todo o espaço de

busca.

• Um ótimo local é uma solução consideradaótima entre todas as soluções de sua vizinhança– Ou seja, não necessariamente um ótimo global,

podendo ser considerada uma soluçãosubótima.

Page 17: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

17

Ótimo Local x Ótimo Global

Page 18: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

18

Métodos Exatos e Heurísticos

• Um método exato (ou método ótimo) para um problemacombinatório é aquele que sempre gera uma soluçãoótima global– Em casos de modelagem complexa, determinar uma

solução ótima em tempo razoável pode ser até impossívelcom as ferramentas e técnicas disponíveis atualmente.

• Podemos utilizar também métodos heurísticos (ou nãoexatos) para gerar boas soluções (geralmentesubótimas)– Não há garantia de qualidade da solução;– Para problemas pequenos, pode achar a solução ótima

com facilidade mesmo para problemas complexos;– Geralmente rápidos.

Page 19: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

19

Métodos Exatos e Heurísticos

• Existem ainda os métodos aproximados– Possuem garantia de proximidade da solução

ótima;– De acordo com a caracterização matemática da

solução ótima, é possível provar, geralmente porindução, de que qualquer solução obtida pelométodo estará dentro de uma determinadadistância da solução ótima.

Page 20: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

20

Métodos Exatos e Heurísticos

• Ao tratarmos de problemas difíceis, como os NP-Completos, sabemos que não são conhecidas técnicas eficientes para a sua resolução– Não é possível enumerar todo o espaço de

soluções;– Então, podemos analisar as características da

entrada para o problema para obter alguma vantagem no projeto de uma solução?

• O jeito é lançar mão das heurísticas.

Page 21: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

21

Algoritmos Gulosos

• Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se baseiam na melhor escolha a cada passo, de acordo com um conjunto de opções restrito– Em outras palavras, escolhe o ótimo local a cada passo.

• Em algumas situações esta estratégia leva à soluções ótimas ou ótimos globais;

• No entanto, não existe garantia de bom desempenho em geral– Em casos de problemas difíceis, algoritmos gulosos bem

projetados produzem soluções boas, aceitáveis diante da dificuldade dos problemas.

Page 22: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

22

Algoritmos Gulosos

• Algoritmos gulosos não reconsideram escolhas uma vez feitas– Não realizam uma busca exaustiva;– O que diferencia este método de backtracking, por

exemplo.

• Uma escolha errada e a solução ótima pode escapar– Considere o problema do caminho de maior soma.

Page 23: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

23

Algoritmos Gulosos

• Boa parte do projeto de um algoritmo guloso é devido àcriatividade do projetista– Novamente, é necessário enxergar o problema pela

perspectiva correta, ter insights.

• Em geral, algoritmos gulosos possuem:– Fácil definição;– Fácil implementação;– Bom desempenho computacional.

• Provar a corretude de um algoritmo guloso poderequerer provas matemáticas rigorosas e geralmentedifíceis.

Page 24: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

24

Algoritmos Gulosos

• Composição– Conjunto de opções

• Do qual é escolhido o próximo passo.– Critério guloso de escolha

• Como será realizada a escolha. É independente de escolhas passadas.

– Função de viabilidade• Avalia quais escolhas são de fato viáveis.

– Função objetivo• Determina o valor de cada escolha.

– Função de solução• Determina se a solução corrente é completa.

Page 25: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

25

Algoritmos Gulosos

• Inicialmente, a solução é um conjunto vazio– A cada passo:

• Escolha o melhor elemento do conjunto de opçõespor meio do critério guloso e da função objetivo;

• Verifique a viabilidade da solução por meio dafunção de viabilidade

• Se a escolha é viável– Atualize a função objetivo;

• Senão– Rejeite este elemento (definitivamente);

• Se a solução é completa (função solução)– Termine.

Page 26: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

26

Algoritmos Gulosos

• Podem ser aplicados a qualquer problema– Podem ainda ser embutidos em métodos mais

elaborados.• Algumas aplicações de sucesso

– Árvore Geradora Mínima• Prim e Kruskal.

– Caminho Mínimo• Dijkstra.

– Cobertura de Conjuntos• Chvátal.

– Matróides• Aplicação sem tanto sucesso

– Ordenação.

Page 27: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

27

Exemplo

• Consideremos mais uma vez o problema da mochila.

Page 28: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

28

O Problema da Mochila

• O conjunto de opções é o conjunto de objetos disponíveis a cada instante;

• A função de viabilidade determina se o objeto escolhido ultrapassa o limite da mochila ou não;

• A função objetivo avalia a soma dos objetos escolhidos• A função solução determina se não é mais possível

colocar objetos na mochila;• E o critério guloso? Qual poderia ser?

Page 29: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

29

Algoritmos GulososTópicos de Projeto

• Caso o problema tratado possua a propriedade de subestrutura ótima as chances de obter uma solução ótima global aumentam– Será necessário estabelecer uma relação entre a

subestrutura ótima e o critério guloso a ser utilizado.

• Algoritmos gulosos possuem um princípio básico simples e muita liberdade para o seu projeto– Podem ser recursivos ou iterativos.

Page 30: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

30

Subestrutura Ótima

• Um problema que possui subestrutura ótimapode ser dividido sucessivamente, e a combinação das soluções ótimas dos subproblemas corresponde à solução ótima do problema original– Ou seja, é possível diminuir o problema, e

resolvê-lo incrementalmente com ótimos locais, pois eles construirão o ótimo global.

Page 31: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

31

Árvores Geradoras

• Dado um grafo G=(V, E) conectado e não orientado, uma árvore geradora T(V’, E’) écomposta por V = V’ e E’ E– Tendo em vista que T é uma árvore, não são

admitidos ciclos.

Page 32: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

32

Árvores Geradoras Mínimas

• Em um grafo ponderado H, uma árvore geradora mínima é uma árvore geradora cuja soma dos pesos das arestas é mínimo– Existem dois algoritmos básicos para determinação de

árvores geradoras mínimas:• Algoritmo de Prim;• Algoritmo de Kruskal.

• O problema de determinação de árvores geradoras mínimas possui subestrutura ótima– Certamente a árvore geradora mínima conterá as

arestas de menor peso que não formem ciclos.• Aplicação: Alocação de cabos em bairros.

Page 33: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

33

Árvores Geradoras

1

2 3 4

5

8 7 6

9

4

10

9

1 2

8 7

7 6

11 14

8

2

4

1

2 3 4

5

8 7 6

9

Uma árvore geradora.

Uma árvore geradora mínima.

Page 34: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

34

Algoritmo de Prim

• O algoritmo de Prim é guloso;• A partir de um vértice inicial, seleciona as

arestas de menor peso disponíveis a cada vértice já visitado– Sem ciclos, pois só visita novos nós.

Page 35: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

35

Algoritmo de Prim

1. Crie um conjunto de vértices S, com todos os vértices do grafo G;

2. Selecione arbitrariamente um vértice inicial e o remova de S;

1. Enquanto S ≠ vazio1. Selecione a aresta (u, v) de menor peso tal que u

não pertença a S e v pertença1. No caso de empates, decida arbitrariamente;

2. Remova v de S;

3. Retorne ao passo 1.

Page 36: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

36

Algoritmo de Prim

Page 37: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

37

Algoritmo de Prim

Page 38: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

38

Algoritmo de Prim

Page 39: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

39

Algoritmo de Prim

Page 40: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

40

Algoritmo de Prim

Page 41: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

41

Algoritmo de Prim

Page 42: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

42

Algoritmo de Prim

Page 43: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

43

Algoritmo de Prim

Page 44: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

44

Algoritmo de Prim

Page 45: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

45

Algoritmo de Prim

Page 46: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

46

Algoritmo de Kruskal

• É um algoritmo do tipo guloso também;• Não parte de um vértice inicial;

• Seleciona arestas de menor peso sucessivamente até que uma árvore geradora seja obtida– Como as arestas são as de menor peso, é

seguro adicioná-las à arvore geradora mínima.

Page 47: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

47

Algoritmo de Kruskal

1. Ordene as arestas de forma não decrescente em relação ao peso no vetor A

2. Enquanto houverem arestas ou T não for uma árvore geradora

1. Selecione a aresta de menor peso1. Se a aresta conecta dois vértices u e v não

presentes na mesma árvore e não forma ciclo adicione-a a T e remova-a de A;

2. Caso contrário, descarte-a.3. Retorne ao passo 1.

Page 48: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

48

Algoritmo de Kruskal

Page 49: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

49

Algoritmo de Kruskal

Page 50: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

50

Algoritmo de Kruskal

Page 51: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

51

Algoritmo de Kruskal

Page 52: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

52

Algoritmo de Kruskal

Page 53: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

53

Algoritmo de Kruskal

Page 54: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

54

Algoritmo de Kruskal

Page 55: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

55

Algoritmo de Kruskal

Page 56: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

56

Algoritmo de Kruskal

Page 57: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

57

Cobertura de Conjuntos

• Uma instância do problema de cobertura de conjuntos consiste de um conjunto finito X e uma família F de subconjuntos de X– Cada elemento de X pertence a pelo menos um

subconjunto em F• Elementos podem pertencer a mais de um

subconjunto.

• Dizemos que um subconjunto S pertencente a Fé uma cobertura dos seus elementos.

Page 58: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

58

Cobertura de Conjuntos

• O objetivo do problema éencontrar um subconjunto de C F

cujos membros sejam uma cobertura de X;

• O tamanho de C édefinido pela quantidade de subconjuntos que contém.

S2

S3 S5

S6

S4S1⊆

Page 59: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

59

Cobertura de Conjuntos

S2

S3 S5

S6

S4S1

Page 60: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

60

Václav Chvátal

• Doutorado em Matemática em 1 ano;• Alexander von Humboldt

Distinguished Senior Scientist Award– Apenas 100 cientistas no mundo.

• Beale–Orchard-Hays Prize for Excellence in Computational Mathematical Programming– Mathematical Programming

Society.• 3 livros;• Grafo com seu nome;• Grande influência no problema do

caixeiro viajante, programaçãomatemática, art gallery theorem, resolution theorem proving, etc.

• Erdös Number: 1.

Page 61: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

61

David S. Johnson

• Summa Cum Laude no Amherst College emMatemática;

• Chefe do departamento de Algoritmos e Otimização do AT&T labs;

• 2010 Knuth Prize;• Fellow da ACM;• Erdös Number: 2;• Computers and Intractability: A

Guide to the Theory of NP-Completeness;

Page 62: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

62

László Lovász

• 9 livros;• Escreveu 6 artigos com

Paul Erdös;• Erdös Number: 1.

• Presidente da International Mathematical Union;

• Kyoto Prize (2010);• Hungary's Széchenyi Grand

Prize (2008);• Bolyai prize (2007);• Gödel Prize (2001);• Wolf Prize (1999);• Fulkerson Prize (1982);• Best Information Theory

Paper Award (IEEE) (1981);• Pólya Prize (SIAM) (1979).

Page 63: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

63

Cobertura de Conjuntos

S3S5

S2

S6

S1S4

Page 64: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

64

Algoritmos GulososTópicos de Projeto

• Para projetar um bom algoritmo guloso alguns tópicos devem ser observados:– Definição de uma estratégia interessante para solução do

problema, não qualquer uma• Qual seria um ponto chave para a solução? O critério

guloso...– Definir operações “leves”;– Utilizar estruturas de dados adequadas para as operações

definidas;– Empregar técnicas de implementação que tornem o

código mais “esperto”;– Se o resultado for bom, batize com seu nome!

Page 65: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

65

Algoritmos GulososTópicos de Projeto

• Não há um método geral que ensine como aplicar um método guloso a um problema– Porém, a especificação do problema pode nos far boas

dicas.• Alguns conceitos matemáticos podem ser utilizados para

definir uma classe de instâncias que podem ser resolvidas de maneira gulosa– Mas normalmente, utiliza-se somente o faro e a

experiência do projetista;– Há diversos critérios gulosos, mas poucos são corretos.

• Em outros casos, um problema difícil pode conter um atalho engenhoso– Esta é a beleza dos algoritmos gulosos e heurísticas.

Page 66: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

66

Algoritmos Gulosos

• Vantagens– Algoritmos simples;– Fácil implementação;– Em alguns casos fornecem soluções bastante

satisfatórias.

• Desvantagens– Não há nenhuma garantia de qualidade da

solução.

Page 67: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

67

Algoritmos Gulosos

Deixando de lado o rigor, deve-se olhar para um algoritmo guloso através dos olhos de um detetive e não através dos óculos de um

matemático.

Um bom detetive Guloso e Sortudo Guloso e Azarado

Page 68: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

68

Perguntas?

Page 69: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

69

Na próxima aula

• Práticas.

Page 70: BCC402 Algoritmos e Programação Avançada · Algoritmos Gulosos • Algoritmos Gulosos (Gananciosos, Míopes, etc.) são algoritmos que funcionam em uma sequência de passos e se

70

FIM