• Nenhum resultado encontrado

Mais programação dinâmica

N/A
N/A
Protected

Academic year: 2022

Share "Mais programação dinâmica"

Copied!
147
0
0

Texto

(1)

CLRS 15.4 e 15.5

= “recursão–com–tabela”

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

(2)

z1=xi1 . . . zk =xik

EXEMPLOS:

h5,9,2,7i é subsequência de h9,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)

Exercício

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

6 j ←j −1 7 sei ≥1

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

(4)

2 j ←n

3 enquantoi ≥1e j ≥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”

(5)

2 j ←n

3 enquantoi ≥1e j ≥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)

2 j ←n

3 enquantoi ≥1e j ≥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 de X[j+1. .n]

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

(7)

Subsequência comum máxima

Z é subseq comumdeX e Y

se Z é subsequência deX e deY ssco=subseq comum

(8)

Subsequência comum máxima

Z é subseq comumdeX e Y

se Z é subsequência deX e deY

ssco=subseq comum

Exemplos: X = A B CB DAB Y =BDC A B A ssco =B C A

(9)

se Z é subsequência deX e deY

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

(10)

Y =BDC A B A ssco = B C A

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

LCS=LongestCommon Subsequence

(11)

R A C A D A B R A

B B A D A B B A D D O

(12)

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

(13)

Subestrutura ótima

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

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

então Z[k] =X[m] =Y[n]e

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

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

(14)

Subestrutura ótima

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

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

então Z[k] =X[m] =Y[n]e

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

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

então Z[k]6=X[m]implica que

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

(15)

então Z[k] =X[m] =Y[n]e

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

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

então Z[k]6=X[m]implica que

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

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

então Z[k]6=Y[n]implica que

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

(16)

Simplificação

Problema: encontrar ocomprimentode uma ssco máxima.

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]6=Y[j]

(17)

Simplificação

Problema: encontrar ocomprimentode uma ssco máxima.

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

(18)

Simplificação

Problema: encontrar ocomprimentode 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

(19)

Simplificação

Problema: encontrar ocomprimentode 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]

(20)

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]6=Y[j]

(21)

1 sei =0ou j =0 entã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 se q1 ≥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

A que classeΩpertence T(m,n)?

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

(24)

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Ωpertence T(m,n)?

(25)

Recorrência

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

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

(27)

Recorrência

Note queT(m,n) =T(n,m) paran =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})

(28)

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

(29)

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

(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 de c[3,5].

(32)

Em que ordem calcular os componentes da tabelac? Para calcularc[4,6]preciso de . . .

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

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

(33)

3 0 ? ?

4 0 ? ??

5 0

6 0

7 0

8 0

i

(34)

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

i

(35)

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

i

(36)

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

i

(37)

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

i

(38)

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

i

(39)

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

i

(40)

B 2 0 ??

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

i

(41)

B 2 0 1 ??

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

i

(42)

B 2 0 1 1 ??

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

i

(43)

B 2 0 1 1 1 ??

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

i

(44)

B 2 0 1 1 1 1 ??

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

i

(45)

B 2 0 1 1 1 1 2 ??

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

i

(46)

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

(47)

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

i

(48)

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

(49)

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

i

(50)

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

(51)

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

i

(52)

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

(53)

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

i

(54)

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

(55)

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

i

(56)

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

(57)

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

i

(58)

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

(59)

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

i

(60)

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

(61)

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

i

(62)

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

(63)

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

i

(64)

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

(65)

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 i

(66)

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

(67)

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 i

(68)

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

(69)

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 i

(70)

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

(71)

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

i

(72)

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

(73)

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

i

(74)

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

(75)

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

i

(76)

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

(77)

B 2 ? - ↑ ↑ ← - ↑ C 3 ? ← ← - ↑ ← ← B 4 ? - ← ← ← - ↑ D 5 ? ← - ← ← ← ← A 6 ? ← ← ← - ← - B 7 ? - ← ← ← - ←

i

(78)

Algoritmo de programação dinâmica

Devolve o comprimento de

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

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

(79)

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

(80)

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

(81)

B 2 ? - ↑ ↑ ← - ↑ C 3 ? ← ← - ↑ ← ← B 4 ? - ← ← ← - ↑ D 5 ? ← - ← ← ← ← A 6 ? ← ← ← - ← - B 7 ? - ← ← ← - ←

i

(82)

Algoritmo de programação dinâmica

LEC-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 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ão c[i,j]←c[i,j −1]

12 b[i,j]←“←”

13 devolvac e b

(83)

3 para i ←1até m faça 4 paraj ←1 até 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ão c[i,j]←c[i,j −1]

12 b[i,j]←“←”

13 devolvac e b Consumo de tempo: O(mn)

(84)

3 j ←n

4 enquanto i >0 e j >0 faç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}).

(85)

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,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 deX que 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.

(86)

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

A palavraPi temli caracteres. 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 substructure property” para esse problema? Faça uma análise do consumo de tempo do algoritmo.

(87)

Buscas em um conjunto conhecido

Considere um inteiron e um vetor v[1. .n]de inteiros.

Problema: Dado v[1. .n]e uma sequência dek inteiros, decidir se cada inteiro está ou não emv.

Podemos ordenarv e aplicar busca binária. Podemos fazer algo melhor?

(88)

Buscas em um conjunto conhecido

Considere um inteiron e um vetor v[1. .n]de inteiros.

Problema: Dado v[1. .n]e uma sequência dek inteiros, decidir se cada inteiro está ou não emv.

Sek é grande, como devemos armazenar o v?

Podemos fazer algo melhor?

(89)

Buscas em um conjunto conhecido

Considere um inteiron e um vetor v[1. .n]de inteiros.

Problema: Dado v[1. .n]e uma sequência dek inteiros, decidir se cada inteiro está ou não emv.

Sek é grande, como devemos armazenar o v?

E sev armazena um conjunto bem conhecido, como por exemplo as palavras de uma língua?

(A ser usado por um tradutor, ou um speller.)

(90)

decidir se cada inteiro está ou não emv.

Sek é grande, como devemos armazenar o v?

E sev armazena um conjunto bem conhecido, como por exemplo as palavras de uma língua?

(A ser usado por um tradutor, ou um speller.) Podemos ordenarv e aplicar busca binária.

Podemos fazer algo melhor?

(91)

Buscas em conjunto conhecido

Dadasestimativasdo número de acessos a cada elemento de v[1. .n], qual é a melhor estrutura de dados para v?

a b

c

a a

b

b c

c

a

b c

a

b

c

(92)

Buscas em conjunto conhecido

Dadasestimativasdo número de acessos a cada elemento de v[1. .n], qual é a melhor estrutura de dados para v?

Árvore de busca binária (ABB)?

a

b a a

b

c

b

c b

c

(93)

Buscas em conjunto conhecido

Dadasestimativasdo número de acessos a cada elemento de v[1. .n], qual é a melhor estrutura de dados para v?

Árvore de busca binária (ABB)?

Exemplo: n=3 e e1 =20,e2 =10,e3=40.

a b b c

(94)

Árvore de busca binária (ABB)?

Exemplo: n=3 e e1 =20,e2 =10,e3=40.

Qual a melhor dasABBs?

a b

c

a a

b

b c

c

a

b c

a

b

c

(95)

Exemplo

Exemplo: n=3 e e1 =20,e2 =10,e3=40.

a b

c

a a

b

b c

c

a

b c

a

b

c

Qual a melhor dasABBs?

I 20·1+10·2+40·3=160

(96)

Exemplo

Exemplo: n=3 e e1 =20,e2 =10,e3=40.

a b

c

a a

b

b c

c

a

b c

a

