SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
Wikipedia.org

Programação dinâmica é um método para a construção de algoritmos
para a resolução de problemas computacionais, em especial os de
optimização combinatória. Ela é aplicável a problemas no qual a solução
óptima pode ser computada a partir da solução óptima previamente
calculada e memorizada - de forma a evitar recalculo - de outros sub
problemas que, sobrepostos, compõem 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]




Programação Dinâmica
Solução Sem Programação Dinâmica:

function fib(n)
        if n = 0 or n = 1
                 return 1
        else
                 return 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 inúmeras repetições nos cálculos necessários para
determinar o resultado final pretendido.



Programação Dinâmica
No entanto se usarmos o algoritmo anteriormente referido verificamos
que não 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( )
            1        1     1+1=2 1+2=3 2+3=5 3+5=8




Programação Dinâmica
Cálculo de combinações sem repetição (coeficiente binomial):

                                n −1      n −1
                   C =C              + Cr
                       n
         r                      r −1
                       r

             1        -          -          -         -
    n

             1        1          -          -         -

             1     1+1 = 2       1          -         -

             1     1+2 = 3   2+1 = 3        1         -

             1     1+3 = 4   3+3 = 6    3+1 = 4       1




Programação Dinâmica
//      binomial.c        by: Steven Skiena

long binomial_coefficient(n,m) int n,m;
{
        int i,j;
        long bc[MAXN][MAXN];

        for (i=0; i<=n; i++) bc[i][0] = 1;
        f (j=0; j
        for (j 0 j<=n; jj++) b [j][j] = 1
                           ) bc[j][j] 1;

        for (i=1; i<=n; i++)
                 for (j 1; j<i; j++)
                     (j=1;
                          bc[i][j] = bc[i-1][j-1] + bc[i-1][j];

        return( bc[n][m] );
}




Programação Dinâmica
A programação dinâmica não serve apenas para satisfazer a
necessidade de termos diversas formas de resolver um problema. Trata-
se também de um método “muito” eficiente, ao nível da complexidade,
no entanto é preciso ter em atenção que ele acarreta um custo maior a
nível do uso de memória.

Este método é assim muito útil para a resolução de problemas de
optimização como o do caminho mais curto, Spanning trees mínimas,
etc. N entanto nem sempre é evidente reconhecermos quando e como
     No                       id          h            d
podemos usar programação dinâmica.

Um dos truques é tentar verificar se existe um algoritmo recursivo para
                                                         recursivo,
a resolução do problema pretendido, que calcula diversas vezes os
mesmos sub problemas. A partir do momento que conseguimos
encontrar esse algoritmo temos a certeza de que o problema pode
alternativamente ser resolvido recorrendo à programação dinâmica.




Programação Dinâmica
A partir daqui só nos resta saber como implementar um algoritmo de
programação dinâmica. Como em tudo esta etapa requer
essencialmente treino e experiência no uso deste tipo de programação.
Inicialmente existem algumas dificuldades e tudo parece que acontece
por magia mas com o tempo rapidamente conseguimos chegar a
solução quase que intuitivas.

Enquanto isso não vai acontecendo aqui fica uma breve metodologia
para encontrar tais algoritmos mais f il
                 il      i       i facilmente:

       1- Caracterizar a estrutura de uma solução óptima.
       2-
       2 Definir recursivamente o valor de uma solução óptima.
                                                        óptima
       3- Calcular o valor de uma solução óptima ascendentemente
                                                       (Bottom-up).
       4 Tentar construir a solução recorrendo à informação obtida
       4-                                                    obtida.




Programação Dinâmica
Exemplo: Assembly-Line-Scheduling (Linha de Montagem)




Programação Dinâmica
Etapa 1: Estrutura do melhor caminho.




Programação Dinâmica
Etapa 2: Solução Recursiva




                                           f* = min(f1[n]+x1; f2[n]+x2)

                                                         Se j = 1 temos:
                                                         f1[1] = e1 + a1,1
                                                         f2[1] = e2 + a2,1

                                                       E se j > 1 temos:
                             f1[j] = min(f1[j-1]+a1,j; f2[j-1]+t2,j-1+a1,j)
                             f2[j] = min(f2[j-1]+a2,j; f1[j-1]+t1,j-1+a2,j)




Programação Dinâmica
Etapa 3: Cálculo do tempo optimal

f1[j] = min (f1[j-1] + a1,j, f2[j-1] + t2,j-1 + a1,j) for j > 1;
f2[j] = min (f2[j-1] + a2,j, f1[j-1] + t1,j-1 + a2,j) for j > 1;
f1[1] = e1 + a1,1;
f2[1] = e2 + a2,1.

function schedule(a[], t[], e[], x[], n)
1.
1 f1[1] ← e1 + a1,1;
             1    11
2. f2[1] ← e2 + a2,1;
3. for j ← 2 to n do
4.
4        f1[j] ← min (f1[j 1] + a1 j f2[j 1] + t2 j 1 + a1 j);
                     (f1[j-1] a1,j, f2[j-1] t2,j-1 a1,j);
5.       f2[j] ← min (f2[j-1] + a2,j, f1[j-1] + t1,j-1 + a2,j);
6. /* end for */
7 return( min( f1[n] + x1, f2[n] + x2 ));
                        x1
7.




Programação Dinâmica
Etapa 4: Construção do Caminho Óptimo

1.   i ← l*;
2.   print « linha » i « , posto » n;
3.   for j ← n to 2 do
4.         i ← mli[j];
5.         print « linha » i « , posto » j-1;
6.   /* end for */

Resultado:
linha 1, posto    6
linha 2 posto
      2,          5
linha 2, posto    4
linha 1, posto    3
linha 2 posto     2
      2,
linha 1, posto    1




Programação Dinâmica

Weitere ähnliche Inhalte

Was ist angesagt?

Hl lista segundo grau 23
Hl lista segundo grau 23Hl lista segundo grau 23
Hl lista segundo grau 23celiomelosouza
 
Logaritmo e função logaritmica (exercícios resolvidos sobre logaritmos, logar...
Logaritmo e função logaritmica (exercícios resolvidos sobre logaritmos, logar...Logaritmo e função logaritmica (exercícios resolvidos sobre logaritmos, logar...
Logaritmo e função logaritmica (exercícios resolvidos sobre logaritmos, logar...wilkerfilipel
 
Aula n cplxos e polin
Aula n cplxos e polinAula n cplxos e polin
Aula n cplxos e polinmateus mota
 
Números Complexos_IME ITA
Números Complexos_IME ITANúmeros Complexos_IME ITA
Números Complexos_IME ITAJARDEL LEITE
 
(63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas
(63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas (63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas
(63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas wilkerfilipel
 
Prova de matemática 9 ano prof thiago versao 1 8 copias
Prova de matemática 9 ano  prof thiago versao 1   8 copiasProva de matemática 9 ano  prof thiago versao 1   8 copias
Prova de matemática 9 ano prof thiago versao 1 8 copiasabbeg
 
Ficha 10 equações
Ficha 10 equaçõesFicha 10 equações
Ficha 10 equaçõesPaula Mano
 
Exercícios Resolvidos: Máximo e minimo absoluto
Exercícios Resolvidos: Máximo e minimo absolutoExercícios Resolvidos: Máximo e minimo absoluto
Exercícios Resolvidos: Máximo e minimo absolutoDiego Oliveira
 
Números Complexos Resumo
Números Complexos ResumoNúmeros Complexos Resumo
Números Complexos ResumoMarcelo Farinha
 
Exercícios Resolvidos: Equação da reta tangente
Exercícios Resolvidos: Equação da reta tangenteExercícios Resolvidos: Equação da reta tangente
Exercícios Resolvidos: Equação da reta tangenteDiego Oliveira
 
Exercícios resolvidos: Parte real e imaginária de números complexos
Exercícios resolvidos: Parte real e imaginária de números complexosExercícios resolvidos: Parte real e imaginária de números complexos
Exercícios resolvidos: Parte real e imaginária de números complexosDiego Oliveira
 
Matematica exercicios numeros_complexos_gabarito
Matematica exercicios numeros_complexos_gabaritoMatematica exercicios numeros_complexos_gabarito
Matematica exercicios numeros_complexos_gabaritoAlberto Senra
 
Lista de exerc_inequações_1_ano_2012_pdf
Lista de exerc_inequações_1_ano_2012_pdfLista de exerc_inequações_1_ano_2012_pdf
Lista de exerc_inequações_1_ano_2012_pdfcristianomatematico
 
Prova do 8º ano do auzanir
Prova do 8º ano do auzanirProva do 8º ano do auzanir
Prova do 8º ano do auzaniralunosderoberto
 

Was ist angesagt? (20)

Funcao exponencial
Funcao exponencialFuncao exponencial
Funcao exponencial
 
Hl lista segundo grau 23
Hl lista segundo grau 23Hl lista segundo grau 23
Hl lista segundo grau 23
 
Logaritmo e função logaritmica (exercícios resolvidos sobre logaritmos, logar...
Logaritmo e função logaritmica (exercícios resolvidos sobre logaritmos, logar...Logaritmo e função logaritmica (exercícios resolvidos sobre logaritmos, logar...
Logaritmo e função logaritmica (exercícios resolvidos sobre logaritmos, logar...
 
1ve+pré c..
1ve+pré c..1ve+pré c..
1ve+pré c..
 
Aula n cplxos e polin
Aula n cplxos e polinAula n cplxos e polin
Aula n cplxos e polin
 
Números Complexos_IME ITA
Números Complexos_IME ITANúmeros Complexos_IME ITA
Números Complexos_IME ITA
 
(63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas
(63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas (63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas
(63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas
 
Prova de matemática 9 ano prof thiago versao 1 8 copias
Prova de matemática 9 ano  prof thiago versao 1   8 copiasProva de matemática 9 ano  prof thiago versao 1   8 copias
Prova de matemática 9 ano prof thiago versao 1 8 copias
 
Lista 3 expressões algébricas
Lista 3   expressões algébricasLista 3   expressões algébricas
Lista 3 expressões algébricas
 
Ficha 10 equações
Ficha 10 equaçõesFicha 10 equações
Ficha 10 equações
 
Função logarítmica
Função logarítmicaFunção logarítmica
Função logarítmica
 
Exercícios Resolvidos: Máximo e minimo absoluto
Exercícios Resolvidos: Máximo e minimo absolutoExercícios Resolvidos: Máximo e minimo absoluto
Exercícios Resolvidos: Máximo e minimo absoluto
 
Números Complexos Resumo
Números Complexos ResumoNúmeros Complexos Resumo
Números Complexos Resumo
 
Inequação exponencial
Inequação exponencialInequação exponencial
Inequação exponencial
 
Exercícios Resolvidos: Equação da reta tangente
Exercícios Resolvidos: Equação da reta tangenteExercícios Resolvidos: Equação da reta tangente
Exercícios Resolvidos: Equação da reta tangente
 
Exercícios resolvidos: Parte real e imaginária de números complexos
Exercícios resolvidos: Parte real e imaginária de números complexosExercícios resolvidos: Parte real e imaginária de números complexos
Exercícios resolvidos: Parte real e imaginária de números complexos
 
79 logaritimos (1)
79 logaritimos (1)79 logaritimos (1)
79 logaritimos (1)
 
Matematica exercicios numeros_complexos_gabarito
Matematica exercicios numeros_complexos_gabaritoMatematica exercicios numeros_complexos_gabarito
Matematica exercicios numeros_complexos_gabarito
 
Lista de exerc_inequações_1_ano_2012_pdf
Lista de exerc_inequações_1_ano_2012_pdfLista de exerc_inequações_1_ano_2012_pdf
Lista de exerc_inequações_1_ano_2012_pdf
 
Prova do 8º ano do auzanir
Prova do 8º ano do auzanirProva do 8º ano do auzanir
Prova do 8º ano do auzanir
 

Ähnlich wie Prog Din08

Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maplejeandson correa
 
Artigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfArtigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfItaloRainier1
 
Derivação com logaritmo
Derivação com logaritmoDerivação com logaritmo
Derivação com logaritmoDiego Oliveira
 
Capitulo 1scilab
Capitulo 1scilabCapitulo 1scilab
Capitulo 1scilabwjunior
 
PARTE 2 - Progressao Aritmetica
PARTE 2 - Progressao AritmeticaPARTE 2 - Progressao Aritmetica
PARTE 2 - Progressao AritmeticaEstatisticas Ciepe
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em CCaique Silva
 
Resolucao dos exercicios_integrais
Resolucao dos exercicios_integraisResolucao dos exercicios_integrais
Resolucao dos exercicios_integraisWilson Kushima
 
Raciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas MatemáticosRaciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas MatemáticosAndré Constantino da Silva
 
Apostila de matemática aplicada vol i 2004
Apostila de matemática aplicada vol i 2004Apostila de matemática aplicada vol i 2004
Apostila de matemática aplicada vol i 2004Lúcio Costa
 
Equações e enequações modulares.
Equações e  enequações modulares.Equações e  enequações modulares.
Equações e enequações modulares.Noely Menezes
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivasRicardo Bolanho
 
Introdução ao MATLAB
Introdução ao MATLABIntrodução ao MATLAB
Introdução ao MATLABCaioTelefonica
 
Análise de Algoritmos - Programação Dinâmica
Análise de Algoritmos - Programação DinâmicaAnálise de Algoritmos - Programação Dinâmica
Análise de Algoritmos - Programação DinâmicaDelacyr Ferreira
 
Livro texto - unidade ii
Livro  texto - unidade iiLivro  texto - unidade ii
Livro texto - unidade iiWelison Lopes
 

Ähnlich wie Prog Din08 (20)

Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maple
 
Artigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfArtigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdf
 
Aula 1 a 15 vol1
Aula 1 a 15 vol1Aula 1 a 15 vol1
Aula 1 a 15 vol1
 
Derivação com logaritmo
Derivação com logaritmoDerivação com logaritmo
Derivação com logaritmo
 
Capitulo 1scilab
Capitulo 1scilabCapitulo 1scilab
Capitulo 1scilab
 
PARTE 2 - Progressao Aritmetica
PARTE 2 - Progressao AritmeticaPARTE 2 - Progressao Aritmetica
PARTE 2 - Progressao Aritmetica
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em C
 
Resolucao dos exercicios_integrais
Resolucao dos exercicios_integraisResolucao dos exercicios_integrais
Resolucao dos exercicios_integrais
 
Resolucao dos exercicios_integrais
Resolucao dos exercicios_integraisResolucao dos exercicios_integrais
Resolucao dos exercicios_integrais
 
Raciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas MatemáticosRaciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
 
Matematica aplicada-apostila
Matematica aplicada-apostilaMatematica aplicada-apostila
Matematica aplicada-apostila
 
Apostila de matemática aplicada vol i 2004
Apostila de matemática aplicada vol i 2004Apostila de matemática aplicada vol i 2004
Apostila de matemática aplicada vol i 2004
 
Equações e enequações modulares.
Equações e  enequações modulares.Equações e  enequações modulares.
Equações e enequações modulares.
 
aula-3_integrais-indefinidas.pdf
aula-3_integrais-indefinidas.pdfaula-3_integrais-indefinidas.pdf
aula-3_integrais-indefinidas.pdf
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivas
 
Aula N02
Aula N02Aula N02
Aula N02
 
Introdução ao MATLAB
Introdução ao MATLABIntrodução ao MATLAB
Introdução ao MATLAB
 
Análise de Algoritmos - Programação Dinâmica
Análise de Algoritmos - Programação DinâmicaAnálise de Algoritmos - Programação Dinâmica
Análise de Algoritmos - Programação Dinâmica
 
Livro texto - unidade ii
Livro  texto - unidade iiLivro  texto - unidade ii
Livro texto - unidade ii
 
03 inducao i
03 inducao i03 inducao i
03 inducao i
 

Mehr von Joel Carvalho

Arquitectura de Computadores 4 (EFA, 9º ano)
Arquitectura de Computadores 4 (EFA, 9º ano)Arquitectura de Computadores 4 (EFA, 9º ano)
Arquitectura de Computadores 4 (EFA, 9º ano)Joel Carvalho
 
Arquitectura de Computadores 1 (EFA, 9º ano)
Arquitectura de Computadores 1 (EFA, 9º ano)Arquitectura de Computadores 1 (EFA, 9º ano)
Arquitectura de Computadores 1 (EFA, 9º ano)Joel Carvalho
 
Arquitectura de Computadores 3 (EFA, 9º ano)
Arquitectura de Computadores 3 (EFA, 9º ano)Arquitectura de Computadores 3 (EFA, 9º ano)
Arquitectura de Computadores 3 (EFA, 9º ano)Joel Carvalho
 
Arquitectura de Computadores 2 (EFA, 9º ano)
Arquitectura de Computadores 2 (EFA, 9º ano)Arquitectura de Computadores 2 (EFA, 9º ano)
Arquitectura de Computadores 2 (EFA, 9º ano)Joel Carvalho
 
Relatório de Projecto de Licenciatura
Relatório de Projecto de LicenciaturaRelatório de Projecto de Licenciatura
Relatório de Projecto de LicenciaturaJoel Carvalho
 
Dissertação Mestrado
Dissertação MestradoDissertação Mestrado
Dissertação MestradoJoel Carvalho
 
Verificação de Sistemas de Tempo Real
Verificação de Sistemas de Tempo RealVerificação de Sistemas de Tempo Real
Verificação de Sistemas de Tempo RealJoel Carvalho
 
Verificação Automatizada de STR com UPPAAL
Verificação Automatizada de STR com UPPAALVerificação Automatizada de STR com UPPAAL
Verificação Automatizada de STR com UPPAALJoel Carvalho
 
Apoio ao Projecto DSAS (CET, 12º)
Apoio ao Projecto DSAS (CET, 12º)Apoio ao Projecto DSAS (CET, 12º)
Apoio ao Projecto DSAS (CET, 12º)Joel Carvalho
 
Apresentação Dissertação Mestrado
Apresentação Dissertação MestradoApresentação Dissertação Mestrado
Apresentação Dissertação MestradoJoel Carvalho
 
Arquitectura de Computadores 4 (EFA, 9º ano)
Arquitectura de Computadores 4 (EFA, 9º ano)Arquitectura de Computadores 4 (EFA, 9º ano)
Arquitectura de Computadores 4 (EFA, 9º ano)Joel Carvalho
 
Arquitectura de Computadores 3 (EFA, 9º ano)
Arquitectura de Computadores 3 (EFA, 9º ano)Arquitectura de Computadores 3 (EFA, 9º ano)
Arquitectura de Computadores 3 (EFA, 9º ano)Joel Carvalho
 
Arquitectura de Computadores 2 (EFA, 9º ano)
Arquitectura de Computadores 2 (EFA, 9º ano)Arquitectura de Computadores 2 (EFA, 9º ano)
Arquitectura de Computadores 2 (EFA, 9º ano)Joel Carvalho
 
Arquitectura de Computadores 1 (EFA, 9º ano)
Arquitectura de Computadores 1 (EFA, 9º ano)Arquitectura de Computadores 1 (EFA, 9º ano)
Arquitectura de Computadores 1 (EFA, 9º ano)Joel Carvalho
 
Minimização Autômatos
Minimização AutômatosMinimização Autômatos
Minimização AutômatosJoel Carvalho
 
Car Free Apresentacao
Car Free ApresentacaoCar Free Apresentacao
Car Free ApresentacaoJoel Carvalho
 

Mehr von Joel Carvalho (20)

Arquitectura de Computadores 4 (EFA, 9º ano)
Arquitectura de Computadores 4 (EFA, 9º ano)Arquitectura de Computadores 4 (EFA, 9º ano)
Arquitectura de Computadores 4 (EFA, 9º ano)
 
Arquitectura de Computadores 1 (EFA, 9º ano)
Arquitectura de Computadores 1 (EFA, 9º ano)Arquitectura de Computadores 1 (EFA, 9º ano)
Arquitectura de Computadores 1 (EFA, 9º ano)
 
Arquitectura de Computadores 3 (EFA, 9º ano)
Arquitectura de Computadores 3 (EFA, 9º ano)Arquitectura de Computadores 3 (EFA, 9º ano)
Arquitectura de Computadores 3 (EFA, 9º ano)
 
Arquitectura de Computadores 2 (EFA, 9º ano)
Arquitectura de Computadores 2 (EFA, 9º ano)Arquitectura de Computadores 2 (EFA, 9º ano)
Arquitectura de Computadores 2 (EFA, 9º ano)
 
Relatório de Projecto de Licenciatura
Relatório de Projecto de LicenciaturaRelatório de Projecto de Licenciatura
Relatório de Projecto de Licenciatura
 
Dissertação Mestrado
Dissertação MestradoDissertação Mestrado
Dissertação Mestrado
 
Tutorial de Uppaal
Tutorial de UppaalTutorial de Uppaal
Tutorial de Uppaal
 
Verificação de Sistemas de Tempo Real
Verificação de Sistemas de Tempo RealVerificação de Sistemas de Tempo Real
Verificação de Sistemas de Tempo Real
 
Verificação Automatizada de STR com UPPAAL
Verificação Automatizada de STR com UPPAALVerificação Automatizada de STR com UPPAAL
Verificação Automatizada de STR com UPPAAL
 
Apoio ao Projecto DSAS (CET, 12º)
Apoio ao Projecto DSAS (CET, 12º)Apoio ao Projecto DSAS (CET, 12º)
Apoio ao Projecto DSAS (CET, 12º)
 
Apresentação Dissertação Mestrado
Apresentação Dissertação MestradoApresentação Dissertação Mestrado
Apresentação Dissertação Mestrado
 
Arquitectura de Computadores 4 (EFA, 9º ano)
Arquitectura de Computadores 4 (EFA, 9º ano)Arquitectura de Computadores 4 (EFA, 9º ano)
Arquitectura de Computadores 4 (EFA, 9º ano)
 
Arquitectura de Computadores 3 (EFA, 9º ano)
Arquitectura de Computadores 3 (EFA, 9º ano)Arquitectura de Computadores 3 (EFA, 9º ano)
Arquitectura de Computadores 3 (EFA, 9º ano)
 
Arquitectura de Computadores 2 (EFA, 9º ano)
Arquitectura de Computadores 2 (EFA, 9º ano)Arquitectura de Computadores 2 (EFA, 9º ano)
Arquitectura de Computadores 2 (EFA, 9º ano)
 
Arquitectura de Computadores 1 (EFA, 9º ano)
Arquitectura de Computadores 1 (EFA, 9º ano)Arquitectura de Computadores 1 (EFA, 9º ano)
Arquitectura de Computadores 1 (EFA, 9º ano)
 
Minimização Autômatos
Minimização AutômatosMinimização Autômatos
Minimização Autômatos
 
carFree2
carFree2carFree2
carFree2
 
Car Free Apresentacao
Car Free ApresentacaoCar Free Apresentacao
Car Free Apresentacao
 
Sensor Networks
Sensor NetworksSensor Networks
Sensor Networks
 
Spec#
Spec#Spec#
Spec#
 

Prog Din08

  • 1. Wikipedia.org Programação dinâmica é um método para a construção de algoritmos para a resolução de problemas computacionais, em especial os de optimização combinatória. Ela é aplicável a problemas no qual a solução óptima pode ser computada a partir da solução óptima previamente calculada e memorizada - de forma a evitar recalculo - de outros sub problemas que, sobrepostos, compõem 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] Programação Dinâmica
  • 2. Solução Sem Programação Dinâmica: function fib(n) if n = 0 or n = 1 return 1 else return 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 inúmeras repetições nos cálculos necessários para determinar o resultado final pretendido. Programação Dinâmica
  • 3. No entanto se usarmos o algoritmo anteriormente referido verificamos que não 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( ) 1 1 1+1=2 1+2=3 2+3=5 3+5=8 Programação Dinâmica
  • 4. Cálculo de combinações sem repetição (coeficiente binomial): n −1 n −1 C =C + Cr n r r −1 r 1 - - - - n 1 1 - - - 1 1+1 = 2 1 - - 1 1+2 = 3 2+1 = 3 1 - 1 1+3 = 4 3+3 = 6 3+1 = 4 1 Programação Dinâmica
  • 5. // binomial.c by: Steven Skiena long binomial_coefficient(n,m) int n,m; { int i,j; long bc[MAXN][MAXN]; for (i=0; i<=n; i++) bc[i][0] = 1; f (j=0; j for (j 0 j<=n; jj++) b [j][j] = 1 ) bc[j][j] 1; for (i=1; i<=n; i++) for (j 1; j<i; j++) (j=1; bc[i][j] = bc[i-1][j-1] + bc[i-1][j]; return( bc[n][m] ); } Programação Dinâmica
  • 6. A programação dinâmica não serve apenas para satisfazer a necessidade de termos diversas formas de resolver um problema. Trata- se também de um método “muito” eficiente, ao nível da complexidade, no entanto é preciso ter em atenção que ele acarreta um custo maior a nível do uso de memória. Este método é assim muito útil para a resolução de problemas de optimização como o do caminho mais curto, Spanning trees mínimas, etc. N entanto nem sempre é evidente reconhecermos quando e como No id h d podemos usar programação dinâmica. Um dos truques é tentar verificar se existe um algoritmo recursivo para recursivo, a resolução do problema pretendido, que calcula diversas vezes os mesmos sub problemas. A partir do momento que conseguimos encontrar esse algoritmo temos a certeza de que o problema pode alternativamente ser resolvido recorrendo à programação dinâmica. Programação Dinâmica
  • 7. A partir daqui só nos resta saber como implementar um algoritmo de programação dinâmica. Como em tudo esta etapa requer essencialmente treino e experiência no uso deste tipo de programação. Inicialmente existem algumas dificuldades e tudo parece que acontece por magia mas com o tempo rapidamente conseguimos chegar a solução quase que intuitivas. Enquanto isso não vai acontecendo aqui fica uma breve metodologia para encontrar tais algoritmos mais f il il i i facilmente: 1- Caracterizar a estrutura de uma solução óptima. 2- 2 Definir recursivamente o valor de uma solução óptima. óptima 3- Calcular o valor de uma solução óptima ascendentemente (Bottom-up). 4 Tentar construir a solução recorrendo à informação obtida 4- obtida. Programação Dinâmica
  • 8. Exemplo: Assembly-Line-Scheduling (Linha de Montagem) Programação Dinâmica
  • 9. Etapa 1: Estrutura do melhor caminho. Programação Dinâmica
  • 10. Etapa 2: Solução Recursiva f* = min(f1[n]+x1; f2[n]+x2) Se j = 1 temos: f1[1] = e1 + a1,1 f2[1] = e2 + a2,1 E se j > 1 temos: f1[j] = min(f1[j-1]+a1,j; f2[j-1]+t2,j-1+a1,j) f2[j] = min(f2[j-1]+a2,j; f1[j-1]+t1,j-1+a2,j) Programação Dinâmica
  • 11. Etapa 3: Cálculo do tempo optimal f1[j] = min (f1[j-1] + a1,j, f2[j-1] + t2,j-1 + a1,j) for j > 1; f2[j] = min (f2[j-1] + a2,j, f1[j-1] + t1,j-1 + a2,j) for j > 1; f1[1] = e1 + a1,1; f2[1] = e2 + a2,1. function schedule(a[], t[], e[], x[], n) 1. 1 f1[1] ← e1 + a1,1; 1 11 2. f2[1] ← e2 + a2,1; 3. for j ← 2 to n do 4. 4 f1[j] ← min (f1[j 1] + a1 j f2[j 1] + t2 j 1 + a1 j); (f1[j-1] a1,j, f2[j-1] t2,j-1 a1,j); 5. f2[j] ← min (f2[j-1] + a2,j, f1[j-1] + t1,j-1 + a2,j); 6. /* end for */ 7 return( min( f1[n] + x1, f2[n] + x2 )); x1 7. Programação Dinâmica
  • 12. Etapa 4: Construção do Caminho Óptimo 1. i ← l*; 2. print « linha » i « , posto » n; 3. for j ← n to 2 do 4. i ← mli[j]; 5. print « linha » i « , posto » j-1; 6. /* end for */ Resultado: linha 1, posto 6 linha 2 posto 2, 5 linha 2, posto 4 linha 1, posto 3 linha 2 posto 2 2, linha 1, posto 1 Programação Dinâmica