A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Técnicas de projeto de algoritmos

Apresentações semelhantes


Apresentação em tema: "Técnicas de projeto de algoritmos"— Transcrição da apresentação:

1 Técnicas de projeto de algoritmos
Parte 3 Técnicas de projeto de algoritmos

2 Técnicas de projeto de algoritmos
Divisão e conquista Algoritmos gulosos Programação dinâmica Caminhamento em grafos Heurísticas Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

3 Divisão e conquista

4 Divisão e conquista Princípio básico: function DC (x)
se {x é suficientemente pequeno ou simples} então return ADHOC(x) senão decompor x em x1, x2, …, xK para i = 1 até K faça yi  DC (xi); recombinar os yi para obter y return y Pesquisa binária Merge Sort Top down Recorrente Balanceamento Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

5 Máximo e mínimo Entrada: a1,, a2 , …, an Saída: MIN, MAX
com: MIN  min { a1, a2 , … , an } MAX= max{ a1, a2 , … , an } trivial: determinar MIN: (n-1) comparações determinar MAX: (n-1) comparações 2n-2 comparações melhorado: MIN, MAX  a1 para i = 2 até n faça se ai > MAX então MAX  ai senão se ai < MIN então MIN  ai melhor caso: ai n-1 comparações pior caso: ai 2n-1comparações Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

6 Máximo e mínimo procedure MaxMin(i, j, fmax, fmin) integer i, j
global n, A(1:n) case : i=j fmax, fmin  A(i) : i=j se A(i) < A(j) então fmax  A(j) fmin  A(i) else fmax  A(i) fmin  A(j) : else meio  (i+j)/2 MaxMin(i, meio, gmax , gmin) MaxMin(meio+1, j, hmax , hmin) fmax  max(hmax , gmax) fmin  min(hmin , gmin) endcase T(n) = O(1) + 2·T(n/2) T(n) = O(n) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

7 Divisão e conquista Pesquisa binária max min
Multiplicação de polinômios Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

8 Divisão e conquista mergesort multiplicação de polinômios
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

9 Problema de seleção Dado um vetor a1, a2, …, an obter o k-ésimo menor elemento ordenação: O(n log n) + O(k) k pequeno: O(k·n) É possível fazer melhor do que isso? Reorganizar o vetor a em relação a um pivô x: ai  x ai  x Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

10 Problema de seleção A partition(A, p, r, x) i  p-1 x j  r+1
enquanto TRUE faça repita j  j -1 até que A[j]  x repita i  i+1 até que A[i]  x se i < j então troca A[i] ↔ A[j] senão retornar j fim Complexidade: O(n) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

11 Exemplo: X = 5 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 3 2 6 4 1 3 7
3 5 1 6 i i A[i]  5 i A[i]  5 i A[i]  5 i A[i]  5 i A[i]  5 j A[j]  5 j A[j]  5 j A[j]  5 j A[j]  5 j Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

12 Problema de seleção P1 P2  X  X Determinar o k-ésimo menor elemento:
Se |P1|  k  procurar o k-ésimo em P1 Se |P1|  k  procurar o k-|P1| ésimo em P2 usar o algoritmo de partição Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

13 Problema de seleção Select(k,n):
Dividir os n elementos em n/5 grupos de 5 elementos cada. Extrair a mediama de cada um dos n/5 grupos de 5 elementos cada. Extrair recursivamente a mediana das n/5 medianas usando select: Select (n/10,n/5). Seja x esta mediana: Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

14 Problema de seleção m1 m2 m3 m5 m6 m7 X Setembro 2004
Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

15 Problema de seleção Particionar os dados de entrada utilizando x como pivô usando o algoritmo partition Sejam b1 e b2 o número de elementos em cada partição. Se k  b1: aplicar select para obter o k-ésimo da 1a parte Se k > b1: aplicar select para obter o (k-b1)-ésimo da 2a parte (recursivamente) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

16 Multiplicação de polinômios
Polinômio de grau n-1 tem n termos Entrada: p(x) e q(x) têm tamanho n Saída : r(x)=p(x)·q(x) “força bruta”: para i = 0 até 2n-2 faça r(i)  0; para i = 0 até n-1 faça para j = 0 até n-1 faça r(i+j)  r(i+j) + p(i)·q(j); T(n) = O(n2) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

17 Multiplicação de polinômios
n=2k p(x) + q(x)  O(n) p(x) · q(x)  O(n2), computacionalmente mais caro Idéia: substituir “·” por “+” Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

18 Multiplicação de polinômios
| b1 b0 a0b1 a1b1 b0 + b1 a0b0 a1b0 a a1 a0+ a1 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

19 Multiplicação de polinômios
4 multiplicações 1 adição Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

20 Multiplicação de polinômios
Complexidade: É necessário resolver menos de quatro problemas Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

21 Multiplicação de polinômios
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

22 Multiplicação de polinômios
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

23 Multiplicação de polinômios
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

24 Multiplicação de matrizes
Hipótese: n=2k Particionar A e B em quatro submatrizes n/2 x n/2 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

25 Multiplicação de matrizes
A · B: oito multiplicações de matrizes (n/2) Adicionar duas matrizes n/2 x n/2 : O(n2) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

26 Multiplicação de matrizes
Aumentar o número de adições de matrizes para diminuir o número de multiplicações: método de Strassen 7 multiplicações 18 adições Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

27 Multiplicação de matrizes
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

28 Problema do par mais próximo
Problema do par mais próximo: dados n pontos no plano com coordenadas (xi, yi), i=1,…n, obter o par de pontos mais próximo “Força bruta”: calcular todas as n(n-1)/2 distâncias: O(n2) É possível fazer melhor do que isso? Ordenar todos n pontos pelas coordenadas xi  O(n log n) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

29 Problema do par mais próximo
Separar os pontos em duas metades, de acordo com a ordenação pelas coordenadas xi P P2 d1: menor distância entre pontos de P1 d2: menor distância entre pontos de P2 Verificar se existe A1  P1 e A2  P2 tais que: d(A1,A2) = d < min{d1,d2} d1 e d2 podem ser calculados recursivamente. Falta calcular d = min {d(A1,A2): A1  P1 e A2  P2}. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

30 Problema do par mais próximo
T(n) = 2.T(n/2) + O(n)  T(n) = O(n log n) Como calcular d em O(n)?  = min {d1,d2} Só é necessário calcular d se d < . P1 P2 d1 d2 Só é necessário examinar uma faixa de pontos a distância   da reta vertical que separa P1 e P2. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

31 Problema do par mais próximo
Muitos pontos são eliminados, mas no pior caso podem restar O(n) pontos nesta faixa: o cálculo de d continuaria O(n2). É possível mostrar que na média há na média. para i =1 até #pontos_na_faixa-1 faça para j = i+1 até #pontos_na_faixa-1 faça se d(pi, pj) <  então   d(pi, pj) Como melhorar? Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

32 Problema do par mais próximo
As coordenadas y dos dois pontos que definem d diferem por no máximo , senão d > . Se os pontos na faixa estão ordenados em ordem crescente pelas coordenadas y, se d(pi,pj) >  pode-se abandonar a análise de pi e passar-se a pi+1. Hipótese: pontos na faixa ordenados por yi. para i =1 até #pontos_na_faixa-1 faça para j = i+1 até #pontos_na_faixa-1 faça se |yi - yj| >  então examinar pi+1 e sair do loop interno senão se d(pi,pj) <  então   d(pi, pj) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

33 Problema do par mais próximo
i Não pode haver mais do que oito pontos no retângulo  x . Um deles é o ponto sendo examinado. Verificar no máximo sete pontos: pode ser feito em O(1). Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

