• Nenhum resultado encontrado

Mais programação dinâmica

N/A
N/A
Protected

Academic year: 2022

Share "Mais programação dinâmica"

Copied!
133
0
0

Texto

(1)

Mais programação dinâmica

CLRS 15.4

= “recursão–com–tabela”

= transformação inteligente de recursão em iteração

(2)

Subsequências

hz1, . . . ,zkiésubsequênciadehx1, . . . ,xmi se existem índicesi1<· · ·<ik tais que

z1=xi1 . . . zk =xik

EXEMPLOS:

h5,9,2,7ié subsequência deh9,5,6,9,6,2,7,3i

hA,A,D,A,Aié subsequência dehA, B, R,A, C, A,D,A, B, R,Ai

A A D A A

| | | | |

A B R A C A D A B R A

Análise de Algoritmos — 2º sem 2018 2 / 134

(3)

Exercício

Problema:Decidir seZ[1. .m]é subsequência deX[1. .n]

SUB-SEQ(Z,m,X,n) 1 i←m

2 j ←n

3 enquantoi ≥1ej≥1faça 4 seZ[i] =X[j]

5 entãoi←i−1 6 j←j−1

7 sei≥1

8 então devolva“não é subsequência” 9 senão devolva“é subsequência”

(4)

Exercício

Problema:Decidir seZ[1. .m]é subsequência deX[1. .n] SUB-SEQ(Z,m,X,n)

1 i←m 2 j ←n

3 enquantoi ≥1ej≥1faça 4 seZ[i] =X[j]

5 entãoi←i−1 6 j←j−1

7 sei≥1

8 então devolva“não é subsequência”

9 senão devolva“é subsequência”

Análise de Algoritmos — 2º sem 2018 4 / 134

(5)

Exercício

Problema:Decidir seZ[1. .m]é subsequência deX[1. .n] SUB-SEQ(Z,m,X,n)

1 i←m 2 j ←n

3 enquantoi ≥1ej≥1faça 4 seZ[i] =X[j]

5 entãoi←i−1 6 j←j−1

7 sei≥1

8 então devolva“não é subsequência”

9 senão devolva“é subsequência”

Consumo de tempo éO(n)eÒ(min{m,n}).

(6)

Exercício

Problema:Decidir seZ[1. .m]é subsequência deX[1. .n] SUB-SEQ(Z,m,X,n)

1 i←m 2 j ←n

3 enquantoi ≥1ej≥1faça 4 seZ[i] =X[j]

5 entãoi←i−1 6 j←j−1

7 sei≥1

8 então devolva“não é subsequência”

9 senão devolva“é subsequência”

Invariantes:

(i0)Z[i+1. .m]é subsequência deX[j+1. .n]

(i1)Z[i. .m]nãoé subsequência deX[j+1. .n]

Análise de Algoritmos — 2º sem 2018 6 / 134

(7)

Subsequência comum máxima

Zésubseq comumdeX eY

seZé subsequência de X e de Y

ssco=subseq comum

Exemplos: X = A B CB D A B Y=B DCA BA ssco = B C A

Outra ssco =B D A B

(8)

Subsequência comum máxima

Zésubseq comumdeX eY

seZé subsequência de X e de Y

ssco=subseq comum

Exemplos: X = AB CB DAB Y=BDCA BA ssco =B C A

Exemplos: X = A B CB D A B Y=B DCA BA ssco = B C A

Outra ssco =B D A B

Análise de Algoritmos — 2º sem 2018 8 / 134

(9)

Subsequência comum máxima

Zésubseq comumdeX eY

seZé subsequência de X e de Y

ssco=subseq comum

Exemplos: X = A B CB D A B Y=B DCA BA ssco = B C A

Outra ssco =B D A B

(10)

Problema

Problema: Encontrar umassco máximadeX eY.

Exemplos: X = AB CB DA B Y=BDC A BA ssco = B C A

sscomaximal= A B A sscomáxima=B C A B Outra ssco máxima = B D A B

LCS=LongestCommonSubsequence

Análise de Algoritmos — 2º sem 2018 10 / 134

(11)

di ff

> more abracadabra A

B R A C A D A B R A

> more yabbadabbadoo Y

A B B A D A B B A D D O

(12)

di ff -u abracadabra yabbadabbadoo

+Y A B -R -A -C +B A D A B -R +B A +D +O +O

Análise de Algoritmos — 2º sem 2018 12 / 134

(13)

Subestrutura ótima

Suponha queZ[1. .k]éssco máximadeX[1. .m]eY[1. .n].

I SeX[m] =Y[n],

entãoZ[k] =X[m] =Y[n]e

Z[1. .k−1]é ssco máxima deX[1. .m−1]eY[1. .n−1].

I SeX[m],Y[n],

entãoZ[k],X[m]implica que

Z[1. .k]é ssco máxima deX[1. .m−1]eY[1. .n].

I SeX[m],Y[n],

entãoZ[k],Y[n]implica que

Z[1. .k]é ssco máxima deX[1. .m]eY[1. .n−1].

(14)

Subestrutura ótima

Suponha queZ[1. .k]éssco máximadeX[1. .m]eY[1. .n].

I SeX[m] =Y[n],

entãoZ[k] =X[m] =Y[n]e

Z[1. .k−1]é ssco máxima deX[1. .m−1]eY[1. .n−1].

I SeX[m],Y[n],

entãoZ[k],X[m]implica que

