Programação Dinâmica. Prof. Anderson Almeida Ferreira

Documentos relacionados
Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares

PROGRAMAÇÃO DINÂMICA

Desafios de Programação

Algoritmos para Automação e Sistemas. Programação Dinâmica. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

Teoria dos Grafos Aula 22

Referências e materiais complementares desse tópico

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5)

Teoria dos Grafos Aula 24

Teoria dos Grafos Aula 17

Caminhos mínimos de todos os pares

Complexidade de Algoritmos. Edson Prestes

Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica. Gabriel Rosa Guilherme Alves

n Programação Dinâmica n Exemplo: Sequência de Fibonnaci n Problemas de Otimização n Multiplicação de Matrizes n Principios de Programação Dinâmica

Teoria dos Grafos Aula 23

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (DPV 5; CLRS 4)

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante

Algoritmos Combinatórios: Introdução

Projeto e Análise de Algoritmos

Abordagens para Resolução de Problemas

Análise de Complexidade para algoritmos iterativos e recursivos

AVALIAÇÃO DE CONHECIMENTO ESPECÍFICO

Complexidade de Algoritmos

AULA 15. Algoritmos p.600/637

Grafos COM11087-Tópicos Especiais em Programação II

Análise e Complexidade de Algoritmos

CAL ( ) - MIEIC/FEUP Programação Dinâmica ( )

Teoria da Computação. Complexidade computacional classes de problemas

O grau de saída d + (v) de um vértice v é o número de arcos que tem

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Programação dinâmica

Projeto e Análise de Algoritmos

Problemas de otimização

Análise e Complexidade de Algoritmos

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

Árvore Binária de Busca Ótima

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista.

Algoritmos e Estruturas de Dados I Linguagem C

Otimização em Grafos

ANÁLISE DE ALGORITMOS

Teoria dos Grafos Aula 8

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de todos os pares

4 Casamento de Padrões

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Otimização Combinatória - Parte 4

Solução de Recorrências

Subsequência comum mais longa Em inglês, Longest Common Subsequence (LCS)

Algoritmos Gulosos. Norton T. Roman

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

Recursividade, Tentativa e Erro

14 Projeto de Algoritmos: paradigmas SCC201/501 - Introdução à Ciência de Computação II

Problema do Caminho Mínimo

PCC173 - Otimização em Redes

PCC104 - Projeto e Análise de Algoritmos

CIC 110 Análise e Projeto de Algoritmos I

Teoria dos Grafos Aula 14

Técnicas de Desenho de Algoritmos

DINTER UFF/IFTM - Análise e Síntese de Algoritmos - Lista de Exercícios

Paradigmas de Projeto de Algoritmos

Projeto e Análise de Algoritmos Aula 1: Panorama (0.1,0.2)

5COP096 TeoriadaComputação

Programação Dinâmica. Prof. Marcio Delamaro ICMC/USP

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

GRAFOS Aula 08 Árvore Geradora Mínima: Algoritmos de Kruskal e Prim-Jarnik Max Pereira

Técnicas de análise de algoritmos

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica (continuação) Prof. Humberto Brandão

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão

Tópicos Avançados em Algoritmos - exercícios de Prog. Din. com correcção parcial

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE

Análise de algoritmos. Sílvia Mara da Costa Campos Victer

14 Projeto de Algoritmos: paradigmas SCC201/501 - Introdução à Ciência de Computação II

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Árvores: Conceitos Básicos e Árvore Geradora

Análise e Projeto de Algoritmos

Prova Substitutiva PMR3201 1o. semestre 2018 Prof. Thiago Martins

Ordenação Interna. Prof. Jonas Potros

Programação Dinâmica: Modelos Determinísticos

Programação dinâmica. CLRS cap 15. = recursão com tabela = transformação inteligente de recursão em iteração

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Programação Dinâmica (incompleto!!!!!)

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

Pesquisa Operacional

Algoritmo Aproximação. Prof. Anderson Almeida Ferreira [DPV]9.2 [ZIV]9.2.2 e 9.2.3

Divisão e conquista. Eficiência de divisão e conquista

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Paradigmas de Projetos de Algoritmos

Teoria dos Grafos. Aula 5 - Estruturas de Dados para Grafos. Profª. Alessandra Martins Coelho. março/2013

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Programação Dinâmica. Programa do PA. Técnicas Avançadas de Projeto. Aulas Anteriores. Introdução. Plano de Aula. Técnicas de Projeto de Algoritmos

