Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos Avanados
Programao Dinmica
Particiona o problema em subproblemas independentes; Resolve os problemas recursivamente; Combina suas solues para solucionar o problema original.
Programao Dinmica
Programao dinmica tambm resolve um problema P combinando as solues para subproblemas P Contudo, neste caso, os subproblemas no so necessariamente diferentes:
Um algoritmo de programao dinmica resolve cada subproblema apenas uma vez e armazena sua resposta em uma tabela, evitando o trabalho de recomputar a resposta toda vez que o subproblema encontrado.
Caractersticas Importantes
A decomposio de P nos subproblemas P deve ser de natureza relativamente simples; Usualmente P e P esto relacionados por uma frmula de recorrncia; A tabela deve ser definida, de modo a tornar simples o acesso aos seus resultados.
os primeiros dois elementos so 0 e 1, respectivamente; posteriormente, cada elemento da sequncia definido como a soma dos dois imediatamente anteriores;
Fenotamos por F(n) o n-simo elemento da sequncia e o que segue seria um processo natural para a sua determinao: if n <= 1 ento F(n) = n seno F(n) = F(n 1) + F(n 2).
Fatos Importantes
O problema de se determinar F(n) foi decomposto nos subproblemas de se determinar F(n 1) e F(n 2). Alm disto, para calcular F(n 1), com (n 1) > 1, necessitamos dos resultados dos subproblemas F(n 2) e F(n 3).
Objetivo: resolver cada subproblema uma nica vez, armazenar o resultado e recuperar esta informao toda vez que o subproblema for considerado.
Usar um vetor de tamanho (n + 1), sendo F(n) o elemento da sequncia que desejamos calcular. Veja o exemplo para n = 10: n: F(n): 0 1 2 3 4 5 6 7 8 9 10 0 1 1 2 3 5 8 13 21 34 55
Complexidade: O(n) pois cada elemento da sequncia calculado em tempo constante, iniciando em 0 e prosseguindo em ordem crescente at n.
Definio Mochila(n,K): dados um inteiro K e n itens de tamanhos diferentes tal que o i-simo item tem um tamanho inteiro ki , descobrir um subconjunto de itens cujos tamanhos somam exatamente K, ou determine que nenhum tal subconjunto existe.
Observaes
A mochila pode ser um caminho, navio, chip de silcio, etc. Mochila(i,j) denotar o problema com os primeiros i itens e uma mochila de tamanho j. Por simplicidade, nos concentraremos apenas em descobrir se uma soluo existe.
Entrada: um vetor S de tamanho n armazenando os tamanhos dos itens e o tamanho K da mochila. Sada: um vetor bidimensional P tal que
P(i,j).existe = true se existe uma soluo com os primeiros i elementos para uma mochila de tamanho j; P(i,j).pertence = true se o i-simo elemento pertence a soluo.
10
11
uma maneira inteligente de transformar recurso em iterao com o apoio de uma tabela!
12
13