Z[1. .k]é ssco máxima deX[1. .m−1]eY[1. .n].

I SeX[m],Y[n],

entãoZ[k],Y[n]implica que

Z[1. .k]é ssco máxima deX[1. .m]eY[1. .n−1].

Análise de Algoritmos — 2º sem 2018 14 / 134

(15)

Subestrutura ótima

Suponha queZ[1. .k]éssco máximadeX[1. .m]eY[1. .n].

I SeX[m] =Y[n],

entãoZ[k] =X[m] =Y[n]e

Z[1. .k−1]é ssco máxima deX[1. .m−1]eY[1. .n−1].

I SeX[m],Y[n],

entãoZ[k],X[m]implica que

Z[1. .k]é ssco máxima deX[1. .m−1]eY[1. .n].

I SeX[m],Y[n],

entãoZ[k],Y[n]implica que

Z[1. .k]é ssco máxima deX[1. .m]eY[1. .n−1].

(16)

Simplificação

Problema: encontrar ocomprimentode uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i]eY[1. .j]

Recorrência: c[0,j] =c[i,0] =0

c[i,j] =c[i−1,j−1] +1 seX[i] =Y[j]

c[i,j] =max(c[i,j−1],c[i−1,j])seX[i],Y[j]

Análise de Algoritmos — 2º sem 2018 16 / 134

(17)

Simplificação

Problema: encontrar ocomprimentode uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i]eY[1. .j]

Recorrência: c[0,j] =c[i,0] =0

c[i,j] =c[i−1,j−1] +1 seX[i] =Y[j]

c[i,j] =max(c[i,j−1],c[i−1,j])seX[i],Y[j]

(18)

Simplificação

Problema: encontrar ocomprimentode uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i]eY[1. .j]

Recorrência:

c[0,j] =c[i,0] =0

c[i,j] =c[i−1,j−1] +1 seX[i] =Y[j]

c[i,j] =max(c[i,j−1],c[i−1,j])seX[i],Y[j]

Análise de Algoritmos — 2º sem 2018 18 / 134

(19)

Simplificação

Problema: encontrar ocomprimentode uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i]eY[1. .j]

Recorrência:

c[0,j] =c[i,0] =0

c[i,j] =c[i−1,j−1] +1 seX[i] =Y[j]

c[i,j] =max(c[i,j−1],c[i−1,j])seX[i],Y[j]

(20)

Simplificação

Problema: encontrar ocomprimentode uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i]eY[1. .j]

Recorrência:

c[0,j] =c[i,0] =0

c[i,j] =c[i−1,j−1] +1 seX[i] =Y[j]

c[i,j] =max(c[i,j−1],c[i−1,j])seX[i],Y[j]

Análise de Algoritmos — 2º sem 2018 20 / 134

(21)

Algoritmo recursivo

Devolve o comprimento de uma ssco máxima deX[1. .i]eY[1. .j].

REC-LCS-LENGTH(X,i,Y,j)

1 sei=0ouj=0então devolva0 2 seX[i] =Y[j]

3 entãoc[i,j]←REC-LCS-LENGTH(X,i−1,Y,j−1) +1 4 senãoq1←REC-LCS-LENGTH(X,i−1,Y,j)

5 q2←REC-LCS-LENGTH(X,i,Y,j−1) 6 seq1≥q2

7 entãoc[i,j]←q1 8 senãoc[i,j]←q2 9 devolvac[i,j]

(22)

Consumo de tempo

T(m,n) := número de comparações feitas por REC-LCS-LENGTH(X,m,Y,n)no pior caso

Recorrência T(0,n) =0 T(m,0) =0

T(m,n)≥T(m−1,n) +T(m,n−1) +1 paran≥1 em≥1

A que classeÒpertenceT(m,n)?

Análise de Algoritmos — 2º sem 2018 22 / 134

(23)

Consumo de tempo

T(m,n) := número de comparações feitas por REC-LCS-LENGTH(X,m,Y,n)no pior caso Recorrência

T(0,n) =0 T(m,0) =0

T(m,n)≥T(m−1,n) +T(m,n−1) +1 paran≥1 em≥1

A que classeÒpertenceT(m,n)?

(24)

Consumo de tempo

T(m,n) := número de comparações feitas por REC-LCS-LENGTH(X,m,Y,n)no pior caso Recorrência

T(0,n) =0 T(m,0) =0

T(m,n)≥T(m−1,n) +T(m,n−1) +1 paran≥1 em≥1

A que classeÒpertenceT(m,n)?

Análise de Algoritmos — 2º sem 2018 24 / 134

(25)

Recorrência

Note queT(m,n) =T(n,m)paran =0,1, . . .em=0,1, . . ..

Sejak :=min{m,n}. Temos que

T(m,n)≥T(k,k)≥S(k),

onde

S(0) =0

S(k) =2S(k−1) +1 parak =1,2, . . .

S(k)éÊ(2k)⇒T(m,n)éÒ(2min{m,n}) T(m,n)éexponecial

(26)

Recorrência

Note queT(m,n) =T(n,m)paran =0,1, . . .em=0,1, . . ..

Sejak :=min{m,n}. Temos que

T(m,n)≥T(k,k)≥S(k),

onde

S(0) =0

S(k) =2S(k−1) +1 parak =1,2, . . .

S(k)éÊ(2k)⇒T(m,n)éÒ(2min{m,n}) T(m,n)éexponecial

Análise de Algoritmos — 2º sem 2018 26 / 134

(27)

Recorrência

Note queT(m,n) =T(n,m)paran =0,1, . . .em=0,1, . . ..

Sejak :=min{m,n}. Temos que

T(m,n)≥T(k,k)≥S(k),

onde

S(0) =0

S(k) =2S(k−1) +1 parak =1,2, . . .

S(k)éÊ(2k)⇒T(m,n)éÒ(2min{m,n})

T(m,n)éexponecial

(28)

Recorrência

Note queT(m,n) =T(n,m)paran =0,1, . . .em=0,1, . . ..

Sejak :=min{m,n}. Temos que

T(m,n)≥T(k,k)≥S(k),

onde

S(0) =0

S(k) =2S(k−1) +1 parak =1,2, . . .

S(k)éÊ(2k)⇒T(m,n)éÒ(2min{m,n}) T(m,n)éexponecial

Análise de Algoritmos — 2º sem 2018 28 / 134

(29)

Conclusão

O consumo de tempo do algoritmoREC-LEC-LENGTHé Ò(2min{m,n}).

(30)

Programação dinâmica

Cada subproblema, comprimento de uma ssco máxima de X[1. .i] e Y[1. .j],

é resolvidouma sóvez.

Em que ordem calcular os componentes da tabelac?

Para calcularc[4,6]preciso de . . .

c[4,5],c[3,6]e dec[3,5].

Calcule todos osc[i,j]comi=1ej=0,1, . . . ,n, depois todos comi=2ej=0,1, . . . ,n, depois todos comi=3ej=0,1, . . . ,n, etc.

Análise de Algoritmos — 2º sem 2018 30 / 134

(31)

Programação dinâmica

Cada subproblema, comprimento de uma ssco máxima de X[1. .i] e Y[1. .j],

é resolvidouma sóvez.

Em que ordem calcular os componentes da tabelac?

Para calcularc[4,6]preciso de . . . c[4,5],c[3,6]e dec[3,5].

Calcule todos osc[i,j]comi=1ej=0,1, . . . ,n, depois todos comi=2ej=0,1, . . . ,n, depois todos comi=3ej=0,1, . . . ,n, etc.

(32)

Programação dinâmica

Cada subproblema, comprimento de uma ssco máxima de X[1. .i] e Y[1. .j],

é resolvidouma sóvez.

Em que ordem calcular os componentes da tabelac?

Para calcularc[4,6]preciso de . . . c[4,5],c[3,6]e dec[3,5].

Calcule todos osc[i,j]comi=1ej=0,1, . . . ,n, depois todos comi=2ej=0,1, . . . ,n, depois todos comi=3ej=0,1, . . . ,n, etc.

Análise de Algoritmos — 2º sem 2018 32 / 134

(33)

Programação dinâmica

1 2 3 4 5 6 7 8 j

1 0 0 0 0 0 0 0 0

2 0

3 0 ? ?

4 0 ? ??

5 0

6 0

7 0

8 0

(34)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 ??

B 2 0 C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 34 / 134

(35)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 ??

B 2 0 C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

(36)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 ??

B 2 0 C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 36 / 134

(37)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 ??

B 2 0 C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

(38)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 ??

B 2 0 C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 38 / 134

(39)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 ??

B 2 0 C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

(40)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 ??

C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 40 / 134

(41)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 ??

C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

(42)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 ??

C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 42 / 134

(43)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 ??

C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

(44)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 ??

C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 44 / 134

(45)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 ??

C 3 0 B 4 0 D 5 0 A 6 0 B 7 0

(46)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 ??

B 4 0 D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 46 / 134

(47)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 ??

B 4 0 D 5 0 A 6 0 B 7 0

(48)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 ??

B 4 0 D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 48 / 134

(49)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 ??

B 4 0 D 5 0 A 6 0 B 7 0

(50)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 ??

B 4 0 D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 50 / 134

(51)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 ??

B 4 0 D 5 0 A 6 0 B 7 0

(52)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 ??

D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 52 / 134

(53)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 ??

D 5 0 A 6 0 B 7 0

(54)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 ??

D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 54 / 134

(55)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 ??

D 5 0 A 6 0 B 7 0

(56)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 ??

D 5 0 A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 56 / 134

(57)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 ??

D 5 0 A 6 0 B 7 0

(58)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 ??

A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 58 / 134

(59)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 ??

A 6 0 B 7 0

(60)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 ??

A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 60 / 134

(61)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 ??

A 6 0 B 7 0

(62)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 ??

A 6 0 B 7 0

i

Análise de Algoritmos — 2º sem 2018 62 / 134

(63)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 ??

A 6 0 B 7 0

(64)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 ??

B 7 0 i

Análise de Algoritmos — 2º sem 2018 64 / 134

(65)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 ??

B 7 0

(66)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 ??

B 7 0 i

Análise de Algoritmos — 2º sem 2018 66 / 134

(67)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 ??

B 7 0

(68)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 3 ??

B 7 0 i

Análise de Algoritmos — 2º sem 2018 68 / 134

(69)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 3 3 ??

B 7 0

(70)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 3 3 4

B 7 0 ??

i

Análise de Algoritmos — 2º sem 2018 70 / 134

(71)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 3 3 4

B 7 0 1 ??

(72)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 3 3 4

B 7 0 1 2 ??

i

Análise de Algoritmos — 2º sem 2018 72 / 134

(73)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 3 3 4

B 7 0 1 2 2 ??

