258
Parte 3 Técnicas de projeto de algoritmos

Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Embed Size (px)

Citation preview

Page 1: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Parte 3

Técnicas de projeto de algoritmos

Page 2: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 2

• Divisão e conquista• Algoritmos gulosos• Programação dinâmica• Caminhamento em grafos• Heurísticas

Técnicas de projeto de algoritmos

Page 3: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Divisão e conquista

Page 4: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 4

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

Divisão e conquista

Top downRecorrenteBalanceamento

Pesquisa bináriaMerge Sort

Princípio básico:

Page 5: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 5

Entrada: a1,, a2 , …, an Saída: MIN, MAXcom: 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

Máximo e mínimo

melhor caso: ai n-1 comparações

pior caso: ai 2n-1comparações

Page 6: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 6

Máximo e mínimoprocedure MaxMin(i, j, fmax, fmin) integer i, jglobal n, A(1:n) case

: i=j fmax, fmin A(i) : i=j-1 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)

Page 7: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 7

Divisão e conquista

nOnT

OcnTnT

clog)1(

nOnT

OcnTcnT

)1(

acnOnT

caOcnTanTlog

com)1(

Pesquisa binária

max min

Multiplicação de polinômios

kcn

Page 8: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 8

Divisão e conquista

)(:

log:

:

log acnOnTca

nnOnTca

nOnTca

)(nOcnTanTcn k

mergesort

multiplicação de polinômios

Page 9: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 9

Dado um vetor a1, a2, …, an obter o k-ésimo menor elemento

Problema de seleção

ai xai x

• 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:

Page 10: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 10

partition(A, p, r, x) i p-1j 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

Problema de seleção

A

p r

x

Complexidade: O(n)

Page 11: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 11

jA[j] 5

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

jA[j] 5

3 5

iA[i] 5

iA[i] 5

iA[i] 5

ji jA[j] 5

1 6

iA[i] 5

jA[j] 5

iA[i] 5

Page 12: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 12

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

Problema de seleção

X X

P1 P2

Page 13: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 13

Select(k,n):

1. Dividir os n elementos em n/5 grupos de 5 elementos cada.

2. Extrair a mediama de cada um dos n/5 grupos de 5 elementos cada.

3. Extrair recursivamente a mediana das n/5 medianas usando select: Select (n/10,n/5). Seja x esta mediana:

Problema de seleção

Page 14: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 14

Problema de seleção

m1 m2 m3 m5 m6 m7X

103

5213: nnxElementos

Page 15: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 15

4. Particionar os dados de entrada utilizando x como pivô usando o algoritmo partition

5. 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 parteSe k > b1: aplicar select para obter o (k-b1)-ésimo da 2a parte(recursivamente)

Problema de seleção

nOnT

nOnTnTnT

nnTnOnTOnnOnT

1075

10351

5

Page 16: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 16

Multiplicação de polinômios

“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)

Polinômio de grau n-1 tem n termos

11

2210

n

n xaxaxaa

Entrada: p(x) e q(x) têm tamanho nSaída : r(x)=p(x)·q(x)

Page 17: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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 “+”

2

11011000

22101010

xbaxbababa

xcxccxbbxaa

Page 18: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 18

201

1010

1

112

000

?

cccc

bbaac

c

bac

bac

aux

aux

a0b0

a0b1 a1b1

a1b0

a0+ a1

b0+b1

|b1 |b0 |

a0 a1

41

12 portroca

Multiplicação de polinômios

Page 19: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 19

2/

1)2/(1)2/(2/

1)2/(10

2

2

1)2/(

1)2/(

12,

,1 tem)(),(

nlrrl

nrrll

nnnr

nl

rl

rl

nrl

nrl

xxqxpxqxpxxqxpxqxpxqxp

xpxppxp

xpxppxp

ngrauxqxqxpxp

ngrauxqxpxxqxqxq

xxpxpxp

n

n

Multiplicação de polinômios

4 multiplicações1 adição

Page 20: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 20

Multiplicação de polinômios

2

2/4

nOnT

nOnTnT

Complexidade:

rlauxm

rlrlaux

m

rrr

lll

xr

nml

rrrr

qqppr

r

qpr

qpr

xrxrrxr

?

2/

É necessário resolver menos de quatro problemas

Page 21: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 21

Multiplicação de polinômios

aOTA

OT

cccnA

ccnA

cnAnA

cnnT

nnT

ncnTnTnOnTnT

1222

12

8/23

23

23

4/23

23

2/23

2/2/

23

2/32/3

Page 22: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 22

Multiplicação de polinômios

cnac

nAnnT

cn

ac

cac

cca

canA

n

n

n

n

nn

nn

232

232

2232

2232

23

123123

23

2log

2log

2

2log

22

2

log

loglog

loglog

Page 23: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 23

Multiplicação de polinômios

58.1

5849.1

)3(log

))(log3(log

log3log

22

22

222

222

232

2

22

22

2log

nOnT

cnnac

cnnac

cnac

cnac

cnacnT

n

n

n

Page 24: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 24

Multiplicação de matrizes

3

1

nO

bac

BAn

kjkkiij

nnnn

Multiplicação de matrizes

Hipótese: n=2k

Particionar A e B em quatro submatrizes n/2 x n/2

2222122122

2122112121

2212121112

2112111111

2221

1211

2221

1211

2221

1211

BABACBABACBABACBABAC

CC

CC

BB

BB

AA

AA

Page 25: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 25

Multiplicação de matrizesMultiplicação de matrizes

A · B: oito multiplicações de matrizes (n/2)Adicionar duas matrizes n/2 x n/2 : O(n2)

)()(

2)()2/(8

2)1()(

3

2

nOnT

nnOnT

nOnT

Page 26: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 26

Multiplicação de matrizes

)()()()(

)()()(

)()()(

22212212

12111121

221211

112122

221211

112221

22112211

BBAAVBBAAU

BAATBBASBBAR

BAAQBBAAP

Aumentar o número de adições de matrizes para diminuir o número de multiplicações: método de Strassen

UQRPC

SQC

TRC

VTSPC

22

21

12

11

7 multiplicações18 adições

Page 27: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 27

Multiplicação de matrizes

81.27log

7log4log7log4log

loglog

2

122

2

2

2222

2

2

747

)1(747

47

471

27

21)(

nOnO

ncn

cn

TannT

nOnT

nOnT

nn

kk

Page 28: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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?

1. Ordenar todos n pontos pelas coordenadas xi O(n log n)

Page 29: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 29

Problema do par mais próximo

2. Separar os pontos em duas metades, de acordo com a ordenação pelas coordenadas xi

P1 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}.

Page 30: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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)?

