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



Documentos relacionados
Exercícios Teóricos Resolvidos

Aula 4 Estatística Conceitos básicos

Resolução de sistemas lineares

Faculdade de Computação

6. Programação Inteira

Solução de problemas por meio de busca (com Python) Luis Martí DEE/PUC-Rio

Cálculo Numérico Faculdade de Engenharia, Arquiteturas e Urbanismo FEAU

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Capítulo 5: Aplicações da Derivada

AV1 - MA (b) Se o comprador preferir efetuar o pagamento à vista, qual deverá ser o valor desse pagamento único? 1 1, , , 980

Pedro Ribeiro 2014/2015

N1Q1 Solução. a) Há várias formas de se cobrir o tabuleiro usando somente peças do tipo A; a figura mostra duas delas.

A Torre de Hanói e o Princípio da Indução Matemática

Estudaremos métodos numéricos para resolução de sistemas lineares com n equações e n incógnitas. Estes podem ser:

Material Teórico - Aplicações das Técnicas Desenvolvidas. Exercícios e Tópicos Relacionados a Combinatória. Segundo Ano do Ensino Médio

MD Sequências e Indução Matemática 1

Inteligência Artificial. Metodologias de Busca

Um jogo de preencher casas

Programação em papel quadriculado

Testedegeradoresde. Parte X. 38 Testes de Ajuste à Distribuição Teste Chi-Quadrado

Notas de Cálculo Numérico

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Prof. Daniela Barreiro Claro

Nível 1 IV FAPMAT 28/10/2007

Exercícios Adicionais

7 - Análise de redes Pesquisa Operacional CAPÍTULO 7 ANÁLISE DE REDES. 4 c. Figura Exemplo de um grafo linear.

Unidade 5: Sistemas de Representação

1. Introdução. Avaliação de Usabilidade Página 1

Exercícios 1. Determinar x de modo que a matriz

Relatório Trabalho Prático 2 : Colônia de Formigas para Otimização e Agrupamento

Álgebra. SeM MiSTéRio

Unidade 3 Função Logarítmica. Definição de logaritmos de um número Propriedades operatórias Mudança de base Logaritmos decimais Função Logarítmica

Soluções Nível 1 5 a e 6 a séries (6º e 7º anos) do Ensino Fundamental

UNIDADE 6 - PROGRAMAÇÃO MODULAR

Retas e Planos. Equação Paramétrica da Reta no Espaço

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Dois eventos são disjuntos ou mutuamente exclusivos quando não tem elementos em comum. Isto é, A B = Φ

Programação Funcional. Aula 5. Funções Recursivas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Objetivo principal: aprender como definir e chamar funções.

Inteligência Artificial Prof. Marcos Quinet Pólo Universitário de Rio das Ostras PURO Universidade Federal Fluminense UFF

Programação Dinâmica

Lista 1 para a P2. Operações com subespaços

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

Aula 4 Conceitos Básicos de Estatística. Aula 4 Conceitos básicos de estatística

Sistemas de Apoio à Decisão

36 a Olimpíada Brasileira de Matemática Nível Universitário Primeira Fase

Tecnologia da Informação Prof. Mário Henrique de Souza Pardo Resumo Aula 4

TRANSMISSÃO DE DADOS Prof. Ricardo Rodrigues Barcelar

ALGORITMOS E FLUXOGRAMAS

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

1. A corrida de vetores numa folha de papel.

Material Teórico - Módulo de Métodos sofisticados de contagem. Princípio das Casas dos Pombos. Segundo Ano do Ensino Médio

4Distribuição de. freqüência

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Problema de Otimização Combinatória

Dadas a base e a altura de um triangulo, determinar sua área.

Probabilidade e Estatística I Antonio Roque Aula 11 Probabilidade Elementar: Novos Conceitos

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

por séries de potências

Resolução da lista de exercícios de casos de uso

TÉCNICAS DE PROGRAMAÇÃO

Trabalho Computacional

Disciplina de Projetos e Análise de Algoritmos

Solução da prova da 1 a fase OBMEP 2008 Nível 1

Processos Estocásticos

Aulas 17 & 18. Comutação Rápida a Pacote. Eytan Modiano MIT

SOCIEDADE BRASILEIRA DE MATEMÁTICA MESTRADO PROFISSIONAL EM REDE NACIONAL PROFMAT

A Matemática do ENEM em Bizus

Complexidade de Algoritmos. Edson Prestes

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

PROPOSTAS DE TRABALHO PARA OS ALUNOS A PARTIR DE JOGOS 2º ANO. Adriana da Silva Santi Coordenação Pedagógica de Matemática