(74)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 3 3 4

B 7 0 1 2 2 3 ??

i

Análise de Algoritmos — 2º sem 2018 74 / 134

(75)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 3 3 4

B 7 0 1 2 2 3 4 ??

(76)

Simulação

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 0 0 0 0 0 0 0

A 1 0 0 0 0 1 1 1

B 2 0 1 1 1 1 2 2

C 3 0 1 1 2 2 2 2

B 4 0 1 1 2 2 3 3

D 5 0 1 2 2 2 3 3

A 6 0 1 2 2 3 3 4

B 7 0 1 2 2 3 4 4

i

Análise de Algoritmos — 2º sem 2018 76 / 134

(77)

Algoritmo de programação dinâmica

Devolve o comprimento de

uma ssco máxima deX[1. .m]eY[1. .n].

LEC-LENGTH(X,m,Y,n)

1 parai←0atémfaçac[i,0]←0 2 paraj←1aténfaçac[0,j]←0 3 parai←1atémfaça

4 paraj ←1atén faça 5 seX[i] =Y[j]

6 entãoc[i,j]←c[i−1,j−1] +1 7 senão sec[i−1,j]≥c[i,j−1]

8 entãoc[i,j]←c[i−1,j] 9 senãoc[i,j]←c[i,j−1]

10 devolvac[m,n]

Consumo de tempo:O(mn)

(78)

Algoritmo de programação dinâmica

Devolve o comprimento de

uma ssco máxima deX[1. .m]eY[1. .n].

LEC-LENGTH(X,m,Y,n)

1 parai←0atémfaçac[i,0]←0 2 paraj←1aténfaçac[0,j]←0 3 parai←1atémfaça

4 paraj ←1atén faça 5 seX[i] =Y[j]

6 entãoc[i,j]←c[i−1,j−1] +1 7 senão sec[i−1,j]≥c[i,j−1]

8 entãoc[i,j]←c[i−1,j] 9 senãoc[i,j]←c[i,j−1]

10 devolvac[m,n] Consumo de tempo:O(mn)

Análise de Algoritmos — 2º sem 2018 78 / 134

(79)

Conclusão

O consumo de tempo do algoritmoLEC-LENGTHéÊ(mn).

(80)

Subsequência comum máxima

Y B D C A B A

X 0 1 2 3 4 5 6 j

0 ? ? ? ? ? ? ?

A 1 ? ← ← ← - ↑ -

B 2 ? - ↑ ↑ ← - ↑

C 3 ? ← ← - ↑ ← ←

B 4 ? - ← ← ← - ↑

D 5 ? ← - ← ← ← ←

A 6 ? ← ← ← - ← -

B 7 ? - ← ← ← - ←

Análise de Algoritmos — 2º sem 2018i 80 / 134

(81)

Algoritmo de programação dinâmica

LEC-LENGTH(X,m,Y,n)

1 parai←0atémfaçac[i,0]←0 2 paraj←1aténfaçac[0,j]←0 3 parai←1atémfaça

4 paraj ←1atén faça 5 seX[i] =Y[j]

6 entãoc[i,j]←c[i−1,j−1] +1

7 b[i,j]←“-”

8 senão sec[i−1,j]≥c[i,j−1]

9 entãoc[i,j]←c[i−1,j]

10 b[i,j]←“↑”

11 senãoc[i,j]←c[i,j−1]

12 b[i,j]←“←”

13 devolvac eb

Consumo de tempo:O(mn)

(82)

Algoritmo de programação dinâmica

LEC-LENGTH(X,m,Y,n)

1 parai←0atémfaçac[i,0]←0 2 paraj←1aténfaçac[0,j]←0 3 parai←1atémfaça

4 paraj ←1atén faça 5 seX[i] =Y[j]

6 entãoc[i,j]←c[i−1,j−1] +1

7 b[i,j]←“-”

8 senão sec[i−1,j]≥c[i,j−1]

9 entãoc[i,j]←c[i−1,j]

10 b[i,j]←“↑”

11 senãoc[i,j]←c[i,j−1]

12 b[i,j]←“←”

13 devolvac eb Consumo de tempo:O(mn)

Análise de Algoritmos — 2º sem 2018 82 / 134

(83)

Get-LCS

GET-LCS(X,m,n,b,máxcomp) 1 k←máxcomp

2 i←m 3 j←n

4 enquantoi>0ej>0faça 5 seb[i,j] =“-”

6 entãoZ[k]←X[i]

7 k ←k−1 i←i−1 j←j−1 8 senão seb[i,j] =“←”

9 entãoi←i−1

10 senãoj ←j−1

11 devolvaZ

Consumo de tempo éO(m+n)eÒ(min{m,n}).

(84)

Exercícios

Exercício 20.A

Escreva um algoritmo para decidir sehz1, . . . ,zkié subsequência dehx1, . . . ,xmi. Prove rigorosamente que o seu algoritmo está correto.

Exercício 20.B

Suponha que os elementos de uma sequênciaha1, . . . ,anisão distintos dois a dois. Quantas subsequências tem a sequência?

Exercício 20.C

Uma subsequência crescenteZde uma sequênciaXe émáximase não existe outra subsequência crescente mais longa. A subsequênciah5,6,9ideh9,5,6,9,6,2,7ié máxima? Dê uma sequência crescente máxima deh9,5,6,9,6,2,7i. Mostre que o algoritmo “guloso” óbvio não é capaz, em geral, de encontrar uma subsequência crescente máxima de uma sequência dada.

(Algoritmo guloso óbvio: escolha o menor elemento deX; a partir daí, escolha sempre o próximo elemento deXque seja maior ou igual ao último escolhido.)

Exercício 20.D

Escreva um algoritmo de programação dinâmica para resolver o problema da subsequência crescente máxima.

Análise de Algoritmos — 2º sem 2018 84 / 134

(85)

Mais exercícios

Exercício 20.E[CLRS 15.4-5]

Mostre como o algoritmo da subsequência comum máxima pode ser usado para resolver o problema da subsequência crescente máxima de uma sequência numérica. Dê uma delimitação justa, em notaçãoÊ, do consumo de tempo de sua solução.

Exercício 20.F[Printing neatly. CLRS 15-2]

Considere a sequênciaP1,P2, . . . ,Pnde palavras que constitui um parágrafo de texto. A palavraPitemlicaracteres.

Queremos imprimir as palavras em linhas, na ordem dada, de modo que cada linha tenha no máximoMcaracteres. Se uma determinada linha contém as palavrasPi,Pi+1, . . . ,Pj(comij) e há exatamente um espaço entre cada par de palavras consecutivas, o número de espaços no fim da linha é

M(li+1+li+1+1+· · ·+1+lj).

É claro que não devemos permitir que esse número seja negativo. Queremos minimizar, com relação a todas as linhas exceto a última, a soma dos cubos dos números de espaços no fim de cada linha. (Assim, se temos linhas 1,2, . . . ,Lebpespaços no fim da linhap, queremos minimizarb3

1+b3 2+· · ·+b3

L1).

Dê um exemplo para mostrar que algoritmos inocentes não resolvem o problema. Dê um algoritmo de programação dinâmica que resolva o problema. Qual a “optimal substructure property” para esse problema? Faça uma análise do consumo de tempo do algoritmo.

(86)

Mais programação dinâmica

KT 6.4

Aproveite para olhar todo o Cap 6 do KT, que é sobre programação dinâmica.

= “recursão–com–tabela”

= transformação inteligente de recursão em iteração

Análise de Algoritmos — 2º sem 2018 86 / 134

(87)

Mochila

Dados dois vetoresx[1. .n]ew[1. .n], denotamos porx·w oproduto escalar

w[1]x[1] +w[2]x[2] +· · ·+w[n]x[n].

Suponha dado um número inteiro não-negativoW e vetores positivosw[1. .n]ev[1. .n].

Umamochilaé qualquer vetorx[1. .n]tal que

x·w≤W e 0≤x[i]≤1 para todoi

Ovalorde uma mochila é o númerox·v. Uma mochila éótimase tem valor máximo.

(88)

Mochila

Dados dois vetoresx[1. .n]ew[1. .n], denotamos porx·w oproduto escalar

w[1]x[1] +w[2]x[2] +· · ·+w[n]x[n].

Suponha dado um número inteiro não-negativoW e vetores positivosw[1. .n]ev[1. .n].

Umamochilaé qualquer vetorx[1. .n]tal que

x·w ≤W e 0≤x[i]≤1 para todoi

Ovalorde uma mochila é o númerox·v. Uma mochila éótimase tem valor máximo.

Análise de Algoritmos — 2º sem 2018 88 / 134

(89)

Mochila

Dados dois vetoresx[1. .n]ew[1. .n], denotamos porx·w oproduto escalar

w[1]x[1] +w[2]x[2] +· · ·+w[n]x[n].

Suponha dado um número inteiro não-negativoW e vetores positivosw[1. .n]ev[1. .n].

Umamochilaé qualquer vetorx[1. .n]tal que

x·w ≤W e 0≤x[i]≤1 para todoi

Ovalorde uma mochila é o númerox·v.

Uma mochila éótimase tem valor máximo.

(90)

Problema booleano da mochila

Uma mochilax[1. .n]tal quex[i] =0 oux[i] =1 para todoié dita booleana.

Problema (Knapsack Problem): Dados(w,v,n,W), encontrar uma mochila booleana ótima.

Exemplo:W=50,n=4

1 2 3 4

w 40 30 20 10 v 840 600 400 100

x 1 0 0 0 valor=840

x 1 0 0 1 valor=940

x 0 1 1 0 valor=1000

Análise de Algoritmos — 2º sem 2018 90 / 134

(91)

Problema booleano da mochila

Uma mochilax[1. .n]tal quex[i] =0 oux[i] =1 para todoié dita booleana.

Problema (Knapsack Problem): Dados(w,v,n,W), encontrar uma mochila booleana ótima.

Exemplo:W=50,n=4

1 2 3 4

w 40 30 20 10 v 840 600 400 100

x 1 0 0 0 valor=840

x 1 0 0 1 valor=940

x 0 1 1 0 valor=1000

(92)

Subestrutura ótima

Suponha quex[1. .n]émochila booleana ótimapara o problema (w,v,n,W).

Sex[n] =1

entãox[1. .n−1]émochila booleana ótimapara (w,v,n−1,W−w[n])

senãox[1. .n−1]émochila booleana ótimapara (w,v,n−1,W)

NOTA.Nãohá nada de especial acerca do índicen. Uma afirmação semelhante vale para qualquer índicei.

Análise de Algoritmos — 2º sem 2018 92 / 134

(93)

Subestrutura ótima

Suponha quex[1. .n]émochila booleana ótimapara o problema (w,v,n,W).