P1P2

d1

d2

= min {d1,d2}

Só é necessário calcular d se d < .

Só é necessário examinar uma faixa de pontos a distância da reta vertical que separa P1 e P2.

Page 31: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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. nOnO 2

para i =1 até #pontos_na_faixa-1 façapara j = i+1 até #pontos_na_faixa-1 faça se d(pi, pj) < então

d(pi, pj)

Como melhorar?

Page 32: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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çapara 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)

Page 33: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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).

Page 34: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 34

Problema do par mais próximo

• 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 .

Algoritmo 1:

T(n) = O(n log n) + 2.T(n/2) + O(1) + O(n) + O(n log n) + O(n)

Page 35: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 35

Problema do par mais próximo

2log

22log

42

2log

242

2

log2

2

2log2

2

21

2 nnnnbnTnT

nnbnTnT

nbnnTnT

nnnOnT

nOnT

nnOnT

kkbnnjkbnnnT

bnnnT

nbnnnTnT

k

j

k

j

jk

kk

jjj

jk

k

2

1

0

1

0

1

0

log

21

2log

2 com2

log2

22

2

Page 36: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 36

Problema do par mais próximo

• 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 .

Algoritmo 2:

T(n) = 2.T(n/2) + O(n) = O(n log n)

Page 37: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Algoritmos gulosos

Page 38: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 38

• 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

Algoritmos gulosos

Page 39: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 39

• Grafo não-orientado G(V, E): obter S V tal que:i. {u, v} E então uS ou vSii. |S| é mínima

Cobertura por nós mínima

2

1 3

5

4

5

2

1 3

4

|S| = 4

ordem dosvértices

maior grau(guloso)

2

1 3

5

4

|S| = 2

divisãoe conquista

2

1 3

5

4

|S| = 3

Page 40: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 40

• O algoritmo guloso obtém necessariamente a solução ótima?

Cobertura por nós mínima

Solução gulosa Solução ótima

Page 41: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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?

grau 1

grau n+1

grau n+2

n+2 nós

n+2 nós

n nós

A solução pode ser muito ruim!

%1002

222

nn

nnnnrelativoerro

Page 42: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

n

k

k

jjiln

TMR1 1

)(1

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.

Page 43: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 43

Armazenamento em fita

7 3 5 2 … 7 3 2 5 …

n

k

k

jijlTMR

TMRTMR

1 1

min min

446

5237237

377

449

2537537

377

Page 44: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 44

• Armazenar arquivos em ordem crescente de tamanhos• Algoritmo auxiliar: ordenar o vetor em O(n log n)

Numa solução ótima não existe

Supondo-se que existisse:

Trocando:

Armazenamento em fita

jjll jiji ':)'()(

2 3 5 7 …

Mostrar que o algoritmo é correto

}()2()1(1 1

)( .1.1. niii

n

k

k

jji llnlnl

A

jiji ljnljn )'()( 1'1

B

jiji ljnljn )'()( 11' B-A?

Page 45: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 45

Armazenamento em fita