Metodologia para seleção de amostras de contratos de obras públicas (jurisdicionados) utilizando a programação linear aplicativo Solver

Capítulo 3 - Sistemas de Equações Lineares

Fundamentos de Teste de Software

Capítulo 3 - Sistemas de Equações Lineares

O mecanismo de alocação da CPU para execução de processos constitui a base dos sistemas operacionais multiprogramados.

Programa Olímpico de Treinamento. Aula 9. Curso de Combinatória - Nível 2. Tabuleiros. Prof. Bruno Holanda

Primeiros passos das Planilhas de Obra v2.6

Lista de Exercícios Resolvida. Associação de resistores. Prof. Paulo Roberto Ω Ω

Cálculo em Computadores trajectórias 1. Trajectórias Planas. 1 Trajectórias. 4.3 exercícios Coordenadas polares 5

Usando o do-file editor Automatizando o Stata

ESTUDO DE VIABILIDADE. Santander, Victor - Unioeste Aula de Luiz Eduardo Guarino de Vasconcelos

Análise de Arredondamento em Ponto Flutuante

ARQUITETURA DE COMPUTADORES

1) Eficiência e Equilíbrio Walrasiano: Uma Empresa

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

Planejamento de Aula - Ferramenta Mar aberto

RESOLUÇÃO DAS QUESTÕES DE RACIOCÍNIO LÓGICO-MATEMÁTICO

Potenciação no Conjunto dos Números Inteiros - Z

4 Estudo de caso: Problema de seqüenciamento de carros

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

Cotagem de dimensões básicas

Curvas em coordenadas polares

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO PARTE I. Prof. Dr. Daniel Caetano

INSTITUTO TECNOLÓGICO

Universidade Federal de São João Del Rei - UFSJ

Estatística II Antonio Roque Aula 9. Testes de Hipóteses

Transcrição:

Programação Dinâmica Técnicas de Projeto de Algoritmos Aula 13 Alessandro L. Koerich Pontifícia Universidade Católica do Paraná (PUCPR) Ciência da Computação 7 o Período Engenharia de Computação 5 o Período 1. Resolução de Problemas e Tipos de Problemas 6. Força Bruta Introdução 7. Dividir & Conquistar 8. Decrementar & Conquistar 9. Transformar & Conquistar 10. Compromisso Tempo-Espaço 11. Programação Dinâmica 12. Estratégia Gulosa 13. Backtracking & Branch and Bound 14. Algoritmos Aproximados Técnicas de Projeto de Algoritmos Programa do PA 2. Fundamentos 3. Notação Assintótica e Classe de Eficiência 4. Análise Matemática de Algoritmos 5. Análise Empírica de Algoritmos Fundamentos da Análise da Eficiência de Algoritmos 15. Teorema do Limite Inferior 16. Árvores de Decisão 17. Problemas P, NP e NPC Limitações Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 2 Aulas Anteriores Técnicas Avançadas de Projeto Estratégia Força Bruta Programação Dinâmica Estratégia Dividir & Conquistar Algoritmos Gulosos (Greedy) Estratégia Reduzir & Conquistar Algoritmos Aproximados Estratégia Transformar & Conquistar Estratégia Compromisso Tempo Espaço Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 3 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 4 Plano de Aula Introdução Introdução Exemplo: Multiplicação de Cadeias de Matrizes A programação dinâmica se aplica tipicamente a problemas de otimização onde uma série de escolhas deve ser feita, a fim de se alcançar um solução ótima Subseqüência Comum Mais Longa Elementos da Programação Dinâmica Resumo Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 5 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 6

Introdução Introdução Resolve problemas combinando as soluções de subproblemas Aplicado quando os subproblemas não são independentes, isto é, quando os subproblemas compartilham subsubproblemas. Resolve cada subsubproblema somente uma vez e grava a resposta em uma tabela, evitando assim o trabalho de recalcular a resposta toda a vez que o subsubproblema é encontrado Em geral, a programação dinâmica é aplicada em problemas de otimização. Problemas de otimização Muitas soluções possíveis; Cada solução tem um valor; Desejamos encontrar uma solução com um valor ótimo (min ou máx). Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 7 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 8 Introdução Introdução O desenvolvimento de um algoritmo de programação dinâmica pode ser desmembrado em: Caracterizar a estrutura de uma solução ótima Definir recursivamente o valor de uma solução ótima Calcular o valor de uma solução ótima em um processo bottom up Construir uma solução ótima a partir de informações calculadas Usaremos a programação dinâmica para resolver alguns problemas de otimização. Primeiro exemplo: programação de duas linhas de montagem Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 9 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 10 Uma fábrica de automóveis com duas linhas de montagem Um chassis entra em cada linha de montagem Peças são adicionadas a ele em uma série de estações O automóvel sai pronto no final da linha Cada linha tem n estações numeradas com j=1,2,3,...,n Indicamos a j ésima estação na linha i por S i,j. A j ésima estação da linha 1 (S 1,j ) executa a mesma função que a j ésima estação da linha 2 (S 1,j ) Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 11 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 12