34 Problema do par mais próximo
Algoritmo 1: Ordenar os pontos pelas coordenadas x. Dividir o conjunto em duas partes P1 e P2. Recursivamente calcular as distâncias d1 e d2. Fazer  ← min {d1,d2}. Eliminar os pontos a uma distância superior a  da linha de separação. Ordenar os pontos na faixa de acordo com as coordenadas y. Investigar os pontos na ordem e computar a distância de cada um deles a no máximo sete vizinhos. Se alguma distância for menor do que , então atualizar . T(n) = O(n log n) + 2.T(n/2) + O(1) + O(n) + O(n log n) + O(n) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

35 Problema do par mais próximo
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

36 Problema do par mais próximo
Algoritmo 2: Ordenar os pontos pelas coordenadas x. Dividir o conjunto em duas partes P1 e P2. Recursivamente: Calcular as distâncias minímas d1 e d2. . Ordenar os pontos em P1 e P2 segundo as coordenadas y. Combinar as duas listas ordenadas em uma única Fazer  ← min {d1,d2}. Eliminar os pontos a uma distância superior a  da linha de separação. Investigar os pontos na ordem e computar a distância de cada um deles a no máximo sete vizinhos. Se alguma distância for menor do que , então atualizar . T(n) = 2.T(n/2) + O(n) = O(n log n) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

37 Algoritmos gulosos

38 Algoritmos gulosos Problema de otimização
Extensões sucessivas de soluções parciais Sempre escolhe a extensão viável que propicia o maior ganho (“gula”) Otimalidade nem sempre garantida Sistema de subconjuntos: matróide Algoritmos simples e eficientes Análise de complexidade: simples Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

39 Cobertura por nós mínima
Grafo não-orientado G(V, E): obter S  V tal que: {u, v}  E então uS ou vS |S| é mínima 5 2 1 3 4 |S| = 4 ordem dos vértices divisão e conquista 2 1 3 5 4 |S| = 3 maior grau (guloso) 2 1 3 5 4 |S| = 2 2 1 3 5 4 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

40 Cobertura por nós mínima
O algoritmo guloso obtém necessariamente a solução ótima? Solução gulosa Solução ótima Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

41 Cobertura por nós mínima
O algoritmo guloso obtém necessariamente a solução ótima? n+2 nós grau 1 n+2 nós grau n+1 n nós grau n+2 A solução pode ser muito ruim! Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

42 Armazenamento em fita Entrada: L  (l1, l2, …, ln) vetor com comprimentos de n arquivos a serem armazenados em uma fita suficientemente extensa Saída: (j, li(j)) para j=1, …, n i(j) é o índice do j-ésimo arquivo na fita Determinar a ordem de armazenamento dos arquivos na fita, de modo a minimizar o tempo médio TMR (ou total) de recuperação de um arquivo. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

43 Armazenamento em fita 7 3 5 2 … 7 3 2 5 … Setembro 2004
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

44 B-A? Armazenamento em fita 2 3 5 7 …
Armazenar arquivos em ordem crescente de tamanhos Algoritmo auxiliar: ordenar o vetor em O(n log n) Mostrar que o algoritmo é correto Numa solução ótima não existe Supondo-se que existisse: Trocando: B-A? Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

45 Armazenamento em fita a troca diminuiria o custo. Setembro 2004
Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

46 Problema da mochila em qualquer solução ótima Setembro 2004
Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

47 Volume disponível na mochila = 20
Problema da mochila Exemplo: Objeto Ganho Volume total Volume disponível na mochila = 20 Guloso 1: maior ganho primeiro Guloso 2: menor volume primeiro Guloso 3: maior densidade primeiro (densidade = ganho/volume) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

48 Problema da mochila É permitido fracionar os objetos
guloso 1: ganhos decrescentes x1: fração do objeto 1  x1 = 1 volume residual = = 2 15·x2 = 2  x2 = 2/15 valor total: /15 · 24 = 28.2 x1 x2 x3 ganho 2/ 4/9 4/ Enche a mochila muito rapidamente! Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

49 Problema da mochila x1 x2 x3 valor 1 2/15 0 28.2 4/9 4/5 0 30.3
/ 4/9 4/ 0 2/ 0 4/ / / guloso 1 guloso 2 guloso 3 i ci ai ci/ai ~1.38 3 b=20 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

50 Problema da mochila Provar que a solução do guloso com o terceiro critério é ótima: Ordenar os objetos em ordem decrescente das razões cj/aj Solução gulosa: (1, 1, 1, …, 1, gj, 0,…, 0, 0) Diminuir o valor de uma variável em A  aumentar uma variável em B Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

51 Problema da mochila Hipótese: não é permitido fracionar os objetos
O algoritmo guloso não obtém necessariamente a solução ótima! Por que? Propor outros algoritmos gulosos: soluções ótimas? contra-exemplos? Algoritmo guloso é uma heurística de baixa complexidade. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

52 Árvore Geradora de Peso Mínimo
Entrada: G = (V,E) grafo não-orientado peso c(e) e  E Saída: F  E tal que (i) O grafo G’=(V,F) é acíclico e conexo (G’ é gerador de G) (ii) F é maximal (iii) c(F)   c(e) é mínimo e  F Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

53 Árvore Geradora de Peso Mínimo
Exemplos de árvores geradoras: 3 4 7 A B C F D E 8 3 4 9 2 7 8 A B C F D E 8 4 9 2 8 A B C F D E Princípio do algoritmo: a aresta de menor peso sempre pertence à solução ótima Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

54 Algoritmo de Kruskal L  lista com arestas ordenadas em ordem crescente de pesos; F  ; count  0; enquanto count < n – 1 e L   faça seja (v,w) o próximo arco de L remover (v,w) de L se v e w não estão na mesma componente início F  F  {(v,w)} colocar v e w na mesma componente count  count + 1 fim Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

55 Exemplo c(e) e 2 (f,c) (c,e) 3 (a,b) (a,d) 4 (a,f) 7 (b,c) 8 (b,e) (e,f) (c,d) 9 (d,e) (b,f) 3 A B 4 9 7 2 3 F C 8 2 8 8 D 9 E C(T) = = 14 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

56 Exemplo c  e ? f  c ? 3  5 6  3 6 f 5 e 4 d 3 c 2 b 1 a Árvore
Vértice f  c ? 6  3 3 f 5 e 4 d c 2 b 1 a Árvore Vértice c  e ? 3  5 5 f e 4 d c 2 b 1 a Árvore Vértice Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

57 Exemplo c  e ? 3  5 b  a ? a  d ? 2  1 a  f ? 1  4 4  5 5 f e
Árvore Vértice b  a ? 2  1 5 f e 4 d c 1 b a Árvore Vértice a  d ? 1  4 5 f e 4 d c b a Árvore Vértice a  f ? 4  5 5 f e d c b a Árvore Vértice Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

58 Complexidade Ordenar  O(m log m)  O(m log n)
Testar componentes  O(1) m vezes  O(m) Reorganizar componentes  O(n) n vezes  O(n2) T(n) = O(m log m) + O(m) + O(n2) = = O(m log m + n2) = O(m log n + n2) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

59 Estrutura de dados Union finding: 1) Dado um nó, obter sua componente.
2) Fundir duas componetes. Colocar os nós de cada componente em uma árvore e representar a componente pela raiz da árvore. Achar a componente: seguir o caminho do nó até a raiz. Fundir duas componentes: fazer a raiz de uma componente tornar-se filha da raiz da outra. A raiz da árvore mais baixa torna-se filho da raiz da árvore mais alta. Altura da árvore  log n Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

60 Estrutura de dados 1 1 2 2 3 3 ... 4 árvore mais baixa  árvore mais alta 1 2 3 4 2 1 4 3 ... Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

61 Complexidade altura  log n
Determinar cada componente e testar: O(log n) Reorganizar componentes: O(1) Complexidade: T(n) = O(m log n), melhor do que O(m log n + n2) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

62 Algoritmo de Prim Começar com um nó qualquer.
A cada iteração, adicionar a aresta de menor peso que conecta um nó já conectado a um nó não conectado. 3 A B 4 9 7 2 3 F C 8 2 8 8 D 9 E Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

63 Algoritmo de Prim Complexidade: T(n) = O(n2)
Seja (k,l) a aresta de menor peso Para i de 1 a n, fazer: prox(i)  l, se cil < clk prox(i)  k, caso contrário prox(k), prox(l)  0 Fazer (n-2) iterações: Seja j tal que prox(j)  0 e cj,prox(j) é mínimo Fazer prox(j)  0 Para k de 1 a n, faça Se prox(k)  0 e ck,prox(k) > ckj, então prox(k)  j Complexidade: T(n) = O(n2) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

64 Exemplo a 3 b 4 9 7 3 f 2 c 8 8 2 8 d 9 e a 3 b 3 d 4 2 f 2 c e Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

65 Intercalação ótima de arquivos
Intercalar 2 arquivos com m e n registros: m + n operações (merge). Intercalar diversos arquivos: dois a dois Diferentes ordens levam a diferentes tempos de processamento: A = 30 B = 20 C = 10 registros A + B = 50 operações (A + B) + C = 60 operações B + C = 30 operações (B + C) + A = 60 operações Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

66 Intercalação ótima de arquivos
n1 + n2 n1 + n2 + n3 n1 + n2 + n3 + n4 3n1 + 3n2 + 2n3 + n4 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

67 Intercalação ótima de arquivos
Menores arquivos primeiro! n1 + n2 n3 + n4 (n1 + n2)+ (n3 + n4) 2n1 + 2n2 + 2n3 + 2n4 n4 n3 n2 n1 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

68 Intercalação ótima de arquivos
Arquivos: nós externos da árvore binária Operações: nós internos di: distâncias da raiz ao nó representando o i-ésimo arquivo Número total de operações (cópias/deslocamento) di.qi (qi é o número de registros no arquivo i) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

69 Intercalação ótima de arquivos
Lista L de n árvores Cada nó na árvore tem 3 campos LCHILD: RCHILD: PESO: tamanho de um arquivo procedure TREE(i,n) para i = 1 até n-1 GETNODE (T) LCHILD(T)  LEAST (L) RCHILD(T)  LEAST (L) WEIGHT(T)  WEIGHT(LCHILD(T)) + WEIGHT(RCHILD(T)) INSERT(L,T) return (LEAST(L)) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

70 Intercalação ótima de arquivos
GETNODE(T): novo nó para usar na construção da árvore LEAST(L): obtém e remove da árvore em L cuja raiz tem menor peso INSERT(L,T): insere a árvore com raiz T na lista L Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

71 Intercalação ótima de arquivos
1 2 3 4 5 5 10 20 30 30 L: T GETNODE LEAST (L) 1 LEAST (L) 2 L: 3 5 6 4 15 20 30 30 5 10 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

72 Intercalação ótima de arquivos
35 30 30 15 20 5 10 35 60 15 20 30 30 5 10 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

73 Intercalação ótima de arquivos
95 35 15 20 5 10 60 30 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

74 Intercalação ótima de arquivos
n – 1 iterações Lista L ordenada pelos pesos LEAST  O(1) INSERT  O(n) L organizada como um heap LEAST  O(log n) INSERT  O(log n) O(n2) O(n log n) Prova por indução Se L inicialmente contém n  1 árvores-nós isoladas com pesos q1, ..., qn, então o algoritmo gera uma árvore ótima com estes pesos. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

75 Programação Dinâmica Setembro 2004
Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

76 Motivação Trajetória ótima de cada nó ao destino final
Problema: determinar o caminho mais curto de 1 a 12 no grafo abaixo Trajetória ótima de cada nó ao destino final 7 2 4 7 4 6 9 6 9 9 2 4 5 2 16 7 3 5 4 2 7 1 2 3 7 10 12 18 1 3 4 11 7 5 5 5 2 8 11 15 11 6 5 8 Procedimento backwards Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

77 Motivação Trajetória ótima do nó inicial até cada nó
Problema: determinar o caminho mais curto de 1 a 12 no grafo abaixo Trajetória ótima do nó inicial até cada nó 9 2 4 9 15 6 9 6 7 9 2 4 5 2 7 3 11 4 14 16 7 1 2 3 7 10 12 3 1 3 4 11 10 16 5 5 2 8 11 2 11 6 5 8 Procedimento forward Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

78 Motivação Trajetória ótima através de cada nó
Problema: determinar o caminho mais curto de 1 a 12 no grafo abaixo Trajetória ótima através de cada nó 2 4 9+7 6 9 6 7+9 9 2 4 5 2 0+16 7 3 16+0 7 4 14+2 1 2 7 10 12 3 1 3 4 11 5 5 2 8 11 11 6 5 8 Combinação das trajetórias ótimas Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

79 Motivação Trajetória ótima através de cada nó
Problema: determinar o caminho mais curto de 1 a 12 no grafo abaixo Trajetória ótima através de cada nó 2 4 6 9 6 9 2 4 5 2 7 3 7 4 1 2 3 7 10 12 1 3 4 11 10+7 5 5 2 8 11 11 6 5 8 Combinação das trajetórias ótimas Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

80 Programação dinâmica Aplicação a problemas de decisões seqüenciais: cada decisão aplicada a um estado em determinado estágio leva a um estado do estágio imediatamente seguinte. Princípio da otimalidade: uma seqüência ótima de decisões tem a propriedade de que quaisquer que sejam o estado e a decisão inicial, as decisões remanescentes constituem uma seqüência ótima de decisões com relação ao estado decorrente da primeira decisão. Alternativamente: “toda subtrajetória da trajetória ótima é ótima com relação a suas extremidades inicial e final”. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

81 Programação dinâmica Método exato para resolver problemas de progamação inteira que envolvem apenas decisões seqüenciais, nos quais cada nova decisão depende apenas do estado do sistema, mas não das decisões anteriores (isto é, da forma como este estado foi atingido). Principais conceitos envolvidos: estágios (etapas) estados decisões função critério a ser otimizada Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

82 Programação dinâmica Roteiro de aplicação:
Identificar um modelo de decisões seqüenciais através de seus estágios. Assegurar-se de que cada solução viável (ou trajetória) pode ser vista como uma seqüência de decisões tomadas a cada estágio, de modo tal que seu custo seja igual à soma dos custos das decisões individuais. Definir o conceito de estado como a resultante de todas as decisões relevantes tomadas no passado (caso forward). (alternativamente, definir o conceito de estado como a resultante de todas as decisões relevantes tomadas no futuro no caso backwards) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

83 Programação dinâmica Roteiro de aplicação (continuação):
Determinar as transições de estado possíveis. Atribuir o custo de cada transição de estado à decisão correspondente. Escrever uma recursão que defina o custo ótimo do estado inicial até o estado final. Exemplo de aplicação: problema da mochila Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

84 Problema da mochila Caso (4): os itens não podem ser fracionados e no máximo uma unidade de cada item pode ser selecionada Problema de programação inteira As variáveis inteiras binárias (0-1) representam a decisão de selecionar um objeto ou não. Solução não trivial! Ordenar as variáveis pelo índice lucro/volume resolve o problema linear apenas, mas não o de programação inteira. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

85 Problema da mochila Decomposição do problema em estágios
Em vez de considerar uma solução (x1,x2,...,xn) completa de uma só vez, visualizar o problema como se as decisões fossem tomadas para um item de cada vez. Após k decisões, terão sido determinados quais dos primeiros k itens devem ser selecionados e, conseqüentemente, terão sido determinados os valores das variáveis x1,x2,...,xk. Neste ponto, o valor acumulado é e o volume acumulado é . Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

86 Problema da mochila Estágio: cada variável do problema Estado:
volume total ocupado com as decisões já tomadas Decisão: selecionar ou não um item (isto é, fazer xk=1) Custo da decisão de selecionar o item k: aumento de ck unidades no lucro parcial acumulado Efeito da decisão de selecionar o item k: aumento do volume ocupado (estado) em ak unidades Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

87 Problema da mochila Definição: yk(u) = lucro máximo que pode ser obtido com volume total igual a u e usando apenas itens do conjunto {1,...,k} Quanto vale y0(0)? y0(0) = 0 (sem objetos selecionados, o peso e o lucro são nulos) Definir yk(u) = - se é impossível obter um volume total igual a u apenas com itens dentre os do conjunto {1,...,k}. Quanto valem y0(u) e yk(0)? y0(u) = - para u > 0 (impossível acumular peso sem itens) yk(0) = 0 para k = 1,2,...,n (nenhum item selecionado) Calcular yk(u) para k = 1,...,n e u = 0,...b, a partir de y0(0). Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

88 Problema da mochila yk(u) = lucro máximo que pode ser obtido com volume total igual a u e usando apenas itens do conjunto {1,...,k} Calcular yk(u) para k = 1,...,n e u = 0,...b: Interpretação: há duas alternativas para se obter yk(u), dependendo do item k ser selecionado ou não yk(u) = yk-1(u), se o item k não é usado yk(u) = yk-1(u-ak)+ck, se o item k é usado Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

89 Problema da mochila Observar que o lucro associado ao estado resultante de uma decisão depende apenas do valor desta decisão e do estado atual, mas não depende da forma como este último foi atingido. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

90 Problema da mochila y5(4) = Setembro 2004
Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

91 Valor ótimo = maxb=0,...,4 {y5(b)}
Problema da mochila y5(b) = Valor ótimo = maxb=0,...,4 {y5(b)} Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

92 Problema da mochila y0(4) y5(4) y0(3) y5(3) y0(2) y5(2) y0(1) y5(1)
u = 4 u = 3 u = 2 u = 1 u = 0 y0(4) y5(4) y0(3) y5(3) y0(2) y5(2) y0(1) y5(1) y0(0) y1(0) y2(0) y3(0) y4(0) y5(0) k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

93 Problema da mochila y0(4) y0(3) y0(2) y0(1) u = 4 u = 3 u = 2 u = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

94 Problema da mochila - u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1 k = 2
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

95 Problema da mochila - ? u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

96 Problema da mochila - u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1 k = 2
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

97 Problema da mochila - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

98 Problema da mochila - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

99 Problema da mochila - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

100 Problema da mochila - ? 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

101 Problema da mochila - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

102 Problema da mochila - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

103 Problema da mochila 2 - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
2 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

104 Problema da mochila 2 - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
2 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

105 Problema da mochila 2 - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
2 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

106 Problema da mochila - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

107 Problema da mochila - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

108 Problema da mochila - ? 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

109 Problema da mochila - 3 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

110 Problema da mochila - 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

111 Problema da mochila - 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

112 Problema da mochila 2 - 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
2 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

113 Problema da mochila 2 - 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
2 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

114 Problema da mochila 2 - 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
2 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

115 Problema da mochila 2 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
2 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

116 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

117 Problema da mochila - 5 ? 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

118 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

119 Problema da mochila 1 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
1 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

120 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

121 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

122 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

123 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

124 Problema da mochila 1 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
1 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

125 Problema da mochila 1 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
1 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

126 Problema da mochila 1 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
1 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

127 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

128 Problema da mochila - 5 ? 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

129 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

130 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

131 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

132 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

133 Problema da mochila 3 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
3 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

134 Problema da mochila 3 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
3 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

135 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

136 Problema da mochila 3 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
3 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

137 Problema da mochila 3 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
3 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

138 Problema da mochila - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0 k = 1
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

139 Problema da mochila 3 - 5 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
3 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

140 Problema da mochila 3 - 5 6 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
3 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

141 Problema da mochila - 5 6 3 2 u = 4 u = 3 u = 2 u = 1 u = 0 k = 0
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

142 Problema da mochila - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2
u = 4 u = 3 u = 2 u = 1 u = 0 - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2 y5(0) = 0 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

143 Problema da mochila - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2
u = 4 u = 3 u = 2 u = 1 u = 0 - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2 y5(0) = 0 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

144 Problema da mochila 6 - 5 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2
u = 4 u = 3 u = 2 u = 1 u = 0 - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2 y5(0) = 0 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

145 Problema da mochila x5=1 6 - 5 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3
u = 4 u = 3 u = 2 u = 1 u = 0 - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2 y5(0) = 0 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

146 Problema da mochila x4=1 x5=1 6 2 - 5 3 y5(4) = 6 y5(3) = 5 y5(2) = 3
u = 4 u = 3 u = 2 u = 1 u = 0 - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2 y5(0) = 0 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

147 Problema da mochila x3=1 x4=1 x5=1 6 2 - 5 3 y5(4) = 6 y5(3) = 5
u = 4 u = 3 u = 2 u = 1 u = 0 - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2 y5(0) = 0 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

148 Problema da mochila x2=0 x3=1 x4=1 x5=1 6 2 - 5 3 y5(4) = 6 y5(3) = 5
u = 4 u = 3 u = 2 u = 1 u = 0 - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2 y5(0) = 0 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

149 Problema da mochila x1=0 x2=0 x3=1 x4=1 x5=1 6 2 - 5 3 y5(4) = 6
u = 4 u = 3 u = 2 u = 1 u = 0 - 5 6 3 2 y5(4) = 6 y5(3) = 5 y5(2) = 3 y5(1) = 2 y5(0) = 0 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

150 Problema da mochila Os estados em verde e as transições possíveis (arcos com setas) definem um grafo multiestágio para a aplicação da recursão de programação dinâmica. Número de operações (tempo de processamento) diretamente proporcional ao produto do tamanho da mochila pelo número de variáveis (preencher inteiramente a matriz de dimensões (b+1)x(n+1)): aplicabilidade limitada aos valores de n e de b Caso seja possível levar múltiplas cópias de cada item, aumenta o número de decisões e a complexidade do problema. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

151 Programação dinâmica p “linhas” 2 1 ... n-1 n B Cálculo da menor
Redução no número total de operações: p “linhas” 2 1 ... n-1 n B Cálculo da menor trajetória de A a B Total de adições? Total de trajetórias de A a B: pn Cálculo exaustivo: n.pn Programação dinâmica: p + p.p.(n-1) + p  n.p2 A Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

152 Programação dinâmica Observar que o valor da função objetivo associado a um estado depende apenas dele, mas não depende da forma como foi atingido. O fato de serem implicitamente descartadas subtrajetórias não-ótimas é que leva à redução significativa do número de operações. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

153 Programação dinâmica Identificar decisões e estágios
Identificar o critério de otimização Construir a função critério Identificar o critério de otimalidade Para cada decisão relacionar recursivamente os valores do critério definindo as variáveis de estado necessários Considerando as variáveis de estado, fornecer condições de contorno para a função critério. Determinar a política ótima para cada estágio e estado. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

154 Programação dinâmica (I) Problema de otimização de investimentos: Considere-se um conjunto de n possíveis investimentos, nos quais é possível aplicar no máximo um total de M unidades monetárias. Seja cj(k) o retorno obtido com a aplicação de 0  k  M unidades monetárias no investimento j = 1,...,n. Determinar a aplicação ótima a ser feita em cada investimento, de modo a maximizar o retorno total. Resolver o problema para n = 3 e M = 4, considerando a matriz de retornos fornecida a seguir: Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

