Principais conceitos abordados na aula
- Conceitos de Programação Dinâmica (DP - Dynamic Programming):
- Conheço a técnica algorítmica de Programação Dinâmica e o tipo de problemas em que costuma ser aplicada
- Conheço as características de um problema para poder ser resolvido com DP: subestrutura óptima e subproblemas coincidentes
- Sei que DP pode ser aplicada "de trás para a frente" (bottom-up) ou directamente usando a forma recursiva (top-down) usando memoization para ir guardando os valores já calculados
- Problemas Classicos de Programação Dinâmica:
- Conheço o problema da longest increasing subsequence (LIS), a sua formulação com DP, como pode ser resolvido de forma naive em O(N^2) ou em O(n log n) usando pesquisa binária.
- Conheço problema da longest common subsequence (LCS), a sua formulação com DP, e como pode ser visto como um caso específico de edit distance
- Conheço o problema de 0-1 knapsack e a sua formulação com DP.
- Conheço o problema do troco de moedas (coin change) e a sua formulação com DP.
- Conheço o problema de matrix chain multiplication (MCM) e a sua formulação com DP.
Material de Estudo
Principais referências
- Conceitos de DP
- Problemas Clássicos de DP
[em construção - vou acrescentar aqui mais ligações]
Problemas de Iniciação/Reforço
Pedro Ribeiro - DCC/FCUP |
Último update: