33
Luís Ovídio Viana Podestá Fabiana Zioti Vinícius Henrique Marangoni Algoritmo Guloso

Algoritmo Guloso

Embed Size (px)

Citation preview

Page 1: Algoritmo Guloso

Luís Ovídio Viana PodestáFabiana Zioti

Vinícius Henrique Marangoni

Algoritmo Guloso

Page 2: Algoritmo Guloso

Roteiro

→ Introdução

→ Matróide

→ Problema da Mochila

→ Algoritmo da mochila em C++

→ Exercícios

Page 3: Algoritmo Guloso

Algoritmo

Algoritmo é uma sequência finita de instruções bem definidas que devem ser seguidas para resolver um problema ou executar uma tarefa.

Page 4: Algoritmo Guloso

Otimização

Otimização em matemática, corresponde ao estudo de problemas onde se busca minimizar ou maximizar uma função.

As técnicas matemáticas de otimização visam encontrar uma "solução ótima" para certo problemas, ou seja, que resulte no melhor desempenho possível do sistema.Normalmente esses problemas são modelos da realidade física, então inicialmente é necessário construir um modelo matemático.

Page 5: Algoritmo Guloso

Algoritmo Guloso

Uma das estratégias para resolver problemas de otimização são os algoritmos gulosos ou paradigma guloso na concepção de algoritmos.

Ele escolhe a melhor opção naquele momento (melhor opção local), e assim pretende chegar a melhor solução no todo (global).

Page 6: Algoritmo Guloso

Características

● Algoritmos simples e de fácil implementação.

● Nem sempre conduz à soluções ótimas globais.

● Podem efetuar cálculos repetitivos.

● Um algoritmo guloso é "míope“.

● Nunca reconsideram decisões tomadas.

Page 7: Algoritmo Guloso

Matróide

Um Matróide é um par ordenado M = (S, I), satisfazendo as seguintes condições:

1. S é um conjunto finito não vazio

2. I é uma família não vazia de subconjuntos de S, chamada de subconjuntos independentes de S, tal que se B I∈ e A B⊆ então A I∈ . Observe que o conjunto vazio deve ser necessariamente um membro de I. Neste caso dizemos que I é hereditário

3. Se A I∈ , B I∈ e |A| < |B|, então existe algum elemento x (B-A)∈ tal que A U {x} I∈ .Dizemos que M satisfez a propriedade de troca.

Page 8: Algoritmo Guloso

Problema da Mochila

Um ladrão que rouba uma loja encontra n itens, onde cada item vale v reais e pesa p quilos. O ladrão deseja levar a carga mais valiosa possível, mas consegue levar apenas W quilos em sua mochila.

No problema da mochila 0-1, o ladrão deve levar itens inteiros. Já no problema da mochila fracionária, o ladrão pode levar frações de um item.

OBS: A solução gulosa para o problema da mochila 0-1 não garante uma solução ótima.

Page 9: Algoritmo Guloso

Problema da Mochila 0-1

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Peso suportado pela mochila: 50Kg

Page 10: Algoritmo Guloso

Problema da Mochila 0-1

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$0,00

0 Kg

Page 11: Algoritmo Guloso

Problema da Mochila 0-1

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$0,00

0 Kg

Page 12: Algoritmo Guloso

Problema da Mochila 0-1

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$60,00

Item 1

10 Kg

Page 13: Algoritmo Guloso

Problema da Mochila 0-1

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$60,00

10 Kg

Item 1

Page 14: Algoritmo Guloso

Problema da Mochila 0-1

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$160,00

Item 2

30 Kg

Item 1

Page 15: Algoritmo Guloso

Problema da Mochila 0-1

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$160,00

30 Kg

Item 2Item 1

Page 16: Algoritmo Guloso

Problema da Mochila 0-1

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$160,00

30 Kg Não tem como colocar mais 30 Kg na mochila

Item 2Item 1

Page 17: Algoritmo Guloso

Problema da Mochila 0-1

Solução Gulosa

Mochila (50 Kg)

Valor: R$160,00

30 Kg

Item 2Item 1

A solução ótima para o problema da mochila 0-1 é encontrada utilizando programação dinâmica

Page 18: Algoritmo Guloso

Problema da Mochila 0-1

Solução Ótima

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Mochila (50 Kg)

Valor: R$220,00

50 Kg

Item 2 Item 3

Page 19: Algoritmo Guloso

Problema da Mochila Fracionária

● No problema da mochila fracionária, podemos fracionar um item

● Por exemplo:

Cabe apenas mais 10 Kg na mochila e eu tenho um itemque pesa 100 Kg. Então eu posso fracionar o item de forma a colocar apenas 10% de seu peso na mochila e consequentemente colocar apenas 10% de seu valor

Page 20: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Peso suportado pela mochila: 50Kg

Page 21: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$0,00

0 Kg

Page 22: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$0,00

0 Kg

Page 23: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$60,00

Item 1

10 Kg

Page 24: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$60,00

10 Kg

Item 1

Page 25: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$160,00

Item 2

30 Kg

Item 1

Page 26: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$160,00

30 Kg

Item 2Item 1

Page 27: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$160,00

30 Kg Cabe mais 20 Kg, ou seja2/3 do Item 3

Item 2Item 1

Page 28: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$160,00

30 Kg 2/3 * 30 = 20Kg2/3 * 120 = R$80,00

Item 2Item 1

Page 29: Algoritmo Guloso

Problema da Mochila Fracionária

Item Valor (R$) Peso (Kg) Valor por Kg

1 60 10 6

2 100 20 5

3 120 30 4

Solução Gulosa

Mochila (50 Kg)

Valor: R$240,00

50 Kg

Item 2Item 1 2/3 do Item 3

Page 30: Algoritmo Guloso

Problema da Mochila Fracionária

Solução Gulosa → Ótima

Mochila (50 Kg)

Valor: R$240,00

50 Kg

Item 2Item 1 2/3 do Item 3

Page 31: Algoritmo Guloso

Algoritmo

Mochila.cpp

Page 32: Algoritmo Guloso

Gula vs Programação Dinâmica

Às vezes é difícil distinguir um algoritmo guloso de um algoritmo de programação dinâmica. Algumas características que podem ajudar são:

Guloso Programação Dinâmica

Alternativa mais promissora Explora todas as alternativas

É muito rápido Um tanto lento

Nunca se arrepende Pode se arrepender

Não tem garantia de solução ótima Tem garantia de solução ótima

Page 33: Algoritmo Guloso

Outros Algoritmos Gulosos

● Código de Huffman

● Algoritmo de Kruskal (Árvore Geradora de Peso Mínimo - Grafos)

● Dijkstra (Caminho Mínimo - Grafos)