com11087-aula 11 [modo de...
TRANSCRIPT
![Page 2: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/2.jpg)
Introdução
2016-I2
� Programação Dinâmica é uma forma poderosade resolver problemas combinatórios quepossuem elementos ordenados da esquerdapara direita (Strings)
� Após o entendimento se torna relativamentefácil
� Parece mágica até se ver muitos exemplos
![Page 3: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/3.jpg)
Coeficientes Binomiais
2016-I3
![Page 4: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/4.jpg)
Coeficientes Binomiais
2016-I4
![Page 5: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/5.jpg)
Programação Dinâmica
2016-I5
� Problemas combinatórios exigem que se ache amelhor solução possível respeitando asrestrições
� Backtracking busca todas as soluções possíveis eretorna a melhor. Ou seja, retorna a respostacorreta porém para problemas grandes éinviável
� Algoritmos Gulosos, tomam as melhoresdecisões naquele instante. Ou seja, é eficienteporém não apresenta corretude
![Page 6: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/6.jpg)
Programação Dinâmica
2016-I6
� Problemas combinatórios exigem que se ache amelhor solução possível respeitando asrestrições
� Backtracking busca todas as soluções possíveis eretorna a melhor. Ou seja, retorna a respostacorreta porém para problemas grandes éinviável
� Algoritmos Gulosos, tomam as melhoresdecisões naquele instante. Ou seja, é eficienteporém não apresenta corretude
![Page 7: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/7.jpg)
Programação Dinâmica
2016-I7
� Programação Dinâmica nos fornece então apossibilidade de projetar algoritmos que vãoexplorar todas as possibilidades (corretude) eevitam computação redundante (eficiência)
� Definem assim recursividadeA solução do problema original vai depender dasolução de problemas menores
� Lembra Backtracking, mas não é!
![Page 8: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/8.jpg)
Programação Dinâmica
2016-I8
� Um possível defeito da busca recursiva é acomputação redundante
� Solução: Armazenar informações sobre a busca
� Por que a Busca em Largura é finita?
� O Backtracking é ineficiente pois testa todas aspossibilidades não somente as inéditas.
![Page 9: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/9.jpg)
Programação Dinâmica
2016-I9
� Assim Programação Dinâmica é uma técnicapara acelerar algoritmos recursivos
� Dica: Perceber se o algoritmo recursivocomputa o mesmo subproblema repetidamente
� Se isso acontece pode se armazenar osresultados já calculados.
� Depois que construímos um algoritmo recursivocom corretude é que nos preocupamos emacelerar
![Page 10: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/10.jpg)
Outros Exemplos
2016-I10
� Fatorial
� Fibonacci
� Problema da Mochila (Binário)
� Casamento Inexato de padrões
� Maior Subsequência comum
� Maior Subsequência Monotônica
� Cadeia de Multiplicação de Caracteres
![Page 11: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/11.jpg)
Programação Dinâmica
2016-I11
� Observe que Programação Dinâmica é aplicávela problemas que possuem as seguintespropriedades:
- Problema pode ser dividido em problemasmenores e a combinação dessas soluções é asolução do problema original
- O espaço de subproblemas é pequeno e hárepetição.
� Melhor aplicada em algoritmos recursivos
![Page 12: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/12.jpg)
Programação Dinâmica
2016-I12
� Não confundir Programação Dinâmica comDividir para Conquistar
� Melhor usar Programação Dinâmica quando adistância entre os subproblemas e o problemaoriginal não for muito grande
� As estruturas adequadas para armazenar oresultado dos subproblemas é muito importante
![Page 13: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/13.jpg)
Programação Dinâmica
2016-I13
� VantagensEconomizam computação em problemas quepossuem superposição de subproblemas (Ganhoem desempenho).
� DesvantagensO número de soluções armazenadas na tabelapode crescer rapidamente caso o espaço desoluções não seja pequeno (Exigindo assim muitamemória).
![Page 14: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/14.jpg)
Mais Exemplos
2016-I14
� Soma de Subconjuntos
� Troco de Moedas
� Soma Máxima em uma Linha
![Page 15: COM11087-Aula 11 [Modo de Compatibilidade]jeiks.net/wp-content/uploads/2014/08/TEP_Slides-11.pdfProgramação Dinâmica 7 2016-I Programação Dinâmica nos fornece então a possibilidade](https://reader034.vdocuments.net/reader034/viewer/2022042314/5f0271d67e708231d4044bf9/html5/thumbnails/15.jpg)
Exercícios
2016-I15
• Is Bigger Smarter?
• Cutting Sticks
• Distinct Subsequences
• Weights and Measures
• Chopsticks