• Nenhum resultado encontrado

Mais programação dinâmica

N/A
N/A
Protected

Academic year: 2022

Share "Mais programação dinâmica"

Copied!
96
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ência dehx1, . . . ,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 de

hA, 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

(3)

Subsequência comum máxima

Z é subsequência comumdeX e Y seZ é subsequência de X e de Y ssco= subseq comum

Exemplos: X = A B C B D A B Y =B DC A B A ssco = B C A

Outra ssco =B D A B

(4)

Subsequência comum máxima

Z é subsequência comumdeX e Y seZ é subsequência de X e de Y ssco= subseq comum

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

Exemplos: X = A B C B D A B Y =B DC A B A ssco = B C A

Outra ssco =B D A B

(5)

Subsequência comum máxima

Z é subsequência comumdeX e Y seZ é subsequência de X e de Y ssco= subseq comum

Exemplos: X = A B CB D A B Y =B DC A B A ssco = B C A

Outra ssco =B D A B

(6)

Problema

Problema: Encontrar uma ssco máximadeX eY.

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

ssco maximal= A B A ssco máxima= B C A B Outra ssco máxima = B D A B

LCS= Longest CommonSubsequence

(7)

diff

> 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

(8)

diff -u abracadabra yabbadabbadoo

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

(9)

Subestrutura ótima

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

I Se X[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 Se X[m],Y[n],

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

Z[1. .k] é ssco máxima deX[1. .m−1] eY[1. .n]. I Se X[m],Y[n],

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

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

(10)

Subestrutura ótima

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

I Se X[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 Se X[m],Y[n],

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

Z[1. .k] é ssco máxima deX[1. .m−1] eY[1. .n]. I Se X[m],Y[n],

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

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

(11)

Subestrutura ótima

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

I Se X[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 Se X[m],Y[n],

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

Z[1. .k] é ssco máxima deX[1. .m−1] eY[1. .n]. I Se X[m],Y[n],

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

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

(12)

Subestrutura ótima

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

I Se X[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 Se X[m],Y[n],

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

Z[1. .k] é ssco máxima deX[1. .m−1] eY[1. .n]. I Se X[m],Y[n],

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

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

(13)

Subestrutura ótima

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

I Se X[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 Se X[m],Y[n],

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

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

I Se X[m],Y[n],

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

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

(14)

Subestrutura ótima

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

I Se X[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 Se X[m],Y[n],

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

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

I Se X[m],Y[n],

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

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

(15)

Subestrutura ótima

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

I Se X[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 Se X[m],Y[n],

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

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

I Se X[m],Y[n],

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

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

(16)

Simplificação

Problema: encontrar ocomprimento de uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i] e Y[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]) se X[i],Y[j]

(17)

Simplificação

Problema: encontrar ocomprimento de uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i] e Y[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]) se X[i],Y[j]

(18)

Simplificação

Problema: encontrar ocomprimento de uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i] e Y[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]) se X[i],Y[j]

(19)

Simplificação

Problema: encontrar ocomprimento de uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i] e Y[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]) se X[i],Y[j]

(20)

Simplificação

Problema: encontrar ocomprimento de uma ssco máxima.

c[i,j] = comprimento de uma ssco máxima deX[1. .i] e Y[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]