0

).('

).'().'(

'...'.

')()'(

)'()(

)'()()'()(

ijijjiji

jiji

jijijiji

llblblbbjj

ljjljj

ljljljljAB

a troca diminuiria o custo.

Page 46: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 46

)0,(

,...,110

max

1 1

1

1

jj

n

j

n

jjjj

j

n

jjj

n

jjj

ca

bxaba

njx

bxa

xc

em qualquer solução ótima

Problema da mochila

Page 47: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 47

Problema da mochila

• Guloso 1: maior ganho primeiro• Guloso 2: menor volume primeiro• Guloso 3: maior densidade primeiro (densidade = ganho/volume)

Exemplo:

Objeto Ganho Volume1 25 182 24 153 15 10 total 64 43

Volume disponível na mochila = 20

Page 48: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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 = 20 - 18 = 2

• 15·x2 = 2 x2 = 2/15

• valor total: 25 + 2/15 · 24 = 28.2

x1 x2 x3 ganho

1 2/15 0 28.2

4/9 4/5 0 30.3

Enche a mochila muito rapidamente!

Page 49: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

0 2/3 1 31.0

0 4/5 4/5 31.2

0 1 1/2 31.5

guloso 1

guloso 2

guloso 3

i ci ai ci/ai

1 25 18 ~1.38 32 24 15 1.60 13 15 10 1.50 2b=20

Page 50: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

Page 51: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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.

25 pois 250,1:

24 pois24021103

1321

2

3

2

1

clucroxxxótimo

clucroxxx

Page 52: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 52

• 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ínimoe F

Árvore Geradora de Peso Mínimo

Page 53: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 53

8

Exemplos de árvores geradoras:

3

4 9

2

2

78

9

8

3

8

A B

CF

D E4 9

2

88

A B

CF

D E

Árvore Geradora de Peso Mínimo

Princípio do algoritmo: a aresta de menor peso sempre pertence à solução ótima

3

47

3

A B

CF

D E

8

Page 54: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 54

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

fimfim

Algoritmo de Kruskal

Page 55: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 55

c(e) e

2 (f,c)

2 (c,e)3 (a,b)3 (a,d)4 (a,f)7 (b,c)8 (b,e)8 (e,f)8 (c,d)9 (d,e)9 (b,f)

C(T) = 2 + 2 + 3 + 3 + 4 = 14

3

4 9

2

2

78

9

8

3

8

A

CF

D E

B

Exemplo

Page 56: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 56

6f5e4d3c2b

1aÁrvoreVértice

f c ?6 3

3f5e4d3c2b

1aÁrvoreVértice

c e ?3 5

5f5e4d5c2b

1aÁrvoreVértice

Exemplo

Page 57: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 57

a d ?1 4

5f5e4d5c4b

4aÁrvoreVértice

a f ?4 5

5f5e5d5c5b

5aÁrvoreVértice

b a ?2 1

5f5e4d5c1b

1aÁrvoreVértice

c e ?3 5

5f5e4d5c2b

1aÁrvoreVértice

Exemplo

Page 58: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 58

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)

Complexidade

Page 59: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 59

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

Estrutura de dados

Page 60: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 60

31 2 41 2 3

árvore mais baixa árvore mais alta

31 2 4

2

1 43 ...

...

Estrutura de dados

Page 61: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 61

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)

Complexidade

Page 62: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 62

• 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

4 9

2

2

78

9

8

3

8

A

CF

D E

B

Algoritmo de Prim

Page 63: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 63

• 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)

Algoritmo de Prim

Page 64: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 64

e

f c

a 3

4 9

2

2

78

9

8

3

8

d

b

e

2f2

c

4

3

d

a 3 b

Exemplo

Page 65: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 65

• 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 = 30B = 20C = 10

registros

A + B = 50 operações(A + B) + C = 60 operaçõesB + C = 30 operações(B + C) + A = 60 operações

Intercalação ótima de arquivos

Page 66: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 66

n4

n3

n2 n1

Intercalação ótima de arquivos

n1 + n2

n1 + n2 + n3

n1 + n2 + n3 + n4

3n1 + 3n2 + 2n3 + n4

Page 67: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 67

n4 n3 n2 n1

Intercalação ótima de arquivos

n1 + n2

n3 + n4

(n1 + n2)+ (n3 + n4)

2n1 + 2n2 + 2n3 + 2n4

Menores arquivos primeiro!

Page 68: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 68

• 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)

Intercalação ótima de arquivos

Page 69: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 69

• 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))

Intercalação ótima de arquivos

Page 70: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 70

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

Intercalação ótima de arquivos

Page 71: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 71

5 10 20 30 30L:1 2 3 4 5

GETNODET

LEAST (L) 1 LEAST (L) 2

L:15 20 30 30

6 3 4 5

5 10

Intercalação ótima de arquivos

Page 72: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 72

30 3035

15 20

5 10

35

15 20

5 10

60

30 30

Intercalação ótima de arquivos

Page 73: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 73

95

35

15 20

5 10

60

30 30

Intercalação ótima de arquivos

Page 74: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 74

n – 1 iteraçõesLista L ordenada pelos pesosLEAST O(1)INSERT O(n)

L organizada como um heapLEAST O(log n)INSERT O(log n)

O(n2)

O(n log n)

Prova por induçãoSe 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.

Intercalação ótima de arquivos

Page 75: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 75

Programação Dinâmica

Page 76: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 76

Motivação

• Problema: determinar o caminho mais curto de 1 a 12 no grafo abaixo

5

4

3

8

7

6

11

10

9

12116

9

7

3

2

4

2

7

11

11

8

654

3

5

6

4

2

5

2

1

2 4

5

9

18

15

7

5

7

7

2 0

• Procedimento backwards

Trajetória ótima de cada nó ao destino final

Page 77: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 77

Motivação

• Problema: determinar o caminho mais curto de 1 a 12 no grafo abaixo

5

4

3

8

7

6

11

10

9

1210

9

7

3

2

4

2

7

11

11

8

654

3

5

6

4

2

5

2

1

2 15

16

7

3

2

9

11

9

10

14 16

• Procedimento forward

Trajetória ótima do nó inicial até cada nó

Page 78: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 78

Motivação

• Problema: determinar o caminho mais curto de 1 a 12 no grafo abaixo

5

4

3

8

7

6

11

10

9

1210+1

6

9

7

3

2

4

2

7

11

11

8

654

3

5

6

4

2

5

2

1

2

7+99+7

14+2 16+0

• Combinação das trajetórias ótimas

Trajetória ótima através de cada nó

Page 79: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 79

Motivação

• Problema: determinar o caminho mais curto de 1 a 12 no grafo abaixo

5

4

3

8

7

6

11

10

9

121

9

7

3

2

4

2

7

11

11

8

654

3

5

6

4

2

5

2

1

2

10+7

Trajetória ótima através de cada nó

• Combinação das trajetórias ótimas

Page 80: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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”.

Page 81: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

Page 82: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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)

Page 83: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

Page 84: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 84

• 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.

Problema da mochila

• Caso (4): os itens não podem ser fracionados e no máximo uma unidade de cada item pode ser selecionada

njx

bxa

xc

j

n

jjj

j

n

jj

,...,1,1,01

1

: a sujeito

maximizar

Page 85: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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 é

.

k

jj xa1j

j

k

jj xc

1

Page 86: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

Page 87: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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).

Page 88: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

nkbucauyuyb;ku

kuuy

kkkk

k

,...,1;,...,0,)(),(max0,...,1,

0;0,0)(

11

Page 89: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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.

nkbucauyuyb;ku

kuuy

kkkk

k

,...,1;,...,0,)(),(max0,...,1,

0;0,0)(

11

Page 90: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 90

Problema da mochila

5,...,1},1,0{4233 :a sujeito

3223max

54321

54321

jxxxxxx

xxxxx

j

y5(4) =

Page 91: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 91

Problema da mochila

5,...,1},1,0{4233 :a sujeito

3223max

54321

54321

jxxxxxx

xxxxx

j

5,...,1},1,0{233 :a sujeito

3223max

54321

54321

jxbxxxxx

xxxxx

j

y5(b) =

Valor ótimo = maxb=0,...,4 {y5(b)}

Page 92: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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)

y0(0) y1(0) y2(0) y3(0) y4(0) y5(0)

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 93: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 93

Problema da mochila

y0(4)

y0(3)

y0(2)

y0(1)

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 94: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 94

Problema da mochila

-

-

-

-

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 95: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 95

Problema da mochila

- ?

- ?

- ?

- ?

0 ?

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 96: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 96

Problema da mochila

-

-

- -

- -

0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 97: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 97

Problema da mochila

-

- 3

- -

- -

0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 98: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 98

Problema da mochila

- -

- 3

- -

- -

0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 99: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 99

Problema da mochila

- -

- 3

- -

- -

0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 100: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 100

Problema da mochila

- - ?

- 3 ?

- - ?

- - ?

0 0 ?

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 101: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 101

Problema da mochila

- -

- 3

- -

- -

0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 102: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 102

Problema da mochila

- -

- 3

- - -

- - -

0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 103: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 103

Problema da mochila

- -

- 3

- - -

- - -

0 0 0

2

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 104: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 104

Problema da mochila

- -

- 3

- - -

- - -

0 0 0

0

2

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 105: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 105

Problema da mochila

- -

- 3 3

- - -

- - -

0 0 0

0

2

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 106: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 106

Problema da mochila

- - -

- 3 3

- - -

- - -

0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 107: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 107

Problema da mochila

- - -

- 3 3

- - -

- - -

0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 108: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 108

Problema da mochila

- - - ?

- 3 3 ?

- - - ?

- - - ?

0 0 0 ?

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 109: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 109

Problema da mochila

- - -

- 3 3

- - -

- - -

0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 110: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 110

Problema da mochila

- - -

- 3 3

- - -

- - - 2

0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 111: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 111

Problema da mochila

- - -

- 3 3

- - - -

- - - 2

0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 112: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 112

Problema da mochila

- - -

- 3 3

- - - -

- - - 2

0 0 0 0

2

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 113: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 113

Problema da mochila

- - -

- 3 3

- - - -

- - - 2

0 0 0 0

2

0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 114: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 114

Problema da mochila

- - -

- 3 3 3

- - - -

- - - 2

0 0 0 0

2

0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 115: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 115

Problema da mochila

- - - 5

- 3 3 3

- - - -

- - - 2

0 0 0 0

2

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 116: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 116

Problema da mochila

- - - 5

- 3 3 3

- - - -

- - - 2

0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 117: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 117

Problema da mochila

- - - 5 ?

- 3 3 3 ?

- - - - ?

- - - 2 ?

0 0 0 0 ?

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 118: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 118

Problema da mochila

- - - 5

- 3 3 3

- - - -

- - - 2

0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 119: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 119

Problema da mochila

- - - 5

- 3 3 3

- - - -

- - - 2

0 0 0 0 01

0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 120: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 120

Problema da mochila

- - - 5

- 3 3 3

- - - -

- - - 2 2

0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 121: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 121

Problema da mochila

- - - 5

- 3 3 3

- - - - 3

- - - 2 2

0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 122: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 122

Problema da mochila

- - - 5

- 3 3 3 3

- - - - 3

- - - 2 2

0 0 0 0 0

0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 123: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 123

Problema da mochila

- - - 5

- 3 3 3 3

- - - - 3

- - - 2 2

0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 124: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 124

Problema da mochila

- - - 5

- 3 3 3 3

- - - - 3

- - - 2 2

0 0 0 0 0

1

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 125: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 125

Problema da mochila

- - - 5

- 3 3 3 3

- - - - 3

- - - 2 2

0 0 0 0 0

1

0u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 126: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 126

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3

- - - 2 2

0 0 0 0 0

1

0u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 127: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 127

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3

- - - 2 2

0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 128: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 128

Problema da mochila

- - - 5 5 ?

- 3 3 3 3 ?

- - - - 3 ?

- - - 2 2 ?

0 0 0 0 0 ?

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 129: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 129

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3

- - - 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 130: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 130

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3

- - - 2 2

0 0 0 0 0 0

0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 131: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 131

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3

- - - 2 2 2

0 0 0 0 0 0

0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 132: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 132

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 133: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 133

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3

- - - 2 2 2

0 0 0 0 0 0

0

3

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 134: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 134

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

0

3

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 135: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 135

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 136: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 136

Problema da mochila

- - - 5 5

- 3 3 3 3

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

0

3

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 137: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 137

Problema da mochila

- - - 5 5

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

0

3

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 138: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 138

Problema da mochila

- - - 5 5

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 139: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 139

Problema da mochila

- - - 5 5

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

0

3

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 140: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 140

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

0

3

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 141: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 141

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

Page 142: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 142

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

y5(4) = 6

y5(3) = 5

y5(2) = 3

y5(1) = 2

y5(0) = 0

Page 143: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 143

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

y5(4) = 6

y5(3) = 5

y5(2) = 3

y5(1) = 2

y5(0) = 0

Page 144: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 144

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

y5(4) = 6

y5(3) = 5

y5(2) = 3

y5(1) = 2

y5(0) = 0

Page 145: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 145

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

y5(4) = 6

y5(3) = 5

y5(2) = 3

y5(1) = 2

y5(0) = 0

x5=1

Page 146: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 146

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

y5(4) = 6

y5(3) = 5

y5(2) = 3

y5(1) = 2

y5(0) = 0

x5=1x4=1

Page 147: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 147

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

y5(4) = 6

y5(3) = 5

y5(2) = 3

y5(1) = 2

y5(0) = 0

x5=1x4=1x3=1

Page 148: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 148

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

y5(4) = 6

y5(3) = 5

y5(2) = 3

y5(1) = 2

y5(0) = 0

x5=1x4=1x3=1x2=0

Page 149: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 149

Problema da mochila

- - - 5 5 6

- 3 3 3 3 5

- - - - 3 3

- - - 2 2 2

0 0 0 0 0 0

u = 4

u = 3

u = 2

u = 1

u = 0

k = 0 k = 1 k = 2 k = 3 k = 4 k = 5

y5(4) = 6

y5(3) = 5

y5(2) = 3

y5(1) = 2

y5(0) = 0

x5=1x4=1x3=1x2=0x1=0

Page 150: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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.

Page 151: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 151

Programação dinâmica

• Redução no número total de operações:

21 ... n-1 np “linhas”

A

B

Total de trajetórias de A a B: pn

Total de adições?

Cálculo exaustivo: n.pnProgramação

dinâmica:p + p.p.(n-1) + p n.p2

Cálculo da menortrajetória de A a B

Page 152: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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.

Page 153: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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.

Page 154: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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:

Page 155: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 155

Programação dinâmica

k c1(k) c2(k) c3(k)

0 0 0 0

1 3 1 2

2 7 2 4

3 11 4 6

4 12 8 8

Page 156: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 156

Programação dinâmica

• Estágio: – 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) = max0yx {ck(y) + Rk+1(x-y)}

Page 157: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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.

Page 158: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 158

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

Page 159: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 159

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

Page 160: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 160

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

Page 161: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 161

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

Page 162: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 162

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

Page 163: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 163

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

Page 164: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 164

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

4

Page 165: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 165

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

12

Page 166: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 166

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

1

Page 167: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 167

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10

Page 168: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 168

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

2

Page 169: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 169

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

20

Page 170: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 170

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

20

8

2

4

6

0

Page 171: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 171

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

20

8

2

4

6

0

8

Page 172: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 172

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

20

8

2

4

6

0

8

6

Page 173: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 173

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

20

8

2

4

6

0

8

6

4

Page 174: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 174

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

20

8

2

4

6

0

8

6

4

2

Page 175: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 175

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

20

8

2

4

6

0

8

6

4

2

0

Page 176: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 176

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

20

8

2

4

6

0

8

6

4

2

0

13

Page 177: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 177

Programação dinâmica

Estadoinicial:R1(4) = ?

Estadofinal:R4(0) = 0 Investime

nto 1Investime

nto 2Investime

nto 3

4

0

4

3

2

1

0

4

3

2

1

0

03

7

11

12

0

1

2

4

8

01

2

40

120

10 0

4

6

8

20

8

2

4

6

0

8

6

4

2

0

13

Solução ótima:projeto 1: 3 unidadesprojeto 2: 0 unidadesprojeto 3: 1 unidadeRetorno total = 13

Page 178: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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 novac(i) = custo anual de operação de uma máquina de idade it(i) = preço obtido na troca de uma máquina de idade ir(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.

Page 179: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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.

Page 180: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 180

Programação dinâmica

idade i 0 1 2 3 4 5 6

c(i) 10 13 20 40 70 100 110

t(i) - 32 21 11 5 0 0

r(i) - 25 17 8 0 0 0

Page 181: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 181

Programação dinâmica

• Estágio: – 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

Page 182: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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)}

Page 183: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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) = ?

Page 184: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 184

Programação dinâmica

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

Page 185: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 185

Programação dinâmica

2

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

Page 186: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 186

Programação dinâmica

2

Ano 1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

Page 187: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 187

Programação dinâmica

2

3

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

2039

Page 188: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 188

Programação dinâmica

2

3

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

2039

Page 189: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 189

Programação dinâmica

2

3

1

2

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

28

39 13

Page 190: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 190

Programação dinâmica

2

3

1

4

2

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

28

3949

13

Page 191: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 191

Programação dinâmica

2

3

1

4

2

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

28

3949

13

Page 192: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 192

Programação dinâmica

2

3

1

4

2

1

5

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

70

28

3949

55

13

Page 193: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 193

Programação dinâmica

2

3

1

4

2

1

5

3

2

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

70

28 28

3949

39

55

13 13

20

Page 194: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 194

Programação dinâmica

2

3

1

4

2

1

5

3

2

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

70

28 28

3949

39

55

13 13

20

Page 195: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 195

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

100

70

28 28

3949

39

55

13 13

20

60

Page 196: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 196

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

100

70

28 28 28

3949

39 3949

55

13 13 13

20 20

4060

Page 197: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 197

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

100

70

28 28 28

3949

39 3949

55

13 13 13

20 20

4060

Page 198: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 198

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1 1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28

3949

39 3949

55

13 13 13

20 20

4060

60

Page 199: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 199

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1

5

4

3

2

1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28 28

3949

39 39 39

49 4955

55

13 13 13 13

20 20 204040

7060

60

Page 200: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 200

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1

5

4

3

2

1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28 28

3949

39 39 39

49 4955

55

13 13 13 13

20 20 204040

7060

60

-25

-17

-8

-0

-0

-0

Page 201: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 201

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1

5

4

3

2

1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28 28

3949

39 39 39

49 4955

55

13 13 13 13

20 20 204040

7060

60

-25

-17

-8

-0

-0

-0

Page 202: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 202

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1

5

4

3

2

1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28 28

3949

39 39 39

49 4955

55

13 13 13 13

20 20 204040

7060

60

-25

-17

-8

-0

-0

-0

35

30

24

14

-4

Page 203: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 203

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1

5

4

3

2

1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28 28

3949

39 39 39

49 4955

55

13 13 13 13

20 20 204040

7060

60

-25

-17

-8

-0

-0

-0

35

30

24

14

-4

56

45

35

24

Page 204: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 204

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1

5

4

3

2

1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28 28

3949

39 39 39

49 4955

55

13 13 13 13

20 20 204040

7060

60

-25

-17

-8

-0

-0

-0

35

30

24

14

-4

56

45

35

24

79

63

48

Page 205: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 205

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1

5

4

3

2

1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28 28

3949

39 39 39

49 4955

55

13 13 13 13

20 20 204040

7060

60

-25

-17

-8

-0

-0

-0

35

30

24

14

-4

56

45

35

24

79

63

48

97

76

Page 206: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 206

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1

5

4

3

2

1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28 28

3949

39 39 39

49 4955

55

13 13 13 13

20 20 204040

7060

60

-25

-17

-8

-0

-0

-0

35

30

24

14

-4

56

45

35

24

79

63

48

97

76

115

Page 207: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 207

Programação dinâmica

2

3

1

4

2

1

5

3

2

1

6

4

3

2

1

5

4

3

2

1

7

Ano 1 Ano 2 Ano 3 Ano 4Ano N=5Ano 6

20

40

110

100

70

28 28 28 28

3949

39 39 39

49 4955

55

13 13 13 13

20 20 204040

7060

60

-25

-17

-8

-0

-0

-0

35

30

24

14

-4

56

45

35

24

79

63

48

97

76

115

Solução ótima: trocar a máquinanos anos 1, 2 e 4Custo total = 115

Page 208: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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.

Page 209: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

Page 210: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 210

Programação dinâmica

• Estágio:– 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))}

Page 211: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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)

Page 212: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

Page 213: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

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

Page 214: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 214

• 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 = 0Cij = + (i,j) ENão há ciclos negativos

Ri j

ciclo

Todos os caminhos mais curtos

Page 215: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 215

• 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.

Todos os caminhos mais curtos

– 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 dode k a j que k-1

Page 216: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 216

• A(i, j) = min {Cij,A’(i, j)}

• A’(i, j) = min {Ak-1(i,k) + Ak-1(k,j)} 1 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

Todos os caminhos mais curtos

Page 217: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 217

Exemplo:

para i = 1 até n façapara j = 1 até n faça

a(i,j) Cij

para k = 1 até n façapara i = 1 até n faça

para j = 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)

1 2

3

6

411

23

0 4 116 0 23 0

C =

Todos os caminhos mais curtos

Page 218: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 218

0 4 66 0 23 7 0

A2 =

0 4 116 0 23 0