Porém, as estações foram construídas em épocas diferentes e com tecnologias diferentes, assim, o tempo exigido em cada estação varia. Indicamos o tempo de montagem exigido na estação S i,j por a i,j. Normalmente, um chassis entra e sai de uma mesma linha de montagem. Porém, no caso de um pedido urgente, um automóvel parcialmente concluído pode ser passado de uma linha de montagem a outra. Temos também e i e x i como os tempos para um chassis entrar na linha de montagem i e sair concluído da linha de montagem i respectivamente. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 13 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 14 Problema O tempo para transferir um chassi da linha de montagem i depois da passagem pela estação S i,j é t i,j, onde i =1,2 e j=1,2,...,n 1 Determinar que estações escolher na linha 1 e quais escolher na linha 2 de modo a minimizar o tempo total de passagem de um único automóvel pela fábrica. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 15 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 16 Como resolver o problema? Força Bruta: enumerar todos os modos possíveis e calcular quanto tempo cada um deles demora. O tempo total mais rápido resulta da escolha das estações 1, 3 e 6 da linha 1 e das estações 2, 4 e 5 da linha 2. Existem 2 n maneiras possíveis de escolher estações Ω (2 n ) impraticável para n grande Solução possível programação dinâmica Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 17 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 18

Etapa 1: A estrutura do caminho mais rápido pela fábrica Caracterizar a estrutura de uma solução ótima Considerar o modo mais rápido possível para um chassis seguir desde o ponto de partida passando pela estação S 1,j. Se j = 1, fácil: determinar somente quanto tempo demora para passar pela estação S 1,j Se j 2, há duas opções para obter S 1,j : Através de S 1,j-1, e depois diretamente para S 1,j Através de S 2,j-1, e depois transferido para S 1,j Supondo que o caminho mais rápido é através de S 1,j-1 Observação chave: devemos ter pego um caminho mais rápido a partir da entrada através de S 1,j-1 nesta solução. Se houvesse um caminho mais rápido através de S 1,j-1, nós o usaríamos para obter um caminho mais rápido através de S 1,j Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 19 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 20 Supondo agora que o caminho mais rápido é através de S 2,j-1 Observação chave: Novamente, devemos ter pego um caminho mais rápido a partir da entrada através de S 2,j-1 nesta solução. Se houvesse um caminho mais rápido através de S 2,j-1, nós o usaríamos para obter um caminho mais rápido através de S 1,j Geralmente: Uma solução ótima para um problema (o caminho mais rápido através S 1,j ) contém dentro dele um solução ótima para subproblemas (o caminho mais rápido através S 1,j-1 ou S 2,j-1 ) Isto é uma subestrutura ótima. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 21 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 22 Usar subestruturas ótimas para construir soluções ótimas para o problema a partir de soluções ótimas para subproblemas O caminho mais rápido através de S 1,j é tanto: Caminho mais rápido através de S 1,j-1, e depois diretamente através de S 1,j ou Caminho mais rápido através de S 2,j-1, transferência da linha 2 para linha 1, e depois através S 1,j Simetricamente... O caminho mais rápido através de S 2,j é tanto: Caminho mais rápido através de S 2,j-1, e depois diretamente através de S 2,j ou Caminho mais rápido através de S 1,j-1, transferência da linha 1 para linha 2, e depois através S 2,j Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 23 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 24

Portanto, para resolver problemas de encontrar um caminho mais rápido através de S 1,j e S 2,j, resolver os subproblemas de encontrar um caminho mais rápido através de S 1,j-1 e S 2,j-1. Etapa 2: Solução Recursiva Definir recursivamente o valor de uma solução ótima em termos das soluções ótimas dos subproblemas Subproblemas: encontrar o caminho mais rápido pela estação j em ambas as linhas, para j = 1, 2,..., n. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 25 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 26 Seja f i [j] = o tempo mais rápido possível para levar um chassi desde o ponto de partida até a estação S i,j, onde i = 1, 2 e j = 1, 2,..., n. Meta: f* = tempo mais rápido para levar um chassi por todo o percurso na fábrica. Para j = 2,..., n: f 1 [1] = min( f 1 [ j 1] + a 1,j, f 2 [ j 1] + t 2,j-1 + a 1,j ) f 2 [1] = min( f 2 [ j 1] + a 2,j, f 1 [ j 1] + t 1,j-1 + a 2,j ) f* = min ( f 1 [n]+x 1, f 2 [n]+x 2 ) onde f 1 [1]=e 1 + a 1,1 e f 2 [1]=e 2 + a 2,1 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 27 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 28 Combinando as equações anteriores, obtemos as equações recursivas: f i [j] fornece o valor de uma solução ótima. E se quisermos construir uma solução ótima? e1 + a1,1 f1[ j] = min( f1[ j 1] + a e2 + a2,1 f2[ j] = min( f2[ j 1] + a 1,j 2,j, f [ j 1] + t 2, f [ j 1] + t 1 2,j-1 1,j-1 + a + a 1,j 2,j ) ) se j = 1 se j 2 se j = 1 se j 2 Definimos l i [j] = # linha (1 ou 2) cuja estação j 1 é usada em um caminho mais rápido pela estação S i,j. Onde i = 1, 2 e j = 2, 3,..., n l* = # linha cuja estação n é usada em um caminho mais rápido pela fábrica inteira. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 29 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 30

