Prog Din08

download Prog Din08

of 12

  • date post

    03-Jul-2015
  • Category

    Documents

  • view

    841
  • download

    1

Embed Size (px)

description

Apresentação de Prog. Dinâmica para Clube de Programação

Transcript of Prog Din08

  • 1. Wikipedia.orgProgramao dinmica um mtodo para a construo de algoritmos para a resoluo de problemas computacionais, em especial os de optimizao combinatria. Ela aplicvel a problemas no qual a soluo ptima pode ser computada a partir da soluo ptima previamente calculada e memorizada - de forma a evitar recalculo - de outros sub problemas que, sobrepostos, compem o problema original.Exemplo (Fibonacci):var m := map(0 1 1 1) : 1, function fib(n) if map m does not contain key n m[n] := fib(n 1) + fib(n 2) return m[n] Programao Dinmica

2. Soluo Sem Programao Dinmica:function fib(n) if n = 0 or n = 1return 1 elsereturn fib(n 1) + fib(n 2)fib(5) fib(4) + fib(3) (fib(3) + fib(2)) + (fib(2) + fib(1)) ((fib(2) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1)) (((fib(1) + fib(0)) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1)) Ou seja, existem inmeras repeties nos clculos necessrios para determinar o resultado final pretendido.Programao Dinmica 3. No entanto se usarmos o algoritmo anteriormente referido verificamos que no necessitamos de calcular diversas vezes as mesmas parcelas, basta construir a matriz e preench-la correctamente.var m := map(0 1, 1 1) function fib(n) if map m does not contain key n m[n] := fib(n 1) + fib(n 2) return m[n] []Fib(0)b( ) Fib(1) b( ) Fib(2)b( ) Fib(3) b( )Fib(4) b( ) Fib(5)b( ) 11 1+1=2 1+2=3 2+3=5 3+5=8 Programao Dinmica 4. Clculo de combinaes sem repetio (coeficiente binomial):n 1n 1C =C+ Crnrr 1r 1--- - n 11-- - 1 1+1 = 2 1- - 1 1+2 = 3 2+1 = 31 - 1 1+3 = 4 3+3 = 63+1 = 4 1 Programao Dinmica 5. //binomial.cby: Steven Skienalong binomial_coefficient(n,m) int n,m; { int i,j; long bc[MAXN][MAXN];for (i=0; i