programação dinâmica (pronto)

5
Centro Universitário Barão de Mauá Programação dinâmica Matheus Felipe Piscioneri

Upload: matheus-piscioneri

Post on 24-Jul-2015

79 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação dinâmica (pronto)

Centro Universitário Barão de Mauá

Programação dinâmica

Matheus Felipe Piscioneri

Ribeirão Preto - SP

Page 2: Programação dinâmica (pronto)

Programação Dinâmica significa planejamento e refere-se à construção da tabela que armazena as soluções das subinstâncias.

É um método para a construção de algoritmos para a resolução de problemas computacionais, desenvolvendo algoritmos coerentes e válidos para solucionar problemas e implementá-los utilizando uma linguagem de programação, através da análise de uma sequência de problemas mais simples do que o problema original. Muitos algoritmos eficientes seguem o paradigma. A resolução do problema original de N variáveis é caracterizada pela determinação de uma variável e pela resolução de um problema que possua uma variável a menos (N-1). A estratégia ótima para resolver um problema continua a ser ótima quando este é subproblema de um problema de maior dimensão e é aplicável a problemas nos quais a solução ótima pode ser computada a partir da solução ótima previamente calculada e memorizada. Este por sua vez é resolvido pela determinação de uma variável e pela resolução de um problema de N-2 variáveis e assim por diante.

A característica distintiva da programação dinâmica é a tabela que armazena as soluções das várias subinstâncias.  Como em um algoritmo recursivo, cada instância do problema é resolvida a partir da solução de instâncias menores e o consumo de tempo do algoritmo é em geral proporcional ao tamanho da tabela.

O problema é dividido em diferentes níveis naturais e em cada uma delas estabelece-se um plano de decisões. Cada etapa terá associado um determinado número de estados (finito ou infinito, discreto ou contínuo dependendo da natureza do problema), em geral os estados são as várias condições possíveis nos quais o sistema se pode apresentar numa dada etapa. Segundo um determinado plano o seu efeito em cada etapa é transformar o estado corrente num outro estado associado à etapa seguinte, essa transformação pode eventualmente obedecer a uma distribuição de probabilidade, contudo os casos apresentados são de caráter determinístico e não probabilístico. Todo o problema resolúvel por Programação Dinâmica tem de obedecer a este princípio, isto é, as suas características têm de ser tais que o conhecimento do estado corrente do sistema contenha toda a informação à cerca do seu prévio comportamento, necessária à determinação do plano ótimo a partir dele. O processo de resolução começa por determinar o plano ótimo para cada estado da última etapa até encontrar o plano ótimo para a etapa inicial, esta é a única maneira correta de proceder

Page 3: Programação dinâmica (pronto)

relativamente a problemas cujas etapas correspondem a períodos de tempo.

O que um problema de otimização deve ter para que a programação dinâmica seja aplicável são duas principais características: subestrutura ótima e superposição de subproblemas. Um problema apresenta uma subestrutura ótima quando uma solução ótima para o problema contém em seu interior soluções ótimas para subproblemas. A superposição de subproblemas acontece quando um algoritmo recursivo reexamina o mesmo problema muitas vezes.

Exemplos

Como exemplo simples de programação dinâmica, com alguma frequência, alguns textos, utilizam a determinação da Sequência de Fibonacci, quando implementada de forma recursiva.

Isso porque quando a forma recursiva é implementada sem maiores cuidados, sem memorização, o seu cálculo de tempo cresce exponencialmente. Observe que a rigor esse caso não é um problema de programação dinâmica, visto que o cálculo do n-ésimo número de Fibonacci cresce linearmente e não exponencialmente.

Porém este exemplo ainda assim é utilizado, pois a simplicidade é grande.

Se n <= 1 então F(n) := 1 caso contrário F(n) := F(n-1) + F(n-2)