Vamos através do caminho ótimo dado pelos valores de l (linhas sombreadas na figura anterior). Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 31 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 32 Etapa 3: Cálculo dos Tempos mais Rápidos (Computar uma solução ótima) Seja r i (j) o número de referências feitas a f i [j] em um algoritmo recursivo Poderíamos somente escrever um algoritmo recursivo baseado nas recorrências anteriores. A partir da primeira equação temos: r 1 (n) = r 2 (n) = 1 Porém, seu tempo de execução é exponencial em n. Pelas recorrências temos: r 1 (j) = r 2 (j) = r 1 (j+1)+r 2 (j+1) para j = 1, 2,..., n 1 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 33 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 34 Assim, r i (j) = 2 n-j Portanto, f 1 [1] sozinho é referenciado 2 n-1 vezes Prova: Indução sobre j, decrescente a partir de n Base: j = n, 2 n j = 2 0 = 1 = r i (n) Passo de indução: Assumir r i (j+1) = 2 n (j+1) Então, r i (j) = r i (j+1) + r 2 (j+1) = 2 n (j+1) + 2 n (j+1) = 2 n (j+1)+1 =2 n j Θ(2 n ) Portanto, top down não é uma boa maneira de computar f i [j]. Observação: Podemos fazer melhor. f i [j] depende somente de f 1 [j 1] e f 2 [j 1] para j 2. Portanto, a computação deve ser feita em ordem crescente de j Θ(n) Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 35 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 36

O procedimento Fast Way toma como entrada os valores (a i,j, t i,j, e i e x i ), bem como n, o número de estações em cada linha de montagem. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 37 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 38 Etapa 4: Construção do Caminho mais Rápido pela Fábrica (Construindo uma solução ótima) Após calculados f i [j], f*, l i [j] e l*, podemos construir a seqüência de estações usadas no caminho mais rápido pela fábrica. Procedimento Print Stations Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 39 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 40 Resumo Procedimento Print Stations Características da Programação Dinâmica: No exemplo da figura, teríamos: Linha 1: estação 6 Linha 2: estação 5 Linha 2: estação 4 Linha 1: estação 3 Linha 2: estação 2 Linha 1: estação 1 O problema precisa ter a propriedade da subestrutura ótima Então começamos com uma solução recursiva, mas ela será inviável Com isso, a transformamos em uma solução iterativa, que irá ter tempo polinomial, com a característica de calcular primeiro o valor de uma solução ótima e só depois construir a solução. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 41 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 42

Problema: Recebemos uma seqüência (cadeia) < A 1, A 2,..., A n > de n matrizes a serem multiplicadas e desejamos calcular o produto. A 1 A 2...A n Solução: Utilizar um algoritmo padrão para multiplicação de pares de matrizes. Quais pares multiplicar? Em que ordem? A multiplicação de matrizes é associativa, e assim, todas as colocações de parênteses resultam no mesmo produto. Exemplo: Para a cadeia de matrizes < A 1, A 2, A 3, A 4 >, o produto A 1 A 2 A 3 A 4 pode ser completamente colocado entre parênteses de cinco modos distintos: ( A 1 ( A 2 ( A 3 A 4 ) ) ) ( A 1 ( ( A 2 A 3 ) A 4 ) ) ( ( A 1 A 2 )(A 3 A 4 ) ) ( ( A 1 ( A 2 A 3 ))A 4 ) ( ( ( A 1 A 2 ) A 3 ) A 4 ) Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 43 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 44 Atenção!!! O modo como uma cadeia de matrizes é colocada entre parênteses pode ter um impacto dramático sobre o custo de avaliação do produto. Considere primeiro o custo de multiplicar duas matrizes. O pseudo código do algoritmo padrão é fornecido a seguir Se A é uma matriz p x q e B é uma matriz q x r, a matriz resultante C é uma matriz p x r. O tempo para calcular C é dominado pelo número de multiplicações escalares na linha 7, que é pqr. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 45 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 46 Exemplo: Considere o problema de uma cadeia < A 1 A 2 A 3 > de três matrizes onde as dimensões são: 10 x 100, 100 x 5 e 5 x 50 respectivamente. Se fizermos ((A 1 A 2 )A 3 )... Se fizermos (A 1 (A 2 A 3 ) )... O problema de multiplicação de cadeia de matrizes pode ser enunciado da forma a seguir: Dada uma cadeia < A 1,A 2,..., A n > de n matrizes na qual, para i = 1, 2,..., n, a matriz A i tem dimensão p i 1 p i, coloque completamente entre parênteses o produto A 1 A 2...A n de um modo que minimize o número de multiplicações escalares Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 47 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 48