A0 =0 4 116 0 23 7 0

A1 =

0 4 65 0 23 7 0

A3 =

Todos os caminhos mais curtos

Page 219: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 219

• Seqüência de matrizes A1,A2, ..., An

1. Parentetizar para definir a ordem em que as matrizes serão multiplicadas.2. Multiplicar as matrizes duas a duas segundo o algoritmo tradicional.

• Um produto de matrizes está completamente parentetizado1. se é uma matriz única2. 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 )

Encadeamento ótimo do produto de matrizes

Qual é a influência da ordem?

Page 220: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 220

Algoritmo

A: r q A B pqr operaçõesB: q r

Exemplo: A1A2A3

Matrix_Multiply (A, B)se colunas(A) linhas(B) então

errosenã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

A1: 10 x 100A2: 100 x 5A3: 5 x 50

( (A1A2)A3) 5.000 + 2.500 = 7.500(A1(A2A3)) 25.000 + 50.000 = 75.000

Page 221: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 221

Problema

• 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.

2),()(

1,1)( 1

1

nknPkP

nnP n

k

222211

k n-k

Parentetizar

k = 1, 2, ..., n-1

)1()( ncnP

2/3

421

1)(nn

nn

nCn

Page 222: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 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.

222222

Em vez de recursividade enfoque botton-up

)(2

2nOnn

problemas (pares)

Page 223: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 223

• 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+1 ... An

Caracterização da estrutura de uma solução ótima

222233

Ai...j = Ai ...Aj

A1 ... k Ak+1... n·

custo total = custo + custo

Page 224: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 224

Solução recursiva• Definir recursivamente o valor da função ótima em termos das

soluções dos subproblemas.• Subproblema: determinar o custo mínimo

Princípio da otimalidade

222244

m[i,j] de parentetizar Ai Ai+1...Aj para 1 i j n

custo ótimo : m[1,n]

Page 225: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 225

• m[i,j] = ?i = j: a cadeia é formada por uma só matriz m[i, j] = 0i < 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:

Princípio da otimalidade

222255

m[i,j] = m[i,k] + m[k+1, j] + Pi-1 Pk Pj

Ai...k Ak+1 ...j

Pi-1 Pk Pk Pj

Page 226: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 226

• 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

Princípio da otimalidade

222266

i k j

0,min

m[i,k] +m[k+1, j] + Pi-1 Pk Pj

i = ji < j

Page 227: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 227

Algoritmo

222277

Recursive_ Matrix_Chain(P, i, j)se i=j então

retorne 0m[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] qretorne m[i, j]

Page 228: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 228

Complexidade

222288

n > 1

1

1

1)2()()(2)(n

i

nOnOiTnT

)1)()1()()()(

)1()1(1

1

n

k

OknTKTnT

OT

i = 1, 2, ..., n-1 T(i)

T(K)

T(n-k)

n = 1

Page 229: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 229

Princípio da otimalidade

222299

i k j

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

Page 230: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 230

• Preencher a matriz m como resolvendo-se o problema de parentetização em matrizes cujo comprimento aumenta:

• m[i, j] =

onde i k j

Princípio da otimalidade

230230

i = ji < j

0,min

m[i,k] +m[k+1, 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] 0Em seguida: m[i, i+1] i = 1, 2, ..., n-1custos mínimos para cadeias de l =2 matrizes

Page 231: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 231

Princípio da otimalidade

231231

Matrix_Chain_Order(P)n length(P) - 1para i 1 até n faça

m[1, i] 0para l 2 até n faça

para i 1 até n-l+1 façaj i + l – 1m[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] qs[i, j] k

retorne m, s

Matriz A: tem dimensões Pi-1 Pi

A entrada é uma seqüência (P0, P1, ..., Pn) = P de comprimento n+1

Page 232: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 232

Exemplo

232232

0 0 0 0 0 01

2

3

4

5

6 1

2

3

4

5

6

m

A1 A2 A3 A4 A5 A6

15.125j i

A1 = 30 x 35 A4 = 5 x 10A2 = 35 x 15 A5 = 10 x 20A3 = 15 x 5 A6 = 20 x 25

T(n) = O(n3)

Page 233: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 233

Exemplo

233233

A[1, 6] = 3 (A1 A2 A3) (A4 A5 A6)

A[1, 3] = 1 A[4, 6] = 5( (A1 ( A2 A3) ) ( (A4 A5 ) A6) )

1 2 3 4 52

3

4

5

6 1

2

3

4

5

s

j i

1 3 3 5

3 3 3

3 3

3

Page 234: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 234

Algoritmo

232344

Lookup_Chain(P, i, j)se m[i, j] < então

retorne m[i, j]se i = j então

m[i, j] 0else 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ãom[i, j] q

retorne m[i, j]Cada m[i, j] é preenchido em uma chamada a Lookup_Chain. Cada Chamada é O(n) T(n) = O(n3)

Page 235: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 235

Algoritmo

232355

Matrix_Chain_2(P)n length [P] – 1para i 1 até n faça

para j 1 até n faça m[i, j]

retorne Lookup_Chain (P, 1, n)

• 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.

Page 236: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 236

Exemplo

232366

i k j

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

Page 237: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 237

Exemplo

232377

i k j

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

Page 238: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 238

Exemplo

232388

i k j

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)

