if672 - algoritmos e estruturas de dados cin - ufpe programação dinâmica Átila valgueiro malta...
TRANSCRIPT
![Page 1: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/1.jpg)
IF672 - Algoritmos e Estruturas de Dados CIn - UFPE
Programação Dinâmica
Átila Valgueiro Malta MoreiraJuliana Medeiros de LucenaRafael Alberto Gomes Pereira LimaRafael Loureiro de Carvalho
Sara Carvalho da Rocha BritoTiago Carneiro Pessoa CantoVictor Barbosa de Oliveira MedeirosVinícius Monteiro de Lira
![Page 2: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/2.jpg)
MotivaçãoTécnicas de projeto de algoritmos
estudadas até agora:Algoritmos gulosos (greedy algorithms)
Kruskal , Dijkstra, ...Dividir para conquistar (divide and conquer)
Mergesort, Quicksort, ...
![Page 3: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/3.jpg)
MotivaçãoUm mesmo problema resolvido
através 2 técnicas diferentesDiferentes performances
As técnicas anteriores não resolvem todos os problemas da maneira mais eficiente!!!
![Page 4: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/4.jpg)
MotivaçãoPortanto...
Nenhuma lista de técnicas é exaustivaMas...
Em alguns problemas, não há técnica alguma que nos dê uma solução pelo menos aceitávelProblemas intratáveis (NP-completos)
![Page 5: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/5.jpg)
Estrutura de um problema de Programação DinâmicaGeralmente possuem estruturas recursivas
Subproblemas devem ser resolvidos para que a solução final possa ser alcançada
Em geral aplicados a problemas de otimizaçãoBuscam uma solução ótima
![Page 6: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/6.jpg)
Por que não recursão?Se a estrutura do problema é recursiva,
por que um algoritmo recursivo não seria uma boa solução?Subproblemas não são
independentes.Algoritmos puramente recursivos trabalharão mais que o necessário resolvendo os subsubproblemas comuns mais de uma vez.
![Page 7: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/7.jpg)
Por que não recursão?Uma boa estratégia seria ter uma
tabela onde:Pudéssemos guardar os resultados de sub-instâncias do problema que já foram resolvidas.
E onde consultas poderiam ser feitas sob demanda.
![Page 8: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/8.jpg)
Um exemplo simples: FibonacciOs números de Fibonacci são definidos
pela função:
Definidos em termos de uma função recursivaSeria natural imaginar que a solução
algorítmica correspondente fosse as mais apropriada
F(0) = 1, n = 0 F(1) = 1, n = 1F(n) = F(n-1) + F(n-2), n > 1
![Page 9: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/9.jpg)
Um exemplo simples: FibonacciCódigo recursivo para os números de
Fibonacci:int fibonacci(int n){ if(n <= 1){ return 1; } else{ return fibonacci(n - 1) + fibonacci(n - 2); }}
![Page 10: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/10.jpg)
Um exemplo simples: FibonacciNo entanto...
O algoritmo apresentado é ineficiente pois há trabalho redundante:
![Page 11: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/11.jpg)
Um exemplo simples: FibonacciOs cálculos redundantes levam o
algoritmo a ter desempenho exponencial Um algoritmo mais “experto” poderia
ser feito com programação dinâmicaGuardaria apenas os dois últimos resultados
![Page 12: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/12.jpg)
Um exemplo simples: Fibonacci int fibonacci(int n){ int resultado = 1; if(n > 1){ int ultimo = 1; int penultimo = 1; for(int i = 2; i <= n; i++){ resultado = ultimo + penultimo; penultimo = ultimo; ultimo = resultado; } } return resultado; }
![Page 13: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/13.jpg)
Knapsack(Problema da Mochila)
![Page 14: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/14.jpg)
Knapsack(Problema da Mochila)Busca calcular a melhor maneira de se
armazenar em um compartimento qualquer, muitos itens com valores agregados, de forma que o somatório dos valores de tais itens seja o máximo possível dentre as possibilidades de combinação de itens.
Esse problema tem importantes aplicações, como por exemplo o carregamento ótimo de containers.
Importante para supermercados e empresas de armazenagem e logística em geral.
![Page 15: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/15.jpg)
Knapsack – Como Funciona?Vamos criar uma matriz chamada
maxTab, de ordem (N+1) x (C+1), onde:N = número de itens;C = Capacidade da mochila.
As linhas representam cada item.As colunas a capacidade máxima da
mochila.
![Page 16: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/16.jpg)
Knapsack – Como Funciona?A idéia do algoritmo é começar com uma
mochila de capacidade 1 e descobrir o valor máximo possível para esta mochila. Depois se passa para uma mochila de capacidade 2, que aproveitando as informações da mochila de capacidade atual -1 (nesse caso, 1) descobre o valor máximo para uma mochila de capacidade 2. Isso será feito até capacidade atual ser igual à C. Além da capacidade ir crescendo, também vai se adicionando novos itens no processo.
![Page 17: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/17.jpg)
Knapsack – Como Funciona?A idéia é ir percorrendo por linha (ou seja, por
item) tal tabela, e para a coluna j atual, que representa capacidade atual, analisar se o item atual i (linha atual) cabe na mochila de capacidade j. Se couber é preciso escolher o maior valor entre: valor na mochila de mesma capacidade j que não
tinha esse item (essa informação estará em maxTab[i-1][j]).
Soma do valor do item com o valor na mochila de capacidade (j – peso do item i) e que não tinha esse item(maxTab[i-1][j – peso do item i]).
![Page 18: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/18.jpg)
Knapsack – Como Funciona?Então, se couber (itens[i].peso <= j), teremos: maxTab[i][j] = Máximo(maxTab[i-1][j], valor do item + maxTab[i-1][j – peso do item i]);
Se não couber, significa que o maior valor para essa mochila será o valor da mochila de mesma capacidade, mas que não tem esse item:maxTab[i][j] = maxTab[i-1][j];
![Page 19: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/19.jpg)
Knapsack – ExemploCapacidade da mochila = 5 kgItens:
1. Peso = 4, Frete = 22. Peso = 2, Frete = 13. Peso = 1, Frete = 34. Peso = 2, Frete = 4
![Page 20: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/20.jpg)
Knapsack – Exemplo
0 0 0 0 0 00 ? ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?
4 2 1 22 1 3 4
Peso
Frete
Itens
maxTab[i][j] = maxTab[i-1][j];
![Page 21: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/21.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens
maxTab[i][j] = maxTab[i-1][j];
0 0 0 0 0 00 0 ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?
![Page 22: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/22.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens
maxTab[i][j] = maxTab[i-1][j];
0 0 0 0 0 00 0 0 ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?
![Page 23: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/23.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 ? ?0 ? ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 24: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/24.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 ?0 ? ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 25: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/25.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens
maxTab[i][j] = maxTab[i-1][j];
0 0 0 0 0 00 0 0 0 2 20 ? ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?
![Page 26: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/26.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 27: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/27.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 28: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/28.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 ? ?0 ? ? ? ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 29: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/29.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 ?0 ? ? ? ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 30: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/30.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 ? ? ? ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 31: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/31.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 ? ? ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 32: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/32.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 3 ? ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 33: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/33.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 3 4 ? ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 34: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/34.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 3 4 4 ?0 ? ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 35: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/35.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 3 4 4 50 ? ? ? ? ? maxTab[i][j] = maxTab[i-1][j];
![Page 36: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/36.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 3 4 4 50 3 ? ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 37: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/37.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 3 4 4 50 3 4 ? ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 38: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/38.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 3 4 4 50 3 4 7 ? ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 39: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/39.jpg)
Knapsack – Exemplo
4 2 1 22 1 3 4
Peso
Frete
Itens0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 3 4 4 50 3 4 7 7 ?
maxTab[i][j] = MAX (maxTab[i-1][j], itens[i].frete + maxTab[i-1][j - itens[i].peso])
![Page 40: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/40.jpg)
Knapsack – Exemplo0 0 0 0 0 00 0 0 0 2 20 0 1 1 2 20 3 3 4 4 50 3 4 7 7 8
O 8 representa o valor do maior frete possível que se pode carregar nesta mochila de capacidade 5.
![Page 41: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/41.jpg)
Knapsack – Outra Implementação
![Page 42: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/42.jpg)
Knapsack – Recuperando Informações.Observe que neste algoritmo não obtemos o
subconjunto de itens correspondentes que foram inseridos na mochila.
Se desejássemos obter o subconjunto correspondente, então usaríamos uma flag em cada item para recuperar esta informação.
![Page 43: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/43.jpg)
Knapsack – ComplexidadeExistem (nC) entradas na tabela (onde, n é
o número de itens e C a capacidade da mochila), cada uma é computada em tempo constante a partir de uma ou duas outras entradas.
Logo, a complexidade é O(nC).Obs: Knaspack não é um algoritmo
polinomial pois k (capacidade da mochila) pode ser um valor infinitamente grande.
![Page 44: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/44.jpg)
String MatchingEste algoritmo resume-se em uma
busca de padrões dentro de um conjunto de informações.
São muitas as variações deste problema, desde procurar determinadas palavras ou sentenças em um texto até procurar um determinado objeto dentro de uma seqüência de bits que representam uma imagem.
![Page 45: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/45.jpg)
Algoritmo inocente ou força brutaPode se resolver o problema do String
Matching através da força bruta.Não é inteligente o bastante para
aproveitar os mismatchs, quando acha um caractere em P que não pode ser casado em T.
É deslocada uma posição de cada vez, independente de ter match ou não.
Complexidade: O(n2) .
![Page 46: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/46.jpg)
Força Bruta - Exemplo
![Page 47: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/47.jpg)
Algoritmo De Boyer-MooreConsiste em um algoritmo mais eficiente
na resolução do problema de string matching.
A cada mismatch um novo incremento é calculado para saber qual será a próxima posição do texto que será comparada.
Possui duas versões para este calculoAs comparações entre os caracteres do
texto e do padrão é sempre feito da direita para a esquerda
![Page 48: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/48.jpg)
Boyer-Moore (1ª versão)De inicio, deve-se criar uma tabela com a posição
da última ocorrências de cada caractere do padrão.
A cada mismatch um novo incremento deverá ser calculado da seguinte forma:Pega-se o caractere do texto que esta na
posição: deslocamento + 1.Desloca-se o suficiente para alinhar a ultima
ocorrência desse caractere do padrão com o caractere correspondente no texto.
![Page 49: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/49.jpg)
Boyer-Moore (1ª versão)Texto: addcccadcbaPadrão: ddc
Criando Tabela De Ocorrência do padrão:
![Page 50: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/50.jpg)
Boyer-Moore (1ª versão)addcccadcba
ddcMismatch (pega-se o caractere da posição 5 (‘c’) do texto e procura a sua ultima ocorrência no padrão)
![Page 51: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/51.jpg)
Boyer-Moore (1ª versão)-Exemplo
addcccadcba
ddcMatch (Encontrou uma ocorrência na posição 1 do texto, continua a procura por novas ocorrências)
![Page 52: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/52.jpg)
Boyer-Moore (1ª versão)-Exemplo
addcccadcba
ddcMismatch (pega-se o caractere da posição 5 (‘c’) do texto e procura a sua ultima ocorrência no padrão)
![Page 53: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/53.jpg)
Boyer-Moore (1ª versão)-Exemplo
addcccadcba
ddcMismatch (pega-se o caractere da posição 7 (‘a’) do texto e procura a sua ultima ocorrência no padrão)
![Page 54: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/54.jpg)
Boyer-Moore (1ª versão)-Exemplo
addcccadcba
ddcMismatch (pega-se o caractere da posição 10 (‘a’) do texto e procura a sua ultima ocorrência no padrão)
![Page 55: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/55.jpg)
Boyer-Moore (1ª versão)-Exemplo
addcccadcba
ddcO tamanho do deslocamento + o
comprimento do padrão é maior que o tamanho do texto. (termina o algoritmo).
![Page 56: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/56.jpg)
Boyer-Moore (2ª versão)Tentar casar o padrão com o pedaço
do texto anteriormente casado.
Exemplo:Texto: aabcaccacbacPadrão: cacbac
![Page 57: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/57.jpg)
Boyer-Moore (2ª versão)1 2 3 4 5 6 7 8 9 0 1 2c a c b a ca a b c a c c a c b a c c a c b a c c a c b a c No primeiro caso, o padrão deve ser
deslocado para a direita até casar com o pedaço do texto anteriormente casado, no caso ac, deslocando o padrão 3 posições à direita.
O processo é repetido mais uma vez e o casamento entre P e T ocorre.
![Page 58: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/58.jpg)
Algoritmo De Boyer-Moore (versão 3)Esta versão do algoritmo de Boyer-Moore
consiste em utilizar as duas heurísticas de forma independente e paralela.
Quando ocorre uma falha no casamento, cada uma das heurísiticas propõe um valor para o novo deslocamento válido. O algoritmo de Boyer e Moore escolhe o maior valor.
![Page 59: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/59.jpg)
BibliografiaWeiss, Mark Allen. Data Structures &
Algorithm Analysis in Java, Addison Wesley-Longman
Cormen et al. Algoritmos: Teoria e Prática, Editora Campos
Manber, Udi. Introduction to Algorithms: A Creative Approach, Addison-Wesley
www.ime.usp.br/~mms/macl222s2006/aula18%20Algoritmos%20de%10Busca%20de%20Palavras%20em%20Texto.doc.
![Page 60: IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Programação Dinâmica Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes](https://reader033.vdocuments.pub/reader033/viewer/2022061412/570638631a28abb823901048/html5/thumbnails/60.jpg)
IF672 - Algoritmos e Estruturas de Dados CIn - UFPE
Programação Dinâmica
Átila Valgueiro Malta MoreiraJuliana Medeiros de LucenaRafael Alberto Gomes Pereira
LimaRafael Loureiro de Carvalho
Sara Carvalho da Rocha BritoTiago Carneiro Pessoa CantoVictor Barbosa de Oliveira MedeirosVinícius Monteiro de Lira