Contagem do número de colocações entre parênteses. Sendo P(n) o número de alternativas para a colocação dos parênteses em uma seqüência de n matrizes. 1 P( n) = n 1 P( k) P( n k) k= 1 se n = 1 se n 2 A solução para a recorrência é Ω(2 n ) força bruta é uma estratégia não adequada. Etapa 1: A estrutura de uma parentização ótima Seja A i...j para a matriz que resulta da avaliação do produto A i A i+1...a j. Para obter a solução do problema proposto, devemos obter A 1...n que pode ser obtido pelo produto de A 1...k A k+1...n cujo custo ótimo é obtido pela soma do custo de A 1...k com A k+1...n mais o custo do produto delas. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 49 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 50 Etapa 1: A estrutura de uma parentização ótima A sub cadeia A 1..k deve ter parentização ótima Do contrário poderíamos substituí la por outra com custo menor que o ótimo, o que é uma contradição. Logo, uma solução ótima para uma instância do problema contém soluções ótimas para as subinstâncias do mesmo problema, o que permite o emprego da programação dinâmica. Etapa 2: Uma solução ótima recursiva Definir um expressão recursiva em função das subinstâncias. Usaremos uma tabela m[i,j] 1 i j n, onde m éo número mínimo de multiplicações escalares necessárias para calcular a matriz A i...j m[i,i]=0 pois A i...i = A i, não havendo necessidade de qualquer cálculo. Para i<j, podemos usar a estrutura ótima delineada no passo 1 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 51 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 52 Etapa 2 (cont.): Uma solução ótima recursiva Assim A i..j pode ser dividido em duas partes: A i...k A k+1...j, i k < j, e m[i,j] é igual ao menor custo para calcular A i...k e A k+1...j, mais o custo para multiplicar essas duas matrizes. Etapa 2 (cont.): Uma solução ótima recursiva A equação recursiva pressupõe que conhecemos o valor de k. Porém existem j 1 valores possíveis para k. A definição recursiva para o custo mínimo de colocar entre parênteses o produto A i A i+1... A j se torna: O custo para multiplicar A i...k A k+1...j vale p i-1 p k p j multiplicações escalares. Desse modo obtemos: m[i,j] = m[i,k] + m[k+1,j] + p i-1 p k p j 0 m[ i, j] = { }. min m[i,k] + m[k + 1, j] + pi-1pkp j se i = j se i < j Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 53 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 54

Etapa 2 (cont.): Uma solução ótima recursiva Como indicar uma parentização ótima? O valor m[i,j] dá o custo ótimo, mas não informações para a construção de uma solução ótima Basta armazenar na matriz s[i,j] o valor de k usado para o valor ótimo de m[i,j], ou seja m[i,j] = m[i,k] + m[k+1,j] + p i-1 p k p j Etapa 3: Determinando a solução ótima Em vez de calcular recursivamente a solução para a recorrência anterior, calculamos o custo ótimo usando uma abordagem tabular de baixo para cima. Neste ponto deve-se elaborar um algoritmo para resolução do problema, Fazendo os cálculos de tal forma que nenhuma solução seja requisitada antes que a mesma já tenha sido calculada Usando a programação dinâmica passamos a ter Θ(n 2 ) subproblemas Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 55 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 56 Etapa 3 (cont.): Determinando a solução ótima O problema (preencher a tabela m) deve ser resolvido em ordem crescente de comprimento da cadeia de matrizes O que equivale a percorrer as diagonais superiores da matriz de custo, a partir da diagonal maior. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 57 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 58 L2 e L3: O algoritmo calcula primeiro m[i,i]=0 para i=1,2,...,n (custos mínimos para cadeias de comprimento 1) L4 a L12: Usa a recorrência para calcular m[i,i+1] para i=1,2,...,n 1 (custos mínimos para cadeias de comprimento 2) Na segunda passagem através do loop, ele calcula m[i,i+2] para i=1,2,...,n 2 (custos mínimos para cadeias de comprimento 3) e assim por diante. Em cada etapa, o custo m[i,j] calculado em L9 e L12, depende apenas de m[i,k] e m[k+1,j] já calculadas. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 59 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 60