Page 239: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 239

Algoritmo

239239

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

Page 240: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 240

Subseqüência mais longa

240240

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)

Page 241: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 241

Subseqüência mais longa

241241

• 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: (1) se Xm = Yn, então Zk = Xm = Yn e Zk-1 é uma SML de Xm-1 e Ym-1

(2) se Xm Yn, então:(a) Zk Xm Z = SML (Xm-1 , Y)(b) Zk Yn Z = SML (X , Yn-1)

Page 242: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 242

Subseqüência mais longa

242242

• 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)

Page 243: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 243

Recorrência

243243

• 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 = 0c[i-1, j-1] + 1, i, j > 0 xi = yj

c[i, j-1], max i, j > 0 xi yj

c[i-1, j]

Page 244: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 244

Algoritmo recursivo: exponencial

244244

• 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]

Page 245: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 245

Exemplo

245245

0 1 2 3 4 5 6yi B D C A B A

0 Xi 0 0 0 0 0 0 0

1 A 0 0 0 0 1 1 1

2 B 0 1 1 1 1 2 2

3 C 0 1 1 2 2 2 2

4 B 0 1 1 2 2 3 3

5 D 0 1 2 2 2 3 3

6 A 0 1 2 2 3 3 4

7 B 0 1 2 2 3 4 4

Page 246: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 246

Exemplo

246246

0 1 2 3 4 5 6yi B D C A B A

0 Xi 0 0 0 0 0 0 0

1 A 0 0 0 0 1 1 1

2 B 0 1 1 1 1 2 2

3 C 0 1 1 2 2 2 2

4 B 0 1 1 2 2 3 3

5 D 0 1 2 2 2 3 3

6 A 0 1 2 2 3 3 4

7 B 0 1 2 2 3 4 4

Page 247: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 247

Algoritmo

247247

SML(X, Y)m compr [x]n compr [y]para i 1 até m faça c[i, 0] 0para j 1 até n faça c[0, j] 0para i 1 até m faça

para j 1 até n façase 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, bT(n) = O(m · n)

j - 1 ji -1

i

Page 248: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 248

Programação dinâmica estocástica

248248

• 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 IIIII

Page 249: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 249

Programação dinâmica estocástica

249249

• Três jogadas Qual roleta escolher a cada rodada?

I II

III

1/2 10

1/2 10 C

D

1/4 0

3/4 12

1/2 16

1/2 10FE

1/4 36

1/4 12

1/6 0

B

B

3/4 4

5/6 6

Page 250: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 250

Programação dinâmica estocástica

250250

A

B

C

D

E

F

6

5

10

915

13

K = 3K = 2

A

B

1/6 · 0 + 5/6 · 6 = 5

1/4 · 12 + 3/4 · 4 = 6

I

III

II

III

II

I I

II

III

I

Page 251: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 251

Programação dinâmica estocástica

251251

A

B

C

D

E

F

6

5

10

915

13

K = 1K = 2

1/6 · 0 + 5/6 · 6 = 5

1/4 · 12 + 3/4 · 4 = 6

6

10

15

I

III

II

III

II

A

BI I

II

III

I

Page 252: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 252

Programação dinâmica estocástica

252252

A

B

C

D

E

F

12

4

10

15

K = 1

I: A 1/4 · (12 + 6) + 3/4 · (4 + 10) = 15

6

10

6

K = 0

I: B 1/6 · () + 6) + 5/6 · (6 + 15) = 18.5

I

III

II

III

II

I

Page 253: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 253

Programação dinâmica estocástica

253253

A

B

C

D

E

F

12

4

10

25.5

15

K = 1

I: A 1/4 · (12 + 6) + 3/4 · (4 + 10) = 15

6

10

6

K = 2

I: B 1/6 · () + 6) + 5/6 · (6 + 15) = 18.5

15

27.8

22.8

18

18.5

I

III

II

I

III

II

Page 254: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 254

Lucro esperado

254254

A

B

C

D

E

F 38.3

27.8

K = 0 I – B

II – D

III – E

22.8

18.5

27.7

40.5

35.3

30.6

31.2

K = 1 I – B

II – D

III – E

K = 1 I – A

II – C

III – E

I

III

II

I

III

II

Page 255: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 255

Lucro esperado

255255

• 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

7.355.40313.35

312.31

31

• Lucro esperado:

Page 256: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 256

Qual o maior ganho que pode ser obtido com esta estratégia?

256256

I

II

III

I I

II

III

I

II

III

II

III

B 0

6

D0

12

E36

8

B 0

6

D 012

E36

8

A 12

C

10

12

E36

8

4

10

54 42 12

60 48 10

78 48 36

5/96

3/64

5/24

3/16

1/4

1

5/96 1/16 1/4 Lucro máximo = 78 probabilidade = 1/3 + 5/96 = 5/288Lucro mínimo = 4

probabilidade = 1/144

Page 257: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 257

Programação dinâmica estocástica

ECA

EDB

EDB

,,

257257

• 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?

7.355.40313.35

312.31

31

Page 258: Parte 3 Técnicas de projeto de algoritmos. Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro2 Divisão e conquista Algoritmos gulosos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 258

Como joga um jogador que se considera

258258

1. Completamente azarado ?(conservador)

2. Completamente sortudo ?(arriscado)