155 Programação dinâmica k c1(k) c2(k) c3(k) 1 3 2 7 4 11 6 12 8
1 3 2 7 4 11 6 12 8 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

156 Programação dinâmica Estágio: Estado: Decisão: Recursão:
cada investimento k = 1, 2, 3 considerado Estado: total ainda disponível para ser aplicado nos investimentos k, k+1, …, n outra alternativa: total aplicado nos investimentos 1, 2, …, k Decisão: quanto aplicar no investimento k Recursão: Rk(x) = max0yx {ck(y) + Rk+1(x-y)} Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

157 Programação dinâmica Condições de contorno:
R4(0) = 0 Todos os recursos devem ser usados nos três investimentos. Valor máximo do retorno obtido: R1(4) = ? Maximizar o retorno obtido com a aplicação de um total de quatro unidades nos investimentos 1, 2, 3. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

158 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

159 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

160 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
3 2 1 Estado final: R4(0) = 0 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

161 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
3 3 2 2 1 1 Estado final: R4(0) = 0 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

162 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
4 4 4 3 Estado inicial: R1(4) = ? 3 3 7 11 2 2 12 1 1 Estado final: R4(0) = 0 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

163 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
4 4 4 3 Estado inicial: R1(4) = ? 1 3 3 7 2 11 2 2 4 12 1 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

164 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
4 4 4 3 Estado inicial: R1(4) = ? 1 3 3 7 4 1 2 11 2 2 4 2 12 1 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

165 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
4 4 4 3 Estado inicial: R1(4) = ? 1 3 3 7 4 1 2 11 2 2 4 1 2 2 12 1 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

166 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
4 4 4 3 Estado inicial: R1(4) = ? 1 3 3 7 4 1 2 11 2 2 4 1 2 2 12 1 1 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

167 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
4 4 4 3 Estado inicial: R1(4) = ? 1 3 3 7 4 1 2 11 2 2 4 1 2 2 12 1 1 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

168 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
4 4 4 3 8 Estado inicial: R1(4) = ? 1 3 3 7 6 4 1 2 11 2 2 4 1 4 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

169 Programação dinâmica Estado inicial: R1(4) = ? Estado final: R4(0) = 0
4 4 4 3 8 Estado inicial: R1(4) = ? 1 3 3 7 6 4 1 2 11 2 2 4 1 4 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

170 Programação dinâmica 8 Estado 6 inicial: R1(4) = ? 4 2 Estado final:
4 4 4 3 8 Estado inicial: R1(4) = ? 1 6 3 3 7 6 4 1 2 4 11 2 2 4 1 4 2 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

171 Programação dinâmica 8 8 Estado inicial: R1(4) = ? 6 4 2 Estado final:
4 4 4 3 8 Estado inicial: R1(4) = ? 1 6 3 3 7 6 4 1 2 4 11 2 2 4 1 4 2 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

172 Programação dinâmica 8 8 Estado inicial: R1(4) = ? 6 6 4 2 Estado
4 4 4 3 8 Estado inicial: R1(4) = ? 1 6 6 3 3 7 6 4 1 2 4 11 2 2 4 1 4 2 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

173 Programação dinâmica 8 8 Estado inicial: R1(4) = ? 6 6 4 4 2 Estado
4 4 4 3 8 Estado inicial: R1(4) = ? 1 6 6 3 3 7 6 4 1 2 4 4 11 2 2 4 1 4 2 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

174 Programação dinâmica 8 8 Estado inicial: R1(4) = ? 6 6 4 4 2 2 Estado
4 4 4 3 8 Estado inicial: R1(4) = ? 1 6 6 3 3 7 6 4 1 2 4 4 11 2 2 4 1 4 2 2 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

175 Programação dinâmica 8 8 Estado inicial: R1(4) = ? 6 6 4 4 2 2 Estado
4 4 4 3 8 Estado inicial: R1(4) = ? 1 6 6 3 3 7 6 4 1 2 4 4 11 2 2 4 1 4 2 2 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

176 Programação dinâmica 13 8 8 Estado inicial: R1(4) = ? 6 6 4 4 2 2
4 4 4 3 8 Estado inicial: R1(4) = ? 1 6 6 3 3 7 6 4 1 2 4 4 11 2 2 4 1 4 2 2 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

177 Programação dinâmica 13 8 8 Estado inicial: R1(4) = ? 6 6
4 4 4 3 8 Estado inicial: R1(4) = ? 1 6 6 Solução ótima: projeto 1: 3 unidades projeto 2: 0 unidades projeto 3: 1 unidade Retorno total = 13 3 3 7 6 4 1 2 4 4 11 2 2 4 1 4 2 2 2 2 12 1 1 2 1 Estado final: R4(0) = 0 8 Investimento 1 Investimento 2 Investimento 3 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

178 Programação dinâmica (II) Problema de substituição de equipamentos: Uma empresa precisa de uma máquina para produzir determinado produto ao longo dos próximos N anos. Os seguintes dados são disponíveis: P = preço de compra de uma máquina nova c(i) = custo anual de operação de uma máquina de idade i t(i) = preço obtido na troca de uma máquina de idade i r(i) = valor de residual uma máquina de idade i No início do período de programação, a empresa dispõe de uma máquina com M anos de uso. Determinar a política ótima de substituição desta máquina ao longo dos N anos, de modo a minimizar a soma dos custos anuais. Considerar N = 5 (horizonte), M = 2 (idade da máquina no início do horizonte), P = 50 (preço de compra de uma máquina nova) e os demais custos e preços informados na tabela a seguir. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

179 Programação dinâmica Observar que o modelo pode ser estendido para considerar preços diferentes para uma máquina nova a cada ano, taxa de desconto, troca por máquinas mais novas mas já usadas, etc. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

180 Programação dinâmica idade i 1 2 3 4 5 6 c(i) 10 13 20 40 70 100 110
1 2 3 4 5 6 c(i) 10 13 20 40 70 100 110 t(i) - 32 21 11 r(i) 25 17 8 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

181 Programação dinâmica Estágio: Estado: Decisão: Recursão:
cada ano k = 1, 2, ..., N do horizonte Estado: idade da máquina no ano k Decisão: o que fazer com a máquina no ano k: trocá-la por uma nova ou mantê-la em funcionamento Recursão: Vk(i): custo ótimo total do ano k até o final do horizonte a partir de uma máquina de idade i Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

182 Programação dinâmica Recursão:
Vk(i): custo ótimo total do ano k até o final do horizonte a partir de uma máquina de idade I Máquinas novas são sempre compradas no dia 1 de janeiro de cada ano e completam um ano de vida em 1 de janeiro do ano seguinte. Caso uma máquina de idade i seja trocada por uma nova no início do ano k: Vk(i) = p - t(i) + c(0) + Vk+1(1) Caso contrário: Vk(i) = c(i) + Vk+1(i+1) Vk(i) = mínimo {p - t(i) + c(0) + Vk+1(1), c(i) + Vk+1(i+1)} Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

183 Programação dinâmica Condições de contorno:
VN+1(i) = -r(i) A máquina é vendida por seu valor residual ao final do horizonte. Início do ano 1: máquina tem idade M Custo mínimo ao longo do horizonte: V1(M) = ? Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

184 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

185 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 2
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

186 Programação dinâmica Ano 1 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 2
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

187 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 3 20 2 39 1
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

188 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 3 20 2 39 1
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

189 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 3 20 2 2 39
13 1 1 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

190 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 4 40 3 20
49 2 2 39 13 1 1 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

191 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 4 40 3 20
49 2 2 39 13 1 1 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

192 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 5 70 4 40
55 3 20 49 2 2 39 13 1 1 1 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

193 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 5 70 4 40
55 3 3 20 49 20 2 2 39 2 39 13 13 1 1 1 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