O tempo de execução de Matrix Chain Order é O(n 3 ). Os loops estão aninhados com profundidade três e cada índice de loop (l,i,k) toma no máximo n valores. Assim, Matrix Chain Order é muito mais eficiente que o método de força bruta (tempo exponencial) Etapa 4: Construção da solução ótima Matrix-Chain-Order determina somente o número ótimo de multiplicações escalares necessárias para calcular um produto de cadeias de matrizes. Ele não mostra diretamente como multiplicar as matrizes. A solução ótima é calculada a partir das informações armazenadas na tabela s[1...n,1...n] Cada entrada s[i,j] registra o valor de k tal que a colocação ótima dos parenteses de A i A i+1...a j divide o produto entre A k e A k+1. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 61 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 62 Elementos da Programação Dinâmica Quando aplicar um método de programação dinâmica? Ingredientes fundamentais que um problema de otimização deve ter para que a programação dinâmica seja aplicável: Para o exemplo anterior Print Optimal Parens produz ((A 1 (A 2 A 3 )) ((A 4 A 5 )A 6 )) Subestrutura ótima Subproblemas sobrepostos Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 63 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 64 Mostrar que a solução para um problema consiste em fazer um escolha, a qual deixa um ou mais subproblemas para resolver. Suponha que seja dada uma última escolha que leve a uma solução ótima Dada esta escolha, determinar quais subproblemas surgem e como caracterizar o espaço resultante de subproblemas Mostrar que as soluções para subproblemas usadas dentro de uma solução ótima devem ser também ótimas. Usar geralmente cut and paste Usar geralmente cut and paste: Suponha que uma das soluções dos subproblemas não seja ótima Corte a fora Cole no lugar uma solução ótima Obtenha uma melhor solução para o problema original. Contradiz a otimalidade da solução do problema. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 65 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 66

Como caracterizar o espaço dos subproblemas? Manter o espaço o mais simples possível? Expandi lo quando necessário Exemplos: Programação de uma linha de montagem Espaço de subproblemas era a maneira mais rápida a partir da entrada e através das estações S 1,j e S 2,j Não há necessidade de tentar um espaço mais geral de subproblemas Subestrutura ótima varia através dos domínios dos problemas. 1. Quantos subproblemas são usados em um solução ótima? 2. Quantas escolhas para determinar qual subproblema utilizar? Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 67 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 68 Programação da linha de montagem 1 subproblema 2 escolhas (para S i,j, usar S 1,j-1 ou S 2,j-1 ) Subseqüência Comum mais Longa (LCS) 1 subproblema e: 1 escolha ( se x i =y i, LCS de X i-1 e Y j-1 ), ou 2 escolhas ( se x i y i, LCS de X i-1 e Y, e LCS de X e Y j-1 ) Informalmente, o tempo de execução depende (número de subproblemas) vezes (número de escolhas) Programação da linha de montagem: Θ (n) subproblemas, 2 escolhas para cada tempo de execução Θ (n) Subseqüência comum mais longa: Θ (mn) subproblemas, 2 escolhas para cada tempo de execução Θ (mn) Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 69 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 70 Programação Dinâmica usa subestrutura ótima bottom up. Primeiro, encontrar soluções ótimas para subproblemas Então, escolher a qual utilizar em uma solução ótima para o problema. Quando estudarmos algoritmos gulosos, veremos que eles funcionam top down, primeiro fazendo uma escolha que pareça melhor e então resolvendo os subproblemas resultantes. Não se engane pensando que subestruturas ótimas se aplicam a todos os problemas de otimização. Ex: Dois problemas que parecem similares. Em ambos, são dados grafos diretos não ponderados G = (V,E), onde: V é um conjunto de vértices E é um conjunto de arestas Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 71 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 72