Paradigmas de Programação

Paradigmas de Projeto de Algoritmos

Ciclos hamiltonianos e o problema do caixeiro viajante

Divisão e conquista. Há divisão quando o algoritmo tem pelo menos 2 chamadas recursivas no corpo

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

NOTAS DE AULA 1 METAHEURÍSTICA 13/10/2016

Análise de Algoritmos

Transcrição:

Programação Dinâmica Prof. Anderson Almeida Ferreira

Programação Dinâmica 1950, Bellman Evitar recálculos dos subproblemas em comum Menor para maior (bottom-up) Tabelas ou memorização É uma técnica de programação Foi desenvolvida na época em que programação significava método tabular. Usada para problemas de otimização Encontre a solução a com o valor ótimo. Minimizar ou maximizar

Programação Dinâmica Quatro passos do método Caracterize a estrutura de uma solução ótima. Recursivamente defina o valor de uma solução ótima. Compute o valor de uma solução ótima de maneira bottom-up. Construa a solução ótima por meio da informação computada.

Exemplo Linha de montagem

Exemplo Montadora de veículos com duas linhas de montagem Cada linha tem n estações: S 1,1,..., S 1,n and S 2,1,..., S 2,n. Estações correspondentes S 1,j e S 2,j possuem a mesma função, mas podem ter tempo de execução diferentes, a 1,j e a 2,j. Tempos de entrada: e 1 e e 2. Tempos de saída: x 1 e x 2. Para chegar a uma estação: Ficando na mesma linha nenhum custo Transferido de outra linha depois da estação S i,j é t i,j.

Exemplo Problema Que estações das linhas 1 e 2 devem ser escolhidas para ter uma fabricação mais rápida? Tentar todas as possibilidades? Cada candidato pode ser completamente especificado por quais estações da linha 1 são incluídas. Linha 1 tem n estações 2 n subconjuntos

Exemplo Estrutura de uma solução ótima Pense em uma maneira rápida da entrada até a estação S 1,j. Se j=1, fácil Se j>= 2, há duas opções De S 1,j-1 De S 2,j-1

Exemplo Observação chave: Nós devemos ter um caminho rápido da entrada até S i,j-1 nesta solução. Se uma maneira rápida de chegar é por meio de S 1,j-1, nós podemos usá-la para chegar a S 1,j. Se uma maneira rápida de chegar é por meio de S 2,j-1, nós podemos usá-la para chegar a S 1,j.

Exemplo Geralmente: Uma solução ótima para um problema (maneira rápida de chegar a S 1,j ) contém com ele uma solução ótima para os subproblemas (maneiras rápidas de chegar a S 1,j-1 ou S 2,j-1 ). Isto é uma subestrutura ótima.

Subestrutura ótima Use subestruturas ótimas para construir soluções ótimas para problemas, por meio de soluções ótimas de subproblemas. Maneira rápida de chegar a S i,j : S 1,j-1, então vá diretamente para S 1,j, ou S 2,j-1, transfira da linha 2 para a 1 e então vá para S 1,j

Solução Recursiva Seja f i [ j ] = o tempo mais rápido até a estação S i, j, i = 1, 2 and j = 1,..., n. Meta: f = min( f 1 [n] + x 1, f 2 [n] + x 2 ) f 1 [1] = e 1 + a 1,1 f 2 [1] = e 2 + a 2,1 For j = 2,..., n: f 1 [ j ] = min( f 1 [ j 1] + a 1, j, f 2 [ j 1] + t 2, j 1 + a 1, j ) f 2 [ j ] = min( f 2 [ j 1] + a 2, j, f 1 [ j 1] + t 1, j 1 + a 2, j )

f * dá o valor da solução ótima. E se quisermos construir a solução ótima? l i [ j ] = número da linha (1 ou 2) cuja estação j 1 é usada para chegar a S i, j. S li [ j ], j 1 precede S i, j. l = número da linha da estação n usada.