194 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 5 70 4 40
55 3 3 20 49 20 2 2 39 2 39 13 13 1 1 1 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

195 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 6 100 5 70
60 4 40 55 3 3 20 49 20 2 2 39 2 39 13 13 1 1 1 1 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

196 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 6 100 5 70
60 4 4 40 40 55 3 3 3 49 20 49 20 20 2 2 39 2 39 2 39 13 13 13 1 1 1 1 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

197 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 6 100 5 70
60 4 4 40 40 55 3 3 3 49 20 49 20 20 2 2 39 2 39 2 39 13 13 13 1 1 1 1 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

198 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 7 110 6 100
60 5 70 60 4 4 40 40 55 3 3 3 49 20 49 20 20 2 2 39 2 39 2 39 13 13 13 1 1 1 1 1 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

199 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 7 110 6 100
60 5 5 70 70 60 4 4 4 55 40 40 40 55 3 3 3 3 49 20 49 20 49 20 20 2 2 39 2 39 2 2 39 39 13 13 13 13 1 1 1 1 1 28 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

200 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 -0 7 110 6
100 60 -0 5 5 70 70 60 -0 4 4 4 55 40 40 40 55 -8 3 3 3 3 49 20 49 20 49 20 20 -17 2 2 39 2 39 2 2 39 39 13 13 13 13 -25 1 1 1 1 1 28 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

201 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 -0 7 110 6
100 60 -0 5 5 70 70 60 -0 4 4 4 55 40 40 40 55 -8 3 3 3 3 49 20 49 20 49 20 20 -17 2 2 39 2 39 2 2 39 39 13 13 13 13 -25 1 1 1 1 1 28 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

202 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 -0 7 110 35
100 60 -0 5 5 70 70 30 60 -0 4 4 4 55 40 40 40 55 24 -8 3 3 3 3 49 20 49 20 49 20 20 14 -17 2 2 39 2 39 2 2 39 39 13 13 13 -4 13 -25 1 1 1 1 1 28 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

203 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 -0 7 110 35
100 56 60 -0 5 5 70 70 30 60 -0 4 4 4 55 40 45 40 40 55 24 -8 3 3 3 3 49 20 49 20 49 20 35 20 14 -17 2 2 39 2 39 2 2 39 39 13 13 24 13 -4 13 -25 1 1 1 1 1 28 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

204 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 -0 7 110 35
100 56 60 -0 5 5 70 70 79 30 60 -0 4 4 4 55 40 45 40 40 55 24 -8 3 3 3 3 49 20 49 63 20 49 20 35 20 14 -17 2 2 39 2 39 2 2 39 39 13 48 13 24 13 -4 13 -25 1 1 1 1 1 28 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

205 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 -0 7 110 35
100 56 60 -0 5 5 70 70 79 30 60 -0 4 4 4 55 40 97 45 40 40 55 24 -8 3 3 3 3 49 20 49 63 20 49 20 35 20 14 -17 2 2 39 2 39 2 2 39 39 76 13 48 13 24 13 -4 13 -25 1 1 1 1 1 28 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

206 Programação dinâmica Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 -0 7 110 35
100 56 60 -0 5 5 70 70 79 30 60 -0 4 4 4 55 40 97 45 40 40 55 24 -8 3 3 3 3 49 20 115 49 63 20 49 20 35 20 14 -17 2 2 39 2 39 2 2 39 39 76 13 48 13 24 13 -4 13 -25 1 1 1 1 1 28 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

207 Programação dinâmica Solução ótima: trocar a máquina nos anos 1, 2 e 4
-0 7 Solução ótima: trocar a máquina nos anos 1, 2 e 4 Custo total = 115 110 35 6 100 56 60 -0 5 5 70 70 79 30 60 -0 4 4 4 55 40 97 45 40 40 55 24 -8 3 3 3 3 49 20 115 49 63 20 49 20 35 20 14 -17 2 2 39 2 39 2 2 39 39 76 13 48 13 24 13 -4 13 -25 1 1 1 1 1 28 28 28 28 Ano 1 Ano 2 Ano 3 Ano 4 Ano N=5 Ano 6 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

208 Programação dinâmica (III) Problema simplificado de planejamento da operação: Considere-se um sistema formado por uma usina hidráulica com reservatório (ou um sistema equivalente) e uma usina térmica capaz de complementar toda a demanda. São conhecidas as afluências mensais, as demandas mensais, a vazão turbinada máxima mensal da usina hidráulica e os volumes inicial e final do reservatório. Equacionar um modelo passível de ser resolvido por programação dinâmica para a otimização da operação, minimizando o custo de complementação térmica. Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

209 Programação dinâmica Dados: Horizonte: k = 1, 2, …, N
Demanda no mês k: d(k) Afluência no mês k: a(k) Vazão turbinada máxima no mês k: p(k) Custo unitário da geração térmica no mês k: c(k) Volume mínimo do reservatório no mês k: m(k) Volume máximo do reservatório no mês k: M(k) Volume inicial do reservatório: V(1) = Vi Volume final do reservatório: V(N+1) = Vf Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

210 Programação dinâmica Estágio: Estado: Decisão:
cada mês k = 1, 2, …, N do horizonte de planejamento Estado: volume x(k) do reservatório no mês k Decisão: vazão turbinada u(k) na usina hidráulica no mês k geração térmica t(k) no mês k calculada a partir de u(k) e d(k): t(k) = max {0,d(k)-produção(u(k))} Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

211 Programação dinâmica Recursão: x(k+1) = x(k) + a(k) - u(k)
m(k)  x(k)  M(k) x(1) = Vi x(N+1) = Vf 0  u(k)  p(k) t(k) = max {0,d(k)-produção(u(k))} minimizar k=1,…,n c(k).t(k) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

212 Programação dinâmica Considerações: Não-linearidades
produção na usina hidráulica em função da vazão turbinada custo de complementação térmica Discretização dos volumes e das vazões turbinadas aumento do espaço de estados Outras variáveis de decisão vertimento v(k) no mês k: x(k+1) = x(k) + a(k) - u(k) - v(k) produção térmica no mês k: d(k) = produção(u(k)) + t(k) + deficit(k) aumento do espaço de decisões Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

213 Programação dinâmica Considerações (continuação):
Múltiplos reservatórios estado do sistema descrito por um vetor de volumes aumento do espaço de estados “explosão combinatória” Demandas e/ou afluências não-determinísticas modelo de programação dinâmica estocástica Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

214 Todos os caminhos mais curtos
G = (V, E) grafo orientado |V| = n Obter o valor do caminho mais curto entre cada par de nós Caminho mais curto de i a j: Se o caminho curto de i a j passa por k, então ele usa o caminho mais curto de 1 a k e o caminho mais curto de k a j. Cii = 0 Cij = +  (i,j) E Não há ciclos negativos R i j  ciclo Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

215 Todos os caminhos mais curtos
Se k é o índice do nó de maior índice entre i e j, então o caminho mais cursto de i a k não passa por nenhum nó de índice maior do que k–1. Ak(i,j): comprimento do caminho mais curto de i a j passando por nenhum vértice de índice maior do que k. A(i,j): comprimento do caminho mais curto de i a j. Obter o caminho mais curto de i a j pode ser visto como a determinação do nó de maior índice que faz parte deste caminho. Em seguida, achar dois caminhos mais curtos: de i a j sem usar nós de índice maior do de k a j que k-1 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

216 Todos os caminhos mais curtos
A(i, j) = min {Cij,A’(i, j)} A’(i, j) = min {Ak-1(i,k) + Ak-1(k,j)}  k  n A0(i, j) = Cij O caminho mais curto de i e j não passando por um nó de índice maior do que k ou passa pelo nó k ou não: Se passa : Ak(i, j) = Ak-1(i,k) + Ak-1(k,j) Se não passa: Ak(i, j) = Ak-1(i,j) Ak(i, j) = min {Ak-1(i,k) + Ak-1(k,j), Ak-1(i,j)} A1, A2, A3, ..., An  A = An Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