Encontre um caminho (seqüência de arestas conectadas) do vértice u ao vértice v. O caminho mais curto tem subestrutura ótima Caminho mais curto: encontrar o caminho u v com menos arestas. Deve ser simples (sem ciclos) pois removendo um ciclo de um caminho temos um caminho com menos arestas; Caminho simples mais longo: encontrar um caminho simples u v com mais arestas. Suponha que p é o caminho mais curto u v. Seja w qualquer vértice sobre p. Seja p 1 uma porção de p, u w. Então, p 1 é um caminho mais curto u w. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 73 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 74 Prova: Suponha que exista um caminho mais curto p 1 u v. Cortar p 1, substituí lo por p 1 e p obter o caminho u 1 p w 2 v com menos arestas que p. O caminho mais longo tem uma subestrutura ótima? Parece que sim Mas ele não tem!! Portanto, podemos encontrar o caminho mais curto u v considerando todos os vértices intermediários w e então encontrando os caminhos mais curtos u w e w v. O mesmo argumento se aplica a p 2 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 75 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 76 Considere q r t = caminho mais longo entre q e t. Os seus subcaminhos são os subcaminhos mais longos? Não!!! Subcaminho entre q e r é q r. Caminho simples mais longo entre q e r é q s t r Subcaminho entre r e t é r t. Caminho simples mais longo entre r e t é r q s t Além de não existir uma subestrutura ótima, não podemos montar uma solução legal a partir da solução para subproblemas. Combinar caminho mais longos simples: q s t r q s t Não é simples!!! De fato, este problema é NP completo Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 77 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 78

Qual é a grande diferença entre o caminho mais longo e o caminho mais curto? O caminho mais curto tem subproblemas independentes A solução para um subproblema não afeta a solução de outro subproblema do mesmo problema Caminho simples mais longo: subproblemas não são independentes Considere subproblemas do caminho simples mais longo: q r e r t. O caminho simples mais longo q r utiliza s e t. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 79 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 80 Qual é a grande diferença entre o caminho mais longo e o caminho mais curto (cont.)? Não podemos utilizar s e t para resolver o caminho simples mais longo r t, pois se o fizermos, o caminho não será simples. Subproblemas independentes: Linha de montagem e Subseqüência comum mais longa: 1 subproblema automáticamente independente Mas temos que utilizar t para encontrar o caminho simples mais longo r t. Utilizando recursos (vértices) para resolver um subproblema torná os indisponíveis para resolver outros subproblemas. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 81 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 82 Subproblemas Sobrepostos Subproblemas sobrepostos O segundo ingrediente que um problema de otimização deve ter para a programação dinâmica ser aplicável. O espaço de subproblemas deve ser pequeno. Subproblemas Sobrepostos Subproblemas sobrepostos ocorrem quando um algoritmo recursivo revisita o mesmo problema repetidamente Bons algoritmos dividir e conquistar geralmente geram um novo problema em cada estágio da recursão. Exemplo: Merge Sort Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 83 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 84

Subproblemas Sobrepostos Subproblemas Sobrepostos Exemplo:. Matrix Chain Order procura repetidamente a solução para subproblemas em linhas inferiores quando resolve problemas em linhas superiores. Ex: a entrada m[3,4] é referenciada 4 vezes: durante o cálculo de m[2,4], m[1,4], m[3,5] e m[3,6]. Comparar com o procedimento recursivo. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 85 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 86 Subproblemas Sobrepostos Memoização Método Alternativo: Memoization Armazene, não recompute Faça uma tabela indexada por subproblemas Quando resolver um subproblema: Buscar na tabela Se a resposta for sim, use a Senão, compute a resposta e armazene a Recursivo: Ω(2 n ) Programação Dinâmica: O(n 2 ) Em programação dinâmica, vamos um passo adiante. Determinamos em que ordem queremos acessar a tabela e preenchemos desta maneira. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 87 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 88 Memoização Problema: Dadas duas sequências, X=<x 1, x 2,..., x m > e Y=<y 1,y 2,...y n >, encontrar a subsequência comum a ambas cujo comprimento seja o mais longo. Uma subsequência não precisa ser consecutiva (contínua), mas ela deve estar em ordem. O problema da LCS pode se resolvido por força bruta ou programação dinâmica. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 89 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 90