FASTEST-WAY(a, t, e, x, n) f1[1] e1 + a1,1 f2[1] e2 + a2,1 for j 2 to n do if f 1 [ j 1] + a 1, j f 2 [ j 1] + t 2, j 1 + a 1, j then f 1 [ j ] f 1 [ j 1] + a 1, j l 1 [ j ] 1 else f 1 [ j ] f 2 [ j 1] + t 2, j 1 + a 1, j l 1 [ j ] 2 if f 2 [ j 1] + a 2, j f 1 [ j 1] + t 1, j 1 + a 2, j then f 2 [ j ] f 2 [ j 1] + a 2, j l 2 [ j ] 2 else f 2 [ j ] f 1 [ j 1] + t 1, j 1 + a 2, j l 2 [ j ] 1 if f 1 [n] + x 1 f 2 [n] + x 2 then f = f 1 [n] + x 1 l* = 1 else f = f 2 [n] + x 2 l = 2

Construindo a solução ótima PRINT-STATIONS(l, n) i l print linha i, estação n for j n downto 2 do i l i [ j ] print linha i, estação j 1

Fibonacci: definindo recorrência Grafo de recorrência Subproblemas nós Dependência arestas BCC241/2011-2 16

Fibonacci: definindo recursão Grafo de recorrência Subproblemas nós Dependência arestas Memoização BCC241/2011-2 17

Fibonacci: definindo recursão Grafo de recorrência Subproblemas nós Dependência arestas Memoização BCC241/2011-2 18

Fibonacci: usando tabela Grafo de recorrência Subproblemas nós Dependência arestas Memoização BCC241/2011-2 19

Fibonacci: usando tabela Grafo de recorrência Subproblemas nós Dependência arestas Memoização Tabela Ordenação parcial BCC241/2011-2 20

Fibonacci: economizando espaço Grafo de recorrência Subproblemas nós Dependência arestas Memoização Tabela Ordenação parcial Economizando memória BCC241/2011-2 21

Problemas alvo para Programação Dinâmica (PD) Problema pode ser dividido em subproblemas menores. Sub-estrutura ótima (princípio da otimalidade) Solução ótima do problema inclui soluções ótimas dos subproblemas. Subproblemas são sobrepostos. Número pequeno de subproblemas distintos.

Linearização de Grafos Direcionados Acíclicos (DAGs) Algoritmo de Linearização: Percorrer vértices na ordem de grau de entrada. Diminuir das arestas a cada passo.

Recorrência a partir de DAGs

Algoritmo de menor caminho em DAGs Subproblemas Menores Subestrutura Ótima

Subsequência Crescente Mais Longa Problema: Dada uma sequência de números naturais, definir qual a subsequência crescente com mais elementos.

MSC: Recorrência e DAG implícito

SCML: Recorrência Etapa1: Maior caminho em DAG SCML max{ L( 1 j n j)}

Etapa 2: Algoritmo Recursivo

Etapa 3: Algoritmo Iterativo (Tabela) Vetor L, preenchido da menor posição para maior.

Etapa 3: Complexidade

Etapa 4: Construindo solução

Distância de Edição Transformar uma sequência em outra ao menor custo. Casamento, substituição, inserção, remoção. SITUADO ESTUDO- -SITUADO ES-TU-DO

Edição: Subproblemas Problema: Alinhar duas sequências de caracteres

Etapa 1: Equação de Recorrência Problema: Alinhar duas sequências de caracteres Subproblema: alinhamento de prefixos Composição: inserir, remover, casar

Distância de Edição - DAG

Etapa 2: Algoritmo Recursivo

Etapa 2: Algoritmo Recursivo

Etapa 3: Algoritmo Iterativo 39

Etapa 3: Complexidade Θ(mn) de tempo e espaço

Etapa 3: Como economizar espaço? Θ(mn) de tempo e Θ(m) espaço

Distância de Edição - Exemplo P O L I N O M I A L E X P O N E N C I A L

Etapa 4: Solução I armazenar

Etapa 4: Solução I calcular

Problema da mochila Ladrão está com uma mochila que suporta no máximo 10 quilos e quer o maior lucro possível

Problema da mochila Ladrão está com uma mochila que suporta no máximo 10 quilos e quer o maior lucro possível

Etapa 1: Equação de Recorrência K( w, j)

Etapa 1: Equação de Recorrência K( w, j)

w w j w j 1 j K w, j max K w, j 1, K w w, j 1 j v j

Etapa 2: Algoritmo Recursivo

Etapa 3: Algoritmo Iterativo

Etapa 3: Complexidade Pseudo-polinomial (NP-completo) Somente para valores inteiros Θ(Wn) BCC241/2011-2 52

Etapa 4: Solução

Considerações Finais Diferença entre PD e D&C Sobreposição de problemas Definição da Equação de Recorrência Grafo induzido Automatização dos passos Memoização