Sex[n] =1

entãox[1. .n−1]émochila booleana ótimapara (w,v,n−1,W−w[n])

senãox[1. .n−1]émochila booleana ótimapara (w,v,n−1,W)

NOTA.Nãohá nada de especial acerca do índicen. Uma afirmação semelhante vale para qualquer índicei.

(94)

Subestrutura ótima

Suponha quex[1. .n]émochila booleana ótimapara o problema (w,v,n,W).

Sex[n] =1

entãox[1. .n−1]émochila booleana ótimapara (w,v,n−1,W−w[n])

senãox[1. .n−1]émochila booleana ótimapara (w,v,n−1,W)

NOTA.Nãohá nada de especial acerca do índicen. Uma afirmação semelhante vale para qualquer índicei.

Análise de Algoritmos — 2º sem 2018 94 / 134

(95)

Subestrutura ótima

Suponha quex[1. .n]émochila booleana ótimapara o problema (w,v,n,W).

Sex[n] =1

entãox[1. .n−1]émochila booleana ótimapara (w,v,n−1,W−w[n])

senãox[1. .n−1]émochila booleana ótimapara (w,v,n−1,W)

NOTA.Nãohá nada de especial acerca do índicen.

Uma afirmação semelhante vale para qualquer índicei.

(96)

Simplificação

Problema:

encontrar ovalorde uma mochila booleana ótima.

t[i,Y] = valor de uma mochila booleana ótima para(w,v,i,Y)

= valor da expressãox·vsujeito às restrições x·w≤Y,

ondexé uma mochila booleana ótima

Possíveis valores deY: 0,1,2, . . . ,W

Análise de Algoritmos — 2º sem 2018 96 / 134

(97)

Simplificação

Problema:

encontrar ovalorde uma mochila booleana ótima.

t[i,Y] = valor de uma mochila booleana ótima para(w,v,i,Y)

= valor da expressãox·vsujeito às restrições x·w≤Y,

ondexé uma mochila booleana ótima

Possíveis valores deY: 0,1,2, . . . ,W

(98)

Simplificação

Problema:

encontrar ovalorde uma mochila booleana ótima.

t[i,Y] = valor de uma mochila booleana ótima para(w,v,i,Y)

= valor da expressãox·vsujeito às restrições x·w≤Y,

ondexé uma mochila booleana ótima

Possíveis valores deY: 0,1,2, . . . ,W

Análise de Algoritmos — 2º sem 2018 98 / 134

(99)

Simplificação

Problema:

encontrar ovalorde uma mochila booleana ótima.

t[i,Y] = valor de uma mochila booleana ótima para(w,v,i,Y)

= valor da expressãox·vsujeito às restrições x·w≤Y,

ondexé uma mochila booleana ótima

Possíveis valores deY: 0,1,2, . . . ,W

(100)

Recorrência

t[i,Y] =valor da expressãox·vsujeito à restrição x·w≤Y

t[0,Y] =0 para todoY t[i,0] =0 para todoi t[i,Y] =t[i−1,Y]sew[i]>Y

t[i,Y] =max{t[i−1,Y],t[i−1,Y−w[i]] +v[i]}sew[i]≤Y

Análise de Algoritmos — 2º sem 2018 100 / 134

(101)

Recorrência

t[i,Y] =valor da expressãox·vsujeito à restrição x·w≤Y

t[0,Y] =0 para todoY

t[i,0] =0 para todoi t[i,Y] =t[i−1,Y]sew[i]>Y

t[i,Y] =max{t[i−1,Y],t[i−1,Y−w[i]] +v[i]}sew[i]≤Y

(102)

Recorrência

t[i,Y] =valor da expressãox·vsujeito à restrição x·w≤Y

t[0,Y] =0 para todoY t[i,0] =0 para todoi

t[i,Y] =t[i−1,Y]sew[i]>Y

t[i,Y] =max{t[i−1,Y],t[i−1,Y−w[i]] +v[i]}sew[i]≤Y

Análise de Algoritmos — 2º sem 2018 102 / 134

(103)

Recorrência

t[i,Y] =valor da expressãox·vsujeito à restrição x·w≤Y

t[0,Y] =0 para todoY t[i,0] =0 para todoi t[i,Y] =t[i−1,Y]sew[i]>Y

t[i,Y] =max{t[i−1,Y],t[i−1,Y−w[i]] +v[i]}sew[i]≤Y

(104)

Recorrência

t[i,Y] =valor da expressãox·vsujeito à restrição x·w≤Y

t[0,Y] =0 para todoY t[i,0] =0 para todoi t[i,Y] =t[i−1,Y]sew[i]>Y

t[i,Y] =max{t[i−1,Y],t[i−1,Y−w[i]] +v[i]}sew[i]≤Y

Análise de Algoritmos — 2º sem 2018 104 / 134

(105)

Solução recursiva

Devolve o valor de uma mochila ótima para(w,v,n,W).

REC-MOCHILA(w,v,n,W) 1 sen=0ouW=0 2 então devolva0 3 sew[n]>W

4 então devolvaREC-MOCHILA(w,v,n−1,W) 5 a←REC-MOCHILA(w,v,n−1,W)

6 b←REC-MOCHILA(w,v,n−1,W−w[n]) +v[n] 7 devolvamax{a,b}

Consumo de tempo nopior casoéÒ(2n) Por que demora tanto?