217 Todos os caminhos mais curtos
para i = 1 até n faça para j = 1 até n faça a(i,j)  Cij para k = 1 até n faça ak(i,j)  min{ak-1(i,j), ak-1(i,k) + ak-1(k,j)} T(n) = O(n3) Exemplo: 1 2 3 6 4 11 C = Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

218 Todos os caminhos mais curtos
A0 = A1 = A3 = A2 = Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

219 Encadeamento ótimo do produto de matrizes
Seqüência de matrizes A1,A2, ..., An Parentetizar para definir a ordem em que as matrizes serão multiplicadas. Multiplicar as matrizes duas a duas segundo o algoritmo tradicional. Um produto de matrizes está completamente parentetizado se é uma matriz única se é o produto de duas matrizes completamente parentetizados envolvido por parênteses. (A1 (A2 (A3 A4) ) ) (A1 ( (A2 A3 ) A4 ) ) ( (A1 (A2 A3 ) ) A4 ) ( (A1 A2 ) (A3 A4 ) ) ( ( (A1 A2 ) A3 ) A4 ) Qual é a influência da ordem? Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

220 Algoritmo A: r  q A  B  pqr operações B: q  r Exemplo: A1A2A3
Matrix_Multiply (A, B) se colunas(A)  linhas(B) então erro senão para i  1 até linha (A) faça para j  1 até coluna(B) faça C[i,j]  0 para k  1 até coluna(A) faça C[i,j]  C[i,j] + A[i,k]  B[k,j] retorne C A: r  q A  B  pqr operações B: q  r Exemplo: A1A2A3 A1: 10 x 100 A2: 100 x 5 A3: 5 x 50 ( (A1A2)A3) = 7.500 (A1(A2A3)) = Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

221 Problema 221221 k n-k Parentetizar k = 1, 2, ..., n-1
Dada uma cadeia A1, ..., An de n matrizes, onde a matriz A, tem dimensões pi-1  pi, completamente parentetizar o produto A1, ..., An de forma a minimizar o mínimo de operações de multiplicações escalares. Número de parentetizações: P(n): números de alternativas para parentetizar completamente o produto de n matrizes. k n-k Parentetizar k = 1, 2, ..., n-1 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 221221

222 Cálculo dos custo ótimos
Um problema para cada i, j satisfazendo 1  i  j  n Um algoritmo recursivo resolve o mesmo problema muitas vezes. Aproveitar a estrutura dos subproblemas que se recobrem para acelerar. problemas (pares) Em vez de recursividade  enfoque botton-up Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 222222

223 Caracterização da estrutura de uma solução ótima
Parentetização ótima separa o produto entre Ak e Ak+1 para algum k=1, ..., n-1 Para algum k: A parentetização de A1  A2  ... Ak tem que ser ótima, assim como a de Ak An Ai...j = Ai ...Aj A1 ... k Ak+1... n custo total = custo custo Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 223223

224 Princípio da otimalidade
 Solução recursiva Definir recursivamente o valor da função ótima em termos das soluções dos subproblemas. Subproblema: determinar o custo mínimo m[i,j] de parentetizar Ai Ai+1...Aj para 1  i  j  n custo ótimo : m[1,n] Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 224224

225 Princípio da otimalidade
m[i,j] = ? i = j: a cadeia é formada por uma só matriz  m[i, j] = 0 i < j: usar a estrutura de uma solução ótima Hipótese: a parentetização de Ai...j separa a cadeia entre Ak e Ak+1 onde i  k < j. Então: m[i,j] = m[i,k] + m[k+1, j] + Pi-1  Pk  Pj Ai...k  Ak+1 ...j Pi-1 Pk Pk  Pj Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 225225

226 Princípio da otimalidade
k pode assumir valores entre i e j-1. Logo, m[i, j] = onde i  k < j S[i, j] = valor de k onde deve ser separado o produto Ai ...Aj S[i, j] = k tal que m[i,j] = m[i,k] + m[k+1, j] + Pi-1  Pk  Pj 0, min m[i,k] + m[k+1, j] + Pi-1  Pk  Pj i = j i < j i  k  j Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 226226

227 227227 Algoritmo Recursive_ Matrix_Chain(P, i, j) se i=j então
retorne 0 m[i, j]   para k  1 até j-1 faça q  Recursive_ Matrix_Chain(P, i, k) + Recursive_ Matrix_Chain(P, k+1, j) + Pi-1  Pk  Pj se q < m[i, j] então m[i, j]  q retorne m[i, j] Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 227227

228 228228 Complexidade n = 1 n > 1 T(K) T(n-k) i = 1, 2, ..., n-1 T(i)
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 228228

229 Princípio da otimalidade
1...4 1...1 2...4 1...2 3...4 1...3 4...4 2...2 3...4 2...3 4...4 1...1 2...2 3...3 4...4 1...1 2...3 1...2 3...3 3...3 4...4 2...2 3...3 2...2 3...3 1...1 2...2 i  k  j Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 229229

230 Princípio da otimalidade
Preencher a matriz m como resolvendo-se o problema de parentetização em matrizes cujo comprimento aumenta: m[i, j] = onde i  k  j 0, min m[i,k] + m[k+1, j] + i = j i < j Pi-1  Pk  Pj calcular o produto de j-i+1 matrizes depende apenas do custo de processar produtos de menor de j-i+1 matrizes m[i, j]  0 Em seguida: m[i, i+1] i = 1, 2, ..., n-1 custos mínimos para cadeias de l =2 matrizes Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 230

231 Princípio da otimalidade
Matriz A: tem dimensões Pi-1  Pi A entrada é uma seqüência (P0, P1, ..., Pn) = P de comprimento n+1 Matrix_Chain_Order(P) n  length(P) - 1 para i  1 até n faça m[1, i]  0 para l  2 até n faça para i  1 até n-l+1 faça j  i + l – 1 m[i, j]   para k  i até j-1 faça q  m[i, k] + m[k+1, j] + Pi-1  Pk  Pj se q < m[i, j] então m[i, j]  q s[i, j]  k retorne m, s Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 231

232 Exemplo 1 2 3 4 5 6 m A1 A2 A3 A4 A5 A6 15.125 j i A1 = 30 x 35 A4 = 5 x 10 A2 = 35 x 15 A5 = 10 x 20 A3 = 15 x A6 = 20 x 25 T(n) = O(n3) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 232

233 Exemplo s 6 1 3 5 2 j i 3 4 3 3 3 4 1 3 5 2 5 1 2 3 4 5 A[1, 6] = 3  (A1 A2 A3) (A4 A5 A6) A[1, 3] = 1 A[4, 6] = 5 ( (A1 ( A2 A3) ) ( (A4 A5 ) A6) ) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 233

234 234234 Algoritmo Lookup_Chain(P, i, j) se m[i, j] <  então
retorne m[i, j] se i = j então m[i, j]  0 else para k  i até j-1 faça q  Lookup_Chain(P, i, k) + Lookup_Chain(P, k+1, j) + Pi-1  Pk  Pj se q < m[i, j] então m[i, j]  q Cada m[i, j] é preenchido em uma chamada a Lookup_Chain. Cada Chamada é O(n)  T(n) = O(n3) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 234234

235 Algoritmo Será que é possível melhorar o algoritmo recursivo, mantendo uma tabela com as soluções dos problemas ? No início, a tabela tem um flag para dizer que os valores não foram processados. Hipótese: o conjunto de todos os possíveis subproblemas é conhecido, assim como a correspondência entre posição na tabela e subproblemas. Matrix_Chain_2(P) n  length [P] – 1 para i  1 até n faça para j  1 até n faça m[i, j]   retorne Lookup_Chain (P, 1, n) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 235235