b

c

Número esperado de comparações:

I 20·3+10·2+40·1=120

I 20·2+10·3+40·1=110

I 20·2+10·1+40·2=130

I 20·1+10·3+40·2=130

I 20·1+10·2+40·3=160

(97)

a

b a a

b

c

b

c b

c

Número esperado de comparações:

I 20·3+10·2+40·1=120

I 20·2+10·3+40·1=110 ←− ABB ótima

I 20·2+10·1+40·2=130

I 20·1+10·3+40·2=130

I 20·1+10·2+40·3=160

(98)

Árvore de busca ótima

Considere um vetore[1. .n]de inteiros com uma estimativa do número de acessosa cada elemento de{1, . . . ,n}.

ondehi é o número de nós no caminho dei até a raiz da árvore. Problema (ABB Ótima): Dadoe[1. .n], encontrar

uma árvore de busca binária ótima com respeito ae.

(99)

Árvore de busca ótima

Considere um vetore[1. .n]de inteiros com uma estimativa do número de acessosa cada elemento de{1, . . . ,n}.

UmaABB ótimacom respeito ao vetor e é uma ABB para o conjunto{1, . . . ,n} que minimiza o número

n

X

i=1

hiei,

ondehi é o número de nós no caminho dei até a raiz da árvore.

(100)

UmaABB ótimacom respeito ao vetor e é uma ABB para o conjunto{1, . . . ,n} que minimiza o número

n

X

i=1

hiei,

ondehi é o número de nós no caminho dei até a raiz da árvore.

Problema (ABB Ótima): Dadoe[1. .n], encontrar uma árvore de busca binária ótima com respeito ae.

(101)

Subestrutura ótima

Subárvores esquerda e direita de uma ABB ótima são ABBs ótimas.