Algoritmo Força Bruta Para cada subseqüência de X, verificar se é uma subseqüência de Y. Tempo: Θ ( n 2 m ) 2 m subseqüências de X para verificar Cada subseqüência leva Θ (n) para verificar. Varrer Y para a primeira letra, a partir dela, varrer pela segunda letra, e assim por diante. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 91 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 92 Etapa 1: Caracterização de uma Subseqüência Comum mais Longa Algoritmo Força Bruta : Para cada subseqüência de X, verificar se é uma subseqüência de Y. Cada subseqüência de X corresponde a um subconjunto dos índices {1,2,..., m} de X. Existem 2 m subseqüências de X. Tempo: Θ ( n 2 m ) 2 m subseqüências de X para verificar Cada subseqüência leva Θ (n) para verificar. Varrer Y para a primeira letra, a partir dela, varrer pela segunda letra, e assim por diante. Etapa 1 (cont.) Porém o problema da LCS tem uma propriedade de subestrutura ótima. Dada uma seqüência X = < x 1,x 2,...,x m >, definimos o i ésimo prefixo de X, para i=0,1,...,m como X i =< x 1,x 2,...,x i >. Ex: Se X = < A, B, C, B, D, A, B>, então X 4 = < A, B, C, B > e X 0 é a seqüência vazia. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 93 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 94 Etapa 1 (cont.) Sejam as seqüências X = < x 1,x 2,...,x m > e Y = < y 1,y 2,...,y m > e seja Z = < z 1,z 2,...,z m > qualquer LCS de X e Y. Notação: X i = prefixo <x 1,...,x i > Y i = prefixo <y 1,...,y i > Teorema: Seja Z = <z 1,...,z k > qualquer LCS de X e Y. 1. Se x m =y n, então z k =x m e Z k 1 é uma LCS de X m 1 e Y n 1. 2. Se x m y n, então z k x m Z é uma LCS de X m 1 e Y. 3. Se x m y n, então z k y n Z é uma LCS de X e Y n 1. Etapa 1 (cont.) Prova: 1. Primeira mostrar que z k =x m =y n. Suponha que não. Então, faça uma subseqüência Z = <z 1,...,z k, x m >. É uma subseqüência comum de X e Y e tem comprimento k + 1 Z é uma subseqüência comum mais longa que Z contradiz Z sendo uma LCS. Agora mostrar que Z k+1 é uma LCS de X m 1 e Y n 1. Claramente, é uma subseqüência comum. Agora suponha que existe uma subseqüência comum W de X m 1 e Y n 1 que é mais longa que Z k+1 comprimento de W k. Faça a subseqüência W anexando x m a W. W é uma subseqüência comum de X e Y, tem comprimento k+1 contradiz Z sendo uma LCS. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 95 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 96

Etapa 1 (cont.) Prova (cont.): 2. Se z k x m, então Z é uma subseqüência comum de X m 1 e Y. Suponha que exista uma subseqüência W de X m 1 e Y com comprimento > k. Então W é uma subseqüência comum de X e Y contradiz Z sendo uma LCS. 3. Simétrica a 2. Portanto, uma LCS de duas seqüências contém como um prefixo uma LCS de prefixos das seqüências. Etapa 2 : Formulação Recursiva Do teorema anterior, temos que existem 1 ou 2 subproblemas a examinar quando se encontra uma LCS de X = < x 1,x 2,...,x m > e Y = < y 1,y 2,...,y m > Se x m =y n, devemos encontrar uma LCS de X m 1 e Y n 1. Se x m y n, devemos resolver 2 subproblemas: Encontrar uma LCS de X m 1 e Y. Encontrar uma LCS de X e Y n 1. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 97 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 98 Etapa 2 (cont.): Formulação Recursiva A solução recursiva para o problema da LCS envolve estabelecer uma recorrência para o valor de uma solução ótima. Definindo c [ i,j ] = comprimento da LCS de X i e Y j. Se i=0 ou j=0, uma das seqüencias tem comprimento 0, logo LCS = 0. A subestrutura ótima do problema da LCS fornece a fórmula recursiva: Etapa 3: Calculando o Comprimento da LCS O procedimento LCS LENGTH toma duas seqüencias X e Y como entradas. Armazena os valores de c[i,j] em uma tabela c[0...m,0...n].. 0 c[ i, j] = c[ i 1, j 1] + 1 max( c[ i 1, j],c[ i, j 1]) se i = 0 ou j = 0 se i, j > 0 e x se i, j > 0 e x i i = y j y j Mantém uma tabela b[1...m,1...n] para construir a solução ótima. b[i,j] aponta para a entrada da tabela correspondente à solução ótima do subproblema escolhida ao se calcular c[i,j]. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 99 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 100 Etapa 3(cont.): Cálculo do comprimento da solução ótima Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 101 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 102

Etapa 4: Cálculo do comprimento da solução ótima Construção de uma LCS A chamada inicial é PRINT LCS (b,x,m,n) b[i,j] aponta para a entrada da tabela cujo subproblema usamos para resolver LCS de X i e Y j. Quando b[i,j] =, estendemos LCS em um caractere. Então a subseqüência comum mais longa = entradas contendo. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 103 Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 104 Resumo Características da Programação Dinâmica: O problema precisa ter a propriedade da subestrutura ótima Então começamos com uma solução recursiva, mas ela será inviável Com isso, a transformamos em uma solução interativa, que irá ter tempo polinomial, com a característica de calcular primeiro o valor de uma solução ótima e só depois construir a solução. Ciência/Eng. de Computação Proj. Anal. Algoritmos 2004 105