236 Exemplo 1...4 1...1 2...4 1...2 1...3 2...2 3...4 2...3 4...4 3...3 4...4 2...2 3...3 i  k  j Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 236236

237 Exemplo 1...4 1...1 2...4 1...2 1...3 2...2 3...4 2...3 4...4 3...3 4...4 2...2 3...3 i  k  j Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 237237

238 Exemplo 1...4 1...1 2...4 1...2 1...3 2...2 3...4 2...3 4...4 3...3 4...4 2...2 3...3 Nós: T(n) = O(n2) Sucessores/nó: T(n) = O(n) i  k  j Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 238238

239 239 Algoritmo Matrix_Chain_Multiply(A, s, i,j) se j > i então
x  Matrix_Chain_Multiply (A, s, i, s[i,j]) y  Matrix_Chain_Multiply (A, s, s[i,j]+1, y) retorne Matrix_Multiply(x, y) senão retorne A Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 239

240 Subseqüência mais longa
X = (x1, x2, ..., xn) Z = (z1, z2, ..., zn) Z é uma subseqüência de x se existe uma subseqüência crescente (i1, i2, ..., ik) de índices de x tais que para todos J = 1, 2, ..., k Xij = Zj Exemplo: X = (A, B, C, B, D, A, B) Y = (B, C, D, B) Dados 2 seqüências X e Y, diz-se que Z é uma subseqüência comum de X e Y se Z é uma subseqüência de X e de Y. X = (A B C B D A B) Y = (B D C A B A) SML = (B C B A) (B D A B) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 240

241 Subseqüência mais longa
Força bruta: X: m elementos  2m subseqüências exponencial Teorema: X = (x1, x2, ..., xm) Y = (y1, y2, ..., yn) Z = (z1, z2, ..., zk) SML (x, y) Então: se Xm = Yn, então Zk = Xm = Yn e Zk-1 é uma SML de Xm-1 e Ym-1 se Xm  Yn, então: Zk  Xm  Z = SML (Xm-1 , Y) Zk  Yn  Z = SML (X , Yn-1) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 241

242 Subseqüência mais longa
Uma SML contém uma SML de prefixos das duas seqüências. Obter a SML se traduz em examinar um ou dois subproblemas: Xm = Yn,  obter SML (Xm-1 , Yn-1) Xm  Yn,  obter SML (Xm-1 , Y)  obter SML (X , Yn-1) estes dois subproblemas exigem a solução de SML (Xm-1 , Yn-1) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 242

243 Recorrência 243 c[i, j] = comprimento de SML (xi, yi)
i = 0 ou j = 0  c[i, j] = 0 c[i, j] = 0, i = 0 ou j = 0 c[i-1, j-1] + 1, i, j > 0 xi = yj c[i, j-1], max i, j > 0 xi  yj c[i-1, j] Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 243

244 Algoritmo recursivo: exponencial
Há apenas m-n subproblemas distintos  P.D c[0...m, 0...n]  calculada linha a linha da esquerda para a direita. b[i, j]  tabela auxiliar aponta para a entrada da tabela correspondente à solução do subproblema ótimo escolhido durante o calculo de c[i, j] Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 244

245 Exemplo 245 1 2 3 4 5 6 yi B D C A Xi 0  1  1  1  2  2  2  3 
1 2 3 4 5 6 yi B D C A Xi 0  1  1  1  2  2  2  3  3  3  4  7 4  Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 245

246 Exemplo 246 1 2 3 4 5 6 yi B D C A Xi 0  1  1  1  2  2  2  3 
1 2 3 4 5 6 yi B D C A Xi 0  1  1  1  2  2  2  3  3  3  4  7 4  Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 246

247 Algoritmo 247 SML(X, Y) m  compr [x] n  compr [y]
para i  1 até m faça c[i, 0]  0 para j  1 até n faça c[0, j]  0 para i  1 até m faça para j  1 até n faça se xi = yj então c[i, j]  c[i-1, j-1] + 1 b[i, j]   senão se c[i-1, j]  c[i, j-1] então c[i, j]  c[i-1, j] b[i, j]   senão c[i, j]  c[i, j-1] b[i, j]   retorne c, b j j i -1 i T(n) = O(m · n) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 247

248 Programação dinâmica estocástica
Jogo: Tabuleiro dividido em três regiões de mesma área Ficha lançada sobre o tabuleiro Regiões I, II, III equiprováveis Se a ficha cair na região I, o jogador escolhe entre as roletas A e B A: I  I p = ¼ l = 2 I  II p = ¾ l = 4 Região II : roletas C e D Região III: roletas E e F I II III Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 248

249 Programação dinâmica estocástica
1/ 1/4 12 1/4 0 B 1/2 10 C I II B 3/4 4 D 1/6 0 1/4 36 1/2 10 E F III 3/4 12 5/6 6 1/2 16 Três jogadas Qual roleta escolher a cada rodada? Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 249

250 Programação dinâmica estocástica
6 A 1/4 · /4 · 4 = 6 I A I B 5 I I B 10 II C 1/6 · 0 + 5/6 · 6 = 5 II II III D 9 15 E K = 2 K = 3 III III F 13 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 250

251 Programação dinâmica estocástica
6 A 1/4 · /4 · 4 = 6 I A I 6 B 5 I I B 10 II C 1/6 · 0 + 5/6 · 6 = 5 II II 10 III D 9 15 E K = 2 K = 1 III III 15 F 13 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 251

252 Programação dinâmica estocástica
12 A 6 6 I I B 4 C 10 10 II II D I: A 1/4 · (12 + 6) + 3/4 · (4 + 10) = 15 I: B 1/6 · () + 6) + 5/6 · (6 + 15) = 18.5 E 15 III III K = 1 F Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro K = 0 252

253 Programação dinâmica estocástica
15 12 A 6 6 I I B 18.5 4 18 C 10 10 II II 22.8 D I: A 1/4 · (12 + 6) + 3/4 · (4 + 10) = 15 I: B 1/6 · () + 6) + 5/6 · (6 + 15) = 18.5 27.8 E 15 III III K = 1 K = 2 F Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 25.5 253

254 Lucro esperado 254 27.7 A 18.5 I I 31.2 B C 30.6 22.8 II II 35.3 D E
K = I – B II – D III – E I I 31.2 B K = I – B II – D III – E C 30.6 22.8 II II 35.3 D K = I – A II – C III – E E 40.5 27.8 III III 38.3 F Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 254

255 Lucro esperado 255 Lucro esperado:
PPD pode ter alguns elementos determinísticos, tais como o estado inicial ou o resultado de algumas decisões. PPD: uma mudança de estado envolve duas fases decisão resultado aleatório de decisão tomada Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 255

256 Qual o maior ganho que pode ser obtido com esta estratégia?
54 42 12 I I I I A 12 B B 6 D 12 E 36 8 6 4 5/96 5/24 1/4 10 60 48 10 II II II II D C 10 12 12 3/64 3/16 1 36 36 78 E E 48 36 8 8 III III III III 5/96 1/16 1/4 Lucro máximo = 78 probabilidade = 1/3 + 5/96 = 5/288 Lucro mínimo = 4 probabilidade = 1/144 Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 256

257 Programação dinâmica estocástica
Solução: conjunto de decisões ótimas para cada estágio {decisões ótimas}: estratégia ótima Estratégia ótima: Lucro/ganho esperado ótimo = Maior e menor ganho possíveis com estratégia ótima? Probabilidadaes? Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 257

258 Como joga um jogador que se considera
Completamente azarado ? (conservador) Completamente sortudo ? (arriscado) Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 258


Carregar ppt "Técnicas de projeto de algoritmos"

Apresentações semelhantes


Anúncios Google