O mesmo subproblema é resolvido muitas vezes.

(106)

Solução recursiva

Devolve o valor de uma mochila ótima para(w,v,n,W).

REC-MOCHILA(w,v,n,W) 1 sen=0ouW=0 2 então devolva0 3 sew[n]>W

4 então devolvaREC-MOCHILA(w,v,n−1,W) 5 a←REC-MOCHILA(w,v,n−1,W)

6 b←REC-MOCHILA(w,v,n−1,W−w[n]) +v[n] 7 devolvamax{a,b}

Consumo de tempo nopior casoéÒ(2n)

Por que demora tanto?

O mesmo subproblema é resolvido muitas vezes.

Análise de Algoritmos — 2º sem 2018 106 / 134

(107)

Solução recursiva

Devolve o valor de uma mochila ótima para(w,v,n,W).

REC-MOCHILA(w,v,n,W) 1 sen=0ouW=0 2 então devolva0 3 sew[n]>W

4 então devolvaREC-MOCHILA(w,v,n−1,W) 5 a←REC-MOCHILA(w,v,n−1,W)

6 b←REC-MOCHILA(w,v,n−1,W−w[n]) +v[n] 7 devolvamax{a,b}

Consumo de tempo nopior casoéÒ(2n) Por que demora tanto?

O mesmo subproblema é resolvido muitas vezes.

(108)

Programação dinâmica

Cada subproblema, valor de uma mochila ótima para (w,v,i,Y),

é resolvidouma sóvez.

Em que ordem calcular os componentes da tabelat?

Olhe a recorrência e pense... t[i,Y] =t[i−1,Y]sew[i]>Y

t[i,Y] =max{t[i−1,Y],t[i−1,Y−w[i]] +v[i]}sew[i]≤Y

Análise de Algoritmos — 2º sem 2018 108 / 134

(109)

Programação dinâmica

Cada subproblema, valor de uma mochila ótima para (w,v,i,Y),

é resolvidouma sóvez.

Em que ordem calcular os componentes da tabelat?

Olhe a recorrência e pense...

t[i,Y] =t[i−1,Y]sew[i]>Y

t[i,Y] =max{t[i−1,Y],t[i−1,Y−w[i]] +v[i]}sew[i]≤Y

(110)

Programação dinâmica

0 1 2 3 4 5 6 7 Y

0 0 0 0 0 0 0 0 0

1 0

2 0 ? ? ? ? ?

3 0 ??

4 0

5 0

6 0

7 0

i

Análise de Algoritmos — 2º sem 2018 110 / 134

(111)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0

2 0

3 0

4 0

i

(112)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0

2 0

3 0

4 0

i

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0

3 0

4 0

i

Análise de Algoritmos — 2º sem 2018 112 / 134

(113)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0

2 0

3 0

4 0

i

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0

3 0

4 0

i

(114)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0

2 0

3 0

4 0

i

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0

3 0

4 0

i

Análise de Algoritmos — 2º sem 2018 114 / 134

(115)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500

2 0

3 0

4 0

i

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0

3 0

4 0

i

(116)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0

3 0

4 0

i

Análise de Algoritmos — 2º sem 2018 116 / 134

(117)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0

3 0

4 0

i

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0 400 400 500 500

3 0

4 0

i

(118)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0 400

3 0

4 0

i

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0 400 400 500 500

3 0

4 0

i

Análise de Algoritmos — 2º sem 2018 118 / 134

(119)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0 400 400

3 0

4 0

i

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0 400 400 500 500

3 0

4 0

i

(120)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0 400 400 500

3 0

4 0

i

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0 400 400 500 500

3 0

4 0

i

Análise de Algoritmos — 2º sem 2018 120 / 134

(121)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0 400 400 500 500

3 0

4 0

i

(122)

Exemplo

W=5en=4

1 2 3 4

w 4 2 1 3

v 500 400 300 450

0 1 2 3 4 5 Y

0 0 0 0 0 0 0

1 0 0 0 0 500 500

2 0 0 400 400 500 500 3 0 300 400 700 700 800 4 0 300 400 700 700 850

i

Análise de Algoritmos — 2º sem 2018 122 / 134

(123)

Algoritmo de programação dinâmica

Devolve o valor de uma mochila booleana ótima para(w,v,n,W).

MOCHILA-BOOLEANA(w,v,n,W) 1 paraY←0atéW faça 2 t[0,Y]←0

3 parai←1aténfaça 4 a←t[i−1,Y] 5 sew[i]>Y

6 entãob←0

7 senãob←t[i−1,Y−w[i]] +v[i] 8 t[i,Y]←max{a,b}

9 devolvat[n,W]

Consumo de tempo éÊ(nW).

(124)

Algoritmo de programação dinâmica

Devolve o valor de uma mochila booleana ótima para(w,v,n,W).

MOCHILA-BOOLEANA(w,v,n,W) 1 paraY←0atéW faça 2 t[0,Y]←0

3 parai←1aténfaça 4 a←t[i−1,Y] 5 sew[i]>Y

6 entãob←0

7 senãob←t[i−1,Y−w[i]] +v[i] 8 t[i,Y]←max{a,b}

9 devolvat[n,W] Consumo de tempo éÊ(nW).

Análise de Algoritmos — 2º sem 2018 124 / 134

(125)

Conclusão

O consumo de tempo do algoritmoMOCHILA-BOOLEANAé Ê(nW).

NOTA:

O consumoÊ(n2lgW)é exponencial!