mini≤k≤j [i,k 1] +c[k+1,j] +s[i, se i j

(102)

Subestrutura ótima

Subárvores esquerda e direita de uma ABB ótima são ABBs ótimas.

Resta determinar araiz da ABB ótima.

(103)

Subestrutura ótima

Subárvores esquerda e direita de uma ABB ótima são ABBs ótimas.

Resta determinar araiz da ABB ótima.

c[i,j]: custo min de uma ABB parae[i. .j] s[i,j]: soma dos acessos eme[i. .j]

(104)

Subárvores esquerda e direita de uma ABB ótima são ABBs ótimas.

Resta determinar araiz da ABB ótima.

c[i,j]: custo min de uma ABB parae[i. .j] s[i,j]: soma dos acessos eme[i. .j]

c[i,j] =

0 se i >j mini≤k≤j{c[i,k−1] +c[k+1,j] +s[i,j]} se i ≤j

(105)

Custo de uma ABB ótima

c[i,j]: custo min de uma ABB parae[i. .j] s[j]: soma dos acessos em e[1. .j]

s[j]−s[i−1]: soma dos acessos eme[i. .j]

c[i,j] =

0 se i >j mini≤k≤j{c[i,k−1] +c[k+1,j] +s[j]−s[i−1]} se i ≤j

(106)

Custo de uma ABB ótima

c[i,j]: custo min de uma ABB parae[i. .j] s[j]: soma dos acessos em e[1. .j]

s[j]−s[i−1]: soma dos acessos eme[i. .j]

c[i,j] =

0 se i >j mini≤k≤j{c[i,k−1] +c[k+1,j] +s[j]−s[i−1]} se i ≤j Para calculars:

1 s[0] =0

2 para i ←1até n faça 3 s[i]←s[i−1] +e[i]

(107)

Custo de uma ABB ótima

c[i,j]: custo min de uma ABB parae[i. .j] s[j]: soma dos acessos em e[1. .j]

s[j]−s[i−1]: soma dos acessos eme[i. .j]

c[i,j] =

0 se i >j mini≤k≤j{c[i,k−1] +c[k+1,j] +s[j]−s[i−1]} se i ≤j

Como preencher a matrizc? Em que ordem?

(108)

s[j]−s[i−1]: soma dos acessos eme[i. .j]

c[i,j] =

0 se i >j mini≤k≤j{c[i,k−1] +c[k+1,j] +s[j]−s[i−1]} se i ≤j

Como preencher a matrizc? Em que ordem?

Como no problema da parentização! Pelas diagonais!

(109)

2 0 ? ? ? ??

3 0 ?

4 0 ?

5 0 ?

6 0

7 0

i 0

(110)

e[1]=10 e[2]=20 e[3]=30 e[4]=15 e[5]=30

(111)

2 0

3 0

4 0

5 0

6 0

i

(112)

2 0

3 0

4 0

5 0

6 0

i

c[1,1−1] +e[1] +c[1+1,1] =0+10+0=10

(113)

2 0 ??

3 0

4 0

5 0

6 0

i

(114)

2 0 20

3 0

4 0

5 0

6 0

i

c[2,2−1] +e[2] +c[2+1,2] =0+20+0=20

(115)

2 0 20

3 0 ??

4 0

5 0

6 0

i

(116)

2 0 20

3 0 30

4 0

5 0

6 0

i

c[3,3−1] +e[3] +c[3+1,3] =0+30+0=30

(117)

2 0 20

3 0 30

4 0 ??

5 0

6 0

i

(118)

2 0 20

3 0 30

4 0 15

5 0

6 0

i

c[4,4+1] +e[4] +c[4+1,4] =0+15+0=15

(119)

2 0 20

3 0 30

4 0 15

5 0 ??

6 0

i

(120)

2 0 20

3 0 30

4 0 15

5 0 30

6 0

i

c[5,5+1] +e[5] +c[5+1,5] =0+30+0=30

(121)

2 0 20

3 0 30

4 0 15

5 0 30

6 0

i

(122)

2 0 20

3 0 30

4 0 15

5 0 30

6 0

i

c[1,1−1] + (e[1] +e[2]) +c[1+1,2] =0+30+20=50

(123)

2 0 20

3 0 30

4 0 15

5 0 30

6 0

i

c[1,2−1] + (e[1] +e[2]) +c[2+1,2] =10+30+0=40

(124)

2 0 20 ??

3 0 30

4 0 15

5 0 30

6 0

i

(125)

2 0 20 80

3 0 30

4 0 15

5 0 30

6 0

i

c[2,2−1] + (e[2] +e[3]) +c[2+1,3] =0+50+30=80

(126)

2 0 20 70

3 0 30

4 0 15

5 0 30

6 0

i

c[2,3−1] + (e[2] +e[3]) +c[3+1,3] =20+50+0=70

(127)

2 0 20 70

3 0 30 ??

4 0 15

5 0 30

6 0

i

(128)

2 0 20 70

3 0 30 60

4 0 15

5 0 30

6 0

i

c[3,3−1] + (e[3] +e[4]) +c[3+1,4] =0+45+15=60

(129)

2 0 20 70

3 0 30 60

4 0 15

5 0 30

6 0

i

c[3,4−1] + (e[3] +e[4]) +c[4+1,4] =30+45+0=75

(130)

2 0 20 70

3 0 30 60

4 0 15 ??

5 0 30

6 0

i

(131)

2 0 20 70

3 0 30 60

4 0 15 75

5 0 30

6 0

i

c[4,4−1] + (e[4] +e[5]) +c[4+1,5] =0+45+30=75

(132)

2 0 20 70

3 0 30 60

4 0 15 60

5 0 30

6 0

i

c[4,5−1] + (e[4] +e[5]) +c[5+1,5] =15+45+0=60

(133)

2 0 20 70

3 0 30 60

4 0 15 60

5 0 30

6 0

i

(134)

2 0 20 70

3 0 30 60

4 0 15 60

5 0 30

6 0

i

c[1,1−1] + (e[1] +e[2] +e[3]) +c[1+1,3] =0+60+70=130

(135)

2 0 20 70

3 0 30 60

4 0 15 60

5 0 30

6 0

i

c[1,2−1] + (e[1]) +e[2] +e[3]) +c[2+1,3] =10+60+30=100

