Prof. Dr. Sérgio Crespo Alexandre Nunes Barbosa Daniel de Souza Martins [email protected]/ [email protected] Introdução Como Funciona Como Funciona: Características Aplicação Múltiplos caminhos Fibonacci Conclusão Referencias É um método de construção de algoritmos para a resolução de problemas computacionais, em especial os de otimização combinatória. Se aplica aos problemas cuja a solução ótima pode ser computada a partir da solução ótima de seus subproblemas (estas soluções devem estar armazenadas de forma a evitar o recálculo). Particiona os problemas em subproblemas independentes; Resolve os problemas de forma recursiva; Armazena as soluções em uma tabela; Combina as soluções problema original. para resolver o Subestrutura ótima: as soluções ótimas do problema contém soluções ótimas para os subproblemas; Sobreposição de subproblemas (Overlaping subproblems): A solução ótima de um subproblema é utilizada várias vezes, mas calculada uma única vez; Fórmula de recorrências: descreve a relação entre as soluções ótimas dos subproblemas. Caminhos mínimos (algorítimo de Floyd Warshall); Fibonacci; Jogo da velha; Problema binário da mochila; Multiplicação de cadeia de matrizes. Dado um grafo orientado G, calcular o custo mínimo do caminho mais curto entre todos os pares de vértices. Os custos podem ser negativos, mas não existem ciclos negativos. Problema: ◦ Calcular a menor distância (custo) entre todos os vértices do grafo. ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ Calcular Calcular Calcular Calcular a a a a Calcular a Calcular a Calcular a Calcular a distância distância distância distância entre entre entre entre 1 1 1 1 distância entre distância entre distância entre distância entre ◦ ◦ ◦ ◦ e e e e 3 3 3 3 2; 3; 4; 5; ◦ ◦ ◦ ◦ Calcular a Calcular a Calcular a Calcular a distância entre distância entre distância entre distância entre 2 2 2 2 e e e e 1; 3; 4; 5; e e e e ◦ ◦ ◦ ◦ Calcular a Calcular a Calcular a Calcular a distância entre distância entre distância entre distância entre 4 4 4 4 e e e e 1. 2. 3. 5. 1; 2; 4; 5; Calcular a Calcular a Calcular a Calcular a distância entre distância entre distância entre distância entre 5 5 5 5 e e e e 1; 2; 3; 4; 5 4 5 3 4 3 2 3 2 1 0 f(x) 2 2 1 1 2 1 3 0 1 1 2 3 5 1 0 1 0 1 0 Um algoritmo que utiliza computação dinâmica permite computar a solução para cada subproblema uma única vez; Executando o algoritmo uma vez é possível obter todos os resultados, que armazenados não precisam mais ser calculados. O uso da programação dinâmica reduz o custo de processamento. Programação Dinâmica. Disponível em: <http://pt.wikipedia.org/wiki/Programa%C3%A7 %C3%A3o_din%C3%A2mica> ALGORITIMOS AVANÇADOS, PROGRAMAÇÃO DINÂMICA. Disponível em: <http://agilextremme.blogspot.com//> Programação Dinâmica. Disponível em: <http://vidageek.net/2008/02/11/programacao -dinamica/> Programação Dinâmica. Souza, Cid C. de. Disponível em: <http://vidageek.net/wpcontent/uploads/2008/02/progdin.pdf>