Explicação: o “tamanho” deW é lgW e nãoW (tente multiplicarw[1], . . . ,w[n]eW por 1000) SeW éÒ(2n)o consumo de tempo éÒ(n2n), mais lento que o algoritmoforça bruta!

(126)

Conclusão

O consumo de tempo do algoritmoMOCHILA-BOOLEANAé Ê(nW).

NOTA:

O consumoÊ(n2lgW)é exponencial!

Explicação: o “tamanho” deW é lgW e nãoW (tente multiplicarw[1], . . . ,w[n]eW por 1000) SeW éÒ(2n)o consumo de tempo éÒ(n2n), mais lento que o algoritmoforça bruta!

Análise de Algoritmos — 2º sem 2018 126 / 134

(127)

Conclusão

O consumo de tempo do algoritmoMOCHILA-BOOLEANAé Ê(nW).

NOTA:

O consumoÊ(n2lgW)é exponencial!

Explicação: o “tamanho” deW é lgW e nãoW (tente multiplicarw[1], . . . ,w[n]eW por 1000)

SeW éÒ(2n)o consumo de tempo éÒ(n2n), mais lento que o algoritmoforça bruta!

(128)

Conclusão

O consumo de tempo do algoritmoMOCHILA-BOOLEANAé Ê(nW).

NOTA:

O consumoÊ(n2lgW)é exponencial!

Explicação: o “tamanho” deW é lgW e nãoW (tente multiplicarw[1], . . . ,w[n]eW por 1000) SeW éÒ(2n)o consumo de tempo éÒ(n2n), mais lento que o algoritmoforça bruta!

Análise de Algoritmos — 2º sem 2018 128 / 134

(129)

Obtenção da mochila

MOCHILA(w,n,W,t) 1 Y←W

2 parai←ndecrescendo até1faça 3 set[i,Y] =t[i−1,Y]

4 entãox[i]←0 5 senãox[i]←1

6 Y←Y−w[i]

7 devolvax

Consumo de tempo éÊ(n).

(130)

Obtenção da mochila

MOCHILA(w,n,W,t) 1 Y←W

2 parai←ndecrescendo até1faça 3 set[i,Y] =t[i−1,Y]

4 entãox[i]←0 5 senãox[i]←1

6 Y←Y−w[i]

7 devolvax

Consumo de tempo éÊ(n).

Análise de Algoritmos — 2º sem 2018 130 / 134

(131)

Versão recursiva

MEMOIZED-MOCHILA-BOOLEANA(w,v,n,W) 1 parai←0aténfaça

2 paraY←0atéW faça 3 t[i,Y]← ∞

3 devolvaLOOKUP-MOC(w,v,n,W)

(132)

Versão recursiva

LOOKUP-MOC(w,v,i,Y) 1 set[i,Y]<

2 então devolvat[i,Y]

3 sei=0ouY=0entãot[i,Y]←0 senão

4 sew[i]>Y então

5 t[i,Y]←LOOKUP-MOC(w,v,i−1,Y) senão

6 a←LOOKUP-MOC(w,v,i−1,Y)

7 b←LOOKUP-MOC(w,v,i−1,Y−w[i]) +v[i] 8 t[i,Y]←max{a,b}

9 devolvat[i,Y]

Análise de Algoritmos — 2º sem 2018 132 / 134

(133)

Exercício das bandeiras

No dia da Bandeira na Rússia o proprietário de uma loja decidiu decorar a vitrine de sua loja com faixas de tecido das cores branca, azul e vermelha.

Ele deseja satisfazer as seguintes codições: faixas da mesma cor não podem ser colocadas uma ao lado da outra. Uma faixa azul sempre está entre uma branca e uma vermelha, ou uma vermelha e uma branca.

Escreva um programa que, dado o númeron de faixas a serem colocadas na vitrine, calcule o número de maneiras de satisfazer as condições do proprietário.

Exemplo:Paran=3, o resultado são as seguintes combinações:

BVB, VBV, BAV, VAB.

Referências

Documentos relacionados

- Desejável: curso técnico &amp; conhecimento SAP2000 ou outro software de modelagem de estruturas, excel avançado, leitura e elaboração de desenhos de

Silveira (2000, apud MAZO; LOPES E BENEDETTI, 2004) aponta algumas tendências associadas ao passar dos anos, como a vida contemplativa, sem, contudo, significar depressão;

Em primeiro lugar, coletamos informações gerais de mulheres, bem como experiências atuais e passadas, incluindo abuso sexual, e posteriormente comparamos o estado emocional e

O presidente da Associação de Criadores de Suínos do Rio Grande do Sul – ACSURS , Valdecir Luis Folador, analisa os preços, como um alívio para os

Essa descoberta foi uma conseqÄ u^ encia direta do teorema de Pit¶ agoras: se um tri^ angulo ret^ angulo tem catetos de comprimento 1, sua hipotenusa ter¶ a um comprimento

 (A6) Coordenação e realização da fase inicial. A fase inicial será realizada em conjunto com as atividades de gestão do projeto e no âmbito das mesmas disposições

O sistema de airbag deve ser acionado apenas em impactos frontais, desde que a desaceleração imposta ao ocupante no sentido de projetá-lo para frente, seja tal que o cinto de

Em toda a região amazônica, essa mul- tiplicidade se desdobra nas interações entre botos e pescadores, nas histórias em que o boto anda pelas festas na forma de um homem atraente