(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= 0ou j= 0então devolva 0

2 seX[i] =Y[j]

3 entãoc ← REC-LCS-LENGTH(X,i−1,Y,j−1) + 1 4 senão q1← REC-LCS-LENGTH (X,i−1,Y,j) 5 q2← REC-LCS-LENGTH(X,i,Y,j−1)

6 seq1q2

7 entãocq1

8 senão cq2

9 devolvac

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

(22)

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= 0ou j= 0então devolva 0 2 seX[i] =Y[j]

3 entãoc ← REC-LCS-LENGTH(X,i−1,Y,j−1) + 1

4 senão q1← REC-LCS-LENGTH (X,i−1,Y,j) 5 q2← REC-LCS-LENGTH(X,i,Y,j−1)

6 seq1q2

7 entãocq1

8 senão cq2

9 devolvac

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

(23)

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= 0ou j= 0então devolva 0 2 seX[i] =Y[j]

3 entãoc ← REC-LCS-LENGTH(X,i−1,Y,j−1) + 1 4 senão q1← REC-LCS-LENGTH (X,i−1,Y,j) 5 q2← REC-LCS-LENGTH(X,i,Y,j−1)

6 seq1q2

7 entãocq1

8 senão cq2

9 devolvac

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

(24)

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= 0ou j= 0então devolva 0 2 seX[i] =Y[j]

3 entãoc ← REC-LCS-LENGTH(X,i−1,Y,j−1) + 1 4 senão q1← REC-LCS-LENGTH (X,i−1,Y,j) 5 q2← REC-LCS-LENGTH(X,i,Y,j−1)

6 seq1q2

7 entãocq1

8 senão cq2

9 devolvac

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

(25)

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= 0ou j= 0então devolva 0 2 seX[i] =Y[j]

3 entãoc ← REC-LCS-LENGTH(X,i−1,Y,j−1) + 1 4 senão q1← REC-LCS-LENGTH (X,i−1,Y,j) 5 q2← REC-LCS-LENGTH(X,i,Y,j−1)

6 seq1q2

7 entãocq1

8 senão cq2

9 devolvac

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

(26)

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 para n≥1 e m≥1 A que classeÒ pertenceT(m,n)?

(27)

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 e m≥1

A que classeÒ pertenceT(m,n)?

(28)

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 e m≥1 A que classeÒ pertenceT(m,n)?

(29)

Recorrência

Note queT(m,n) =T(n,m) para n= 0,1, . . .e m= 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 para k= 1,2, . . . S(k) éÊ(2k) ⇒ T(m,n) éÒ(2min{m,n}).

T(m,n) éexponecial.

(30)

Recorrência

Note queT(m,n) =T(n,m) para n= 0,1, . . .e m= 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.

(31)

Recorrência

Note queT(m,n) =T(n,m) para n= 0,1, . . .e m= 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.

(32)

Recorrência

Note queT(m,n) =T(n,m) para n= 0,1, . . .e m= 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.

(33)

Conclusão

O consumo de tempo do

algoritmo REC-LCS-LENGTHé Ò(2min{m,n}).

(34)

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

(35)

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

i

(36)

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=1 e j= 0,1, . . . ,n, depois todos comi=2 e j= 0,1, . . . ,n, depois todos comi=3 e j= 0,1, . . . ,n, etc.

(37)

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=1 e j= 0,1, . . . ,n, depois todos comi=2 e j= 0,1, . . . ,n, depois todos comi=3 e j= 0,1, . . . ,n, etc.

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

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

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

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

Análise de Algoritmos – 1º sem 2022 39 / 96

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

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

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

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

Análise de Algoritmos – 1º sem 2022 41 / 96

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

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

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

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

Análise de Algoritmos – 1º sem 2022 43 / 96

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

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

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

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

Análise de Algoritmos – 1º sem 2022 45 / 96

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

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

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

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

Análise de Algoritmos – 1º sem 2022 47 / 96

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

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

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

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

Análise de Algoritmos – 1º sem 2022 49 / 96

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

B 4 0 D 5 0 A 6 0

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

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

Análise de Algoritmos – 1º sem 2022 51 / 96

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

B 4 0 D 5 0 A 6 0

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

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

Análise de Algoritmos – 1º sem 2022 53 / 96

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

B 4 0 D 5 0 A 6 0

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

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

Análise de Algoritmos – 1º sem 2022 55 / 96

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

D 5 0 A 6 0

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

D 5 0 A 6 0 B 7 0

Análise de Algoritmos – 1º sem 2022 57 / 96

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

D 5 0 A 6 0

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

D 5 0 A 6 0 B 7 0

Análise de Algoritmos – 1º sem 2022 59 / 96

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

D 5 0 A 6 0

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

D 5 0 A 6 0 B 7 0

Análise de Algoritmos – 1º sem 2022 61 / 96

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

A 6 0

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

A 6 0 B 7 0

Análise de Algoritmos – 1º sem 2022 63 / 96

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

A 6 0

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

A 6 0 B 7 0

Análise de Algoritmos – 1º sem 2022 65 / 96

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

A 6 0

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

A 6 0 B 7 0

Análise de Algoritmos – 1º sem 2022 67 / 96

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

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

B 7 0

Análise de Algoritmos – 1º sem 2022 69 / 96

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

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

B 7 0

Análise de Algoritmos – 1º sem 2022 71 / 96

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

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

B 7 0

Análise de Algoritmos – 1º sem 2022 73 / 96

(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

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

Análise de Algoritmos – 1º sem 2022 75 / 96

(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

(77)

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

Análise de Algoritmos – 1º sem 2022 77 / 96

(78)

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

(79)

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

Análise de Algoritmos – 1º sem 2022 79 / 96

(80)

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

(81)

Algoritmo de programação dinâmica

Devolve o comprimento de

uma ssco máxima deX[1. .m] e Y[1. .n].

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

1 para i←0atém façac[i,0]←0 2 para j←1 atén façac[0,j]←0

3 para i←1atém faça 4 paraj ←1atén faça 5 se X[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: Ê(mn)

(82)

Algoritmo de programação dinâmica

Devolve o comprimento de

uma ssco máxima deX[1. .m] e Y[1. .n].

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

1 para i←0atém façac[i,0]←0 2 para j←1 atén façac[0,j]←0 3 para i←1atém faça

4 paraj←1 atén faça

5 se X[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: Ê(mn)

(83)

Algoritmo de programação dinâmica

Devolve o comprimento de

uma ssco máxima deX[1. .m] e Y[1. .n].

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

1 para i←0atém façac[i,0]←0 2 para j←1 atén façac[0,j]←0 3 para i←1atém faça

4 paraj←1 atén faça 5 se X[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: Ê(mn)

(84)

Algoritmo de programação dinâmica

Devolve o comprimento de

uma ssco máxima deX[1. .m] e Y[1. .n].

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

1 para i←0atém façac[i,0]←0 2 para j←1 atén façac[0,j]←0 3 para i←1atém faça

4 paraj←1 atén faça 5 se X[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: Ê(mn)

(85)

Algoritmo de programação dinâmica

Devolve o comprimento de

uma ssco máxima deX[1. .m] e Y[1. .n].

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

1 para i←0atém façac[i,0]←0 2 para j←1 atén façac[0,j]←0 3 para i←1atém faça

4 paraj←1 atén faça 5 se X[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: Ê(mn)

(86)

Conclusão

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

E como encontrar uma subsequência comum máxima?

(87)

Conclusão

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

E como encontrar uma subsequência comum máxima?

(88)

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

(89)

Algoritmo de programação dinâmica

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

1 para i←0atém façac[i,0]←0 2 para j←1 atén façac[0,j]←0 3 para i←1atém faça

4 paraj←1 atén faça 5 se X[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ão c[i,j]←c[i,j−1]

12 b[i,j]←“←”

13 devolvac e b

Consumo de tempo: Ê(mn)

(90)

Algoritmo de programação dinâmica

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

1 para i←0atém façac[i,0]←0 2 para j←1 atén façac[0,j]←0 3 para i←1atém faça

4 paraj←1 atén faça 5 se X[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ão c[i,j]←c[i,j−1]

12 b[i,j]←“←”

13 devolvac e b

(91)

Algoritmo de programação dinâmica

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

1 para i←0atém façac[i,0]←0 2 para j←1 atén façac[0,j]←0 3 para i←1atém faça

4 paraj←1 atén faça 5 se X[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ão c[i,j]←c[i,j−1]

12 b[i,j]←“←”

13 devolvac e b

Como obter uma ssco máxima a partir da matrizb?

(92)

Get-LCS

Como obter uma ssco máxima a partir da matrizb?

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

1 k←máxcomp 2 im jn

3 enquanto i>0 e j>0faça 4 seb[i,j] = “-”

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

6 kk−1 ii−1 jj−1

7 senão seb[i,j] = “←”

8 entãoii−1

9 senãojj−1

10 devolvaZ

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

(93)

Get-LCS

Como obter uma ssco máxima a partir da matrizb?

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

1 k←máxcomp 2 im jn

3 enquanto i>0 e j>0faça 4 seb[i,j] = “-”

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

6 kk−1 ii−1 jj−1

7 senão seb[i,j] = “←”

8 entãoii−1

9 senãojj−1

10 devolvaZ

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

(94)

Exercícios

Exercício 20.A

Escreva um algoritmo para decidir sehz1, . . . ,zkié subsequência de

hx1, . . . ,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 crescenteZ de uma sequênciaX e émáximase não existe outra subsequência crescente mais longa. A subsequênciah5,6,9ide

h9,5,6,9,6,2,7ié máxima? Dê uma sequência crescente máxima de

h9,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 deX que seja maior ou igual ao último escolhido.) Exercício 20.D

(95)

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: Para n= 3, o resultado são as seguintes combinações:

BVB, VBV, BAV, VAB.

(96)

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, . . . ,Lebp espaços no fim da linhap, queremos minimizarb31+b23+· · ·+bL−13 .)

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

Referências

Documentos relacionados