Apresentação Programação Dinâmica

53
U n i v e r s i d a d e F e d e r a l d o E s p í r i t o S a n t o - C C A - U F E S Profª. Simone Dornelas Costa [email protected] http://www.sidornellas.com Universidade Federal do Espírito Santo Centro de Ciências Agrárias – CCA-UFES Departamento de Computação COM10602- 2015/1 Análise e Projeto de Algoritmos

description

Trabalho da Disciplina de Análise e projeto de Algoritmos - Programação Dinâmica

Transcript of Apresentação Programação Dinâmica

PowerPoint PresentationUniversidade Federal do Espírito Santo Centro de Ciências Agrárias – CCA-UFES Departamento de Computação
COM10602- 2015/1
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
*
Caracterizar 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 de baixo pra cima
Construir uma solução ótima a partir de informações calculadas
Backtracking
Busca
Programação Dinâmica
*
Programação Dinâmica
*
Multiplicação de matrizes
Maior subsequência Monotônica
Multiplicação de Matrizes
*
Programação Dinâmica
*
Coronel Motors Corporation produz automóveis.
Processo de montagem
Troca de linha
Figura: Linha de montagem
*
O problema: Agilizar o processo de montagem
Escolha das estações e linhas
Programação de linha de montagem
Figura: Linha de montagem
*
Exemplo de uma solução aleatória
Possibilidades, complexidade de tempo
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
1ª Etapa – Caracterizar a estrutura de uma solução ótima
Estações, tempo de troca de linha de montagem, o tempo de montagem, tempo de entrada e tempo de saída.
Programação de linha de montagem
Figura: Linha de montagem
*
1ª Etapa – Caracterizar a estrutura de uma solução ótima
Determinar o tempo para se chegar a estação S1,j
Determinar o tempo para se chegar a estação Si,j, considerar as duas linhas
Programação de linha de montagem
Figura: Linha de montagem
*
Sub estrutura ótima.
Figura: Linha de montagem
*
2ª Etapa – Definir recursivamente o valor de uma solução ótima.
Definir o caminho mais rápido até a estação j, pela linha 1 e 2, para j = 2,3..., n.
Definir a estrutura
Figura: Estrutura de tempo e caminho
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
2ª Etapa – Definir recursivamente o valor de uma solução ótima.
Função -> f* = min(f1[n]+x1,f2[n]+x2)
Casos base -> f1[1] = e1 + a1,1 e f2[1] = e2 + a2,1
Deste modo para outros caminhos:
Programação de linha de montagem
Figura: Função recursiva
*
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
Figura: Algoritmo FASTEST-WAY
*
3ª Etapa – Construir a solução ótima com as informações calculadas
Tendo os valores das matrizes de custo de tempo e de caminho e a linha final, é possível construir a sequência de estações, usando os caminhos mais rápidos pela fábrica.
Fazer um percurso utilizando as tabelas
Programação de linha de montagem
Figura: Exemplo de solução
Multiplicação de Cadeia de Matrizes
Caracteristicas da Multiplicação de Matrizes
Não é comutativa:
É comutativa:
Número de colunas de A deve ser igual ao número de linhas de B
M(1,3) * M(3,4)
Matriz resultante possuirá o numero de linhas de A e colunas de B
M(1,3) * M(3,4) = M(1,4)
Custo de operações
*
Multiplicação de Cadeia de Matrizes
Problema da Multiplicação de Matrizes
Dada uma cadeia (A1, A,2 … An) de n matrizes na qual, i = 1, 2 …n. a matriz Ai, tem dimensão Pi-1Pi (vetor), coloque completamente entre parênteses o produto A1, A,2 … An de um modo que minimize o numero de multipicações escalares.
Exemplo:
Multiplicação de Cadeia de Matrizes
Opções de resolusão
*
Multiplicação de Cadeia de Matrizes
Procedimento para resolução recursiva
Problema origina: A(i..j) = <A1,A2,...,An>
Se i=j, m[i,i] = 0, sendo o custo mínimo de produtos em A(i...j)
Se i<j, dividiremos o conjunto A(i..j) em subconjuntos:
*
Multiplicação de Cadeia de Matrizes
Procedimento para resolução recursiva
Acha-se soluções ótimas para cada grupo de subroblema
Calcula-se o custo dos suconjuntos A (i..k) e A (k+1..j)
O produto do conjunto A(i..k) A (k+1..j) exige Pi-1Pk Pj multiplicações.
Combina-se as soluções para achar a solução original. Logo:
*
Multiplicação de Cadeia de Matrizes
Solução por Indução em n
Base: n = 1 é Trivial!
H.I.: Sabemos resolver o problema com k < n matrizes.
Prova: Dado n matrizes aplique a H.I. às cadeias A1...Ak e Ak+1...An. Para
todo 1 ≤ k ≤ n e escolha k tal que
m1n = MIN 1 ≤ k ≤ n(m1k + m(k+1)n + P1PkPn)
Complexidade: Ω(2n)
*
Subestrutura ótima:
um problema apresenta uma subestrutura ótima se uma solução ótima para o problema contém em seu interior soluções ótimas para subproblemas;
Devemos ter o cuidado de assegurar que o intervalo de subproblemas que consideramos inclui aqueles que são usados em uma solução ótima;
Para caracterizar o espaço de subproblemas, uma boa regra prática é tentar manter o espaço tão simples quanto possível, e depois expandi-lo conforme necessário;
Elementos de programação dinâmica
*
Subestrutura ótima:
O tempo de execução de um algoritmo de programação dinâmica depende do produto de 2 fatores:
O número de subproblemas globais
Quantas escolhas observamos para cada subproblema
Elementos de programação dinâmica
*
Subestrutura ótima:
A programação dinâmica emprega a subestrutura ótima de baixo p cima.
Sutilezas: ter cuidado para não presumir que a subestrutura ótima é aplicável quando ela não o é.
O que significa o fato de subproblemas serem idependentes?
Elementos de programação dinâmica
*
Quando um algoritmo recursivo reexamina o mesmo problemas inúmeras vezes, dizemos que o problema de otimização tem subproblemas superpostos;
Programação dinâmica costuma tirar proveito de subproblemas superpostos resolvendo cada subproblema uma vez, e depois armazenando a solução em uma tabela, onde possa ser examinada quando necessário, usando-se tempo constante por pesquisa.
Elementos de programação dinâmica
*
*
Memoização:
Um algoritmo recursivo memoizado mantém uma entrada em uma tabela para a solução de cada subproblema.
Cada entrada contém inicialmente um valor especial para indicar que a entrada ainda tem de ser preenchida.
Quando o subproblema é encontrado pela primeira vez durante a execução do algoritmo recursivo, sua solução é calculada e depois armazenada na tabela.
Transforma um algoritmo (2n) em um algoritmo O(n3)
Elementos de programação dinâmica
*
*
No problema da subsequência comum mais longa, temos duas sequências X={x1,x2,…,xM} e Y = {y1,y2,…,yN} e queremos encontrar a maior subsequência comum entre as 2, ou seja, com o maior comprimento.
Isso é um problema onde pode ser usado programação dinâmica.
Subsequencia comum mais longa
*
Pode-se dividir essa tarefa em 4 etapas.
A primeira delas é a caracterização de uma subsequência comum mais longa: que basicamente mostra o que é uma LCS (Longest Common Subsequence) e mostra um teorema:
-Sejam as sequências X={x1,x2,…,xM} e Y = {y1,y2,…,yN} e seja Z = {z1,z2,…,zL} qualquer LCS de X e Y.
1. se xM = yN, então zK = yN = xM e Zk-1 é uma LCS de Xm-1 e Yn-1
2. se xM != yN, então zK != implica que Z é uma LCS de Xm-1 e Y
3. se xM != yN, então zK != implica que Z é uma LCS de X e Yn-1
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
Subsequencia comum mais longa
A segunda etapa é uma solução recursiva para encontrar resposta dos subproblemas Xm-1 e Yn e do subproblema Xm e Yn-1. Como esses casos acabam com todas as outras possibilidades, sabemos que uma das soluções ótimas de subproblemas tem que ser usada dentro de um LCS de X e Y.
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
Subsequencia comum mais longa
A Terceira etapa consiste em calcular o comprimento de uma LCS, armazenando os valores em uma tabela c[0…m,0…n] e também mantém a sequência para a solução ótima numa outra tabela b.
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
A quarta etapa é construir o LCS tendo como base a tabela b, começando por b[m,n] e seguindo as setas, se encontrarmos uma seta na diagonal, b[i,j] referente a posição com a seta é um elemento da LCS, caso seja uma seta na horizontal ou para cima ela não faz parte da LCS
Subsequência comum mais longa
*
*
Solução: Construir árvore de pesquisa binária
Queremos que o tempo total gasto na pesquisa seja tão baixo quanto possível
Problema: Uma palavra que ocorre com frequência aparecer longe da raiz e uma raramente usada perto da raiz
Diminui a velocidade da tradução
Palavras que ocorrem com frequência sejam colocadas perto da raiz
Árvores de pesquisas binárias ótimas
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
Há situações em que sabemos a frequência ou probabilidade cada chave será buscada
Inserções e remoções não são usualmente efetuadas na árvore assim construída pois elas podem modificar a sua estrutura
Melhor árvore binária de busca não é necessariamente uma árvore binária perfeitamente balanceada
Árvores de pesquisas binárias ótimas
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
Denotamos por comprimento de caminho hi de um nó ki o número de nós encontrados desde a raiz até o nó ki .
k1 < k2 < . . . < kn
Suponha que se conhece a probabilidade de acesso de cada uma das chaves: sendo pi a probabilidade de acesso à chave ki , para 1 < i < n
Comprimento de caminho ponderado de uma árvore
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
O custo de busca P da árvore é expresso pelo comprimento de caminho ponderado da árvore, assim definida:
Dentre todas as árvores, é dita árvore binária de busca ótima
aquela que minimiza o custo P
Comprimento de caminho ponderado de uma árvore
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
Considere n = 3, as 3 chaves e suas respectivas probabilidades
k1 = 100 p1 = 1/7
K2 = 200 p2 = 2/7
K3 = 300 p3 = 4/7
Vamos ilustrar as possíveis árvores binárias de busca e seu
respectivo custo P.
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
.
Árvore 1 é a árvore ótima e não é balanceada.
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
.
A estratégia gulosa não funciona
Pode parecer que basta adotar uma estratégia gulosa e começar colocando a chave de maior probabilidade de acesso na raiz
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
.
Uma árvore binária de busca ótima minimiza o custo P
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
.
Como obter a árvore binária de busca ótima
No exemplo para n = 3 chaves, enumeramos todas as 5 árvores binárias possíveis e depois obtivemos a ótima.
Pergunta: este método é viável? Qual a sua complexidade de tempo?
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
.
Método de programação dinâmica
Em alguns algoritmos, a ineficiência se deve ao não reuso de resultados já calculados anteriormente.
Propriedade de árvores binárias de busca ótimas:
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
.
Construção de uma árvore binária de busca ótima
O método de programação dinâmica constrói uma árvore ótima a partir de subárvores ótimas.
Exemplo
Sejam n = 5 chaves valendo 1, 2, 3, 4 e 5 com as respectivas frequências de acesso:
Universidade Federal do Espírito Santo - CCA-UFES
Universidade Federal do Espírito Santo CCA-UFES
*
.
Chaves 1 e 2
*
.
Chaves 1 e 2
*
.
Chaves 2 e 3
*
.
Chaves1, 2 e 3
*
.
*
.
Algoritmo para construir uma árvore de busca ótima
A complexidade de tempo do algoritmo de construção é O(n3), mas
pode ser reduzido para O(n2)