(136)

2 0 20 70

3 0 30 60

4 0 15 60

5 0 30

6 0

i

c[1,3−1] + (e[1] +e[2] +e[3]) +c[3+1,3] =40+60+0=100

(137)

2 0 20 70 ??

3 0 30 60

4 0 15 60

5 0 30

6 0

i

(138)

2 0 20 70 125

3 0 30 60

4 0 15 60

5 0 30

6 0

i

c[2,2−1] + (e[2] +e[3] +e[4]) +c[2+1,4] =0+65+60=125

(139)

2 0 20 70 100

3 0 30 60

4 0 15 60

5 0 30

6 0

i

c[2,3−1] + (e[2] +e[3] +e[4]) +c[3+1,4] =20+65+15=100

(140)

2 0 20 70 100

3 0 30 60

4 0 15 60

5 0 30

6 0

i

c[2,4−1] + (e[2] +e[3] +e[4]) +c[4+1,4] =70+65+0=135

(141)

2 0 20 70 100

3 0 30 60 ??

4 0 15 60

5 0 30

6 0

i

(142)

2 0 20 70 100

3 0 30 60 135

4 0 15 60

5 0 30

6 0

i

c[3,3−1] + (e[3] +e[4] +e[5]) +c[3+1,5] =0+75+60=135

(143)

2 0 20 70 100

3 0 30 60 135

4 0 15 60

5 0 30

6 0

i

c[3,4−1] + (e[3] +e[4] +e[5]) +c[4+1,5] =30+75+30=135

(144)

2 0 20 70 100

3 0 30 60 135

4 0 15 60

5 0 30

6 0

i

c[3,5−1] + (e[3] +e[4] +e[5]) +c[5+1,5] =60+75+0=135

(145)

2 0 20 70 100

3 0 30 60 135

4 0 15 60

5 0 30

6 0

i

Exercício: Preencha o que falta!

(146)

3 s[i]←s[i−1] +e[i]

4 para i ←1até n+1faça 5 c[i,i−1]←0

6 para `←1 atén faça

7 parai ←1 atén−`+1 faça

8 j ←i+`−1

9 c[i,j]←c[i+1,j]

10 para k ←i+1até j faça

11 sec[i,k−1] +c[k+1,j]<c[i,j]

12 entãoc[i,j]←c[i,k−1] +c[k+1,j] 13 c[i,j]←c[i,j] +s[j]−s[i−1]

14 devolvac[1,n]

(147)

Como fazer para obter uma ABB ótima e não apenas o seu custo?

Complete o serviço!

Referências

Documentos relacionados

Exercício: Como fazer para obter uma ABB ótima e não apenas o seu custo. Complete

Além disso, ao fazer a venda antecipada do seu produto para futuros clientes, você conseguirá fortalecer o relacionamento com essas pessoas ainda nessa fase inicial. Apresentar a

Se você tem intimidade com alguém não há problema em se aproximar – até porquê a pessoa pode se afastar, se quiser – e tem liberdade para isso.. Mas, mesmo para

“Apresentado que é o ponto da situação dos projectos, informo os Senhores Vereadores que conto com a colaboração de todos e assim aguardo que sejam comunicados até ao final do

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

Exercício: Como fazer para obter uma ABB ótima e não apenas o seu custo.. Complete

Exercício: Como fazer para obter uma ABB ótima e não apenas o seu custo. Complete

Essa dimensão é composta pelos conceitos que permitem refletir sobre a origem e a dinâmica de transformação nas representações e práticas sociais que se relacionam com as