Você está na página 1de 186

ANLISE DE ALGORITMOS

www.ime.usp.br/pf/analise de algoritmos/
Paulo Feolo
Transparncias baseadas no
Introduction to Algorithms
de Cormen, Leiserson, Rivest, Stein
A anlise de algoritmos uma disciplina de engenharia.
Um engenheiro civil, por exemplo, tem mtodos e
tecnologia para prever o comportamento de uma
estrutura antes de constui-la.
Da mesma forma, um projetista de algoritmos deve ser
capaz de prever o comportamento de um algoritmo
antes de implement-lo.
CLRS = Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms
AU = Aho, Ullman, Foundations of Computer Science
1
AULA 1
Piso, teto, log etc.
CLRS 3.2, A.1
AU 2.9
2
Denies
a := inteiro i tal que i a < i +1
a := inteiro ) tal que ) 1 < a )
Exerccio 1.A
Desenhe os grcos das funes a e a para
a no-negativo.
Exerccio 1.B
Mostre que
a 1
2

_
a
2
_

a
2
e
a
2

_
a
2
_

a +1
2
para qualquer inteiro a 1.
Exerccio 1.C
verdade que a + = a + para
quaisquer a e ?
Exerccio 1.D
Desenhe os grcos das funes lga e 2
a
para a
inteiro no-negativo.
3
Exerccio 1.E
Explique o signicado da expresso log
32
a.
Exerccio 1.F
Calcule 5
log
5
a
, log
3
3
a
e lg2
a
.
Exerccio 1.G
Qual a relao entre log
8
a e log
2
a ?
Exerccio 1.H
Se i := lga, qual a relao entre a e 2
i
?
Se ) := lga, qual a relao entre a e 2
)
?
Exerccio 1.I
verdade que lga +1 = lg(a +1) para todo
inteiro a 1?
Exerccio 1.J
Escreva um algoritmo que calcule lga.
4
TAREFA 1
Exerccio 1.L
Mostre que para qualquer nmero real a tem-se
a 1 < a a a < a +1.
Exerccio 1.M
Mostre que a2 +a2 = a para todo inteiro positivo a.
Exerccio 1.N
Mostre que a + a +, com igualdade se e somente se
a + 1 < a +. Encontre uma frmula anloga para .
Exerccio 1.O
Se c inteiro e a racional, verdade que ca = ca?
Exerccio 1.P
Use a notao para representar o resto da diviso de a por 7.
Exerccio 1.Q
verdade que 22a33 = 4a9? verdade que
22a33 = 4a9?
Exerccio 1.R
verdade que a22 = a4?
Exerccio 1.S
Se a, o, o so inteiros positivos, verdade que aoo = aoo?
Exerccio 1.T
verdade que lga lg(a 1) para todo inteiro a 2? verdade
que lga lg(a +1) para todo inteiro a 1?
Exerccio 1.U
Prove que para qualquer nmero racional a 1 tem-se
lga lga lga lga lga
Exerccio 1.V
Quanto vale 12 +14 +18 + +12
a
+ ?
5
AULA 2
Introduo AA
CLRS 2.12.2
AU 3.3, 3.6
6
Exerccio 2.A
Quanto vale S no m do algoritmo?
1 S 0
2 para i 2 at a 2 faa
3 para ) i at a faa
4 S S +1
Escreva um algoritmo mais eciente
que tenha o mesmo efeito.
Soluo
Se a 4 ento no m da execuo das
linhas 14,
S = (a 1) +(a 2) + +4 +3
= (a 3)(a +2)2
=
1
2
a
2

1
2
a 3 .
7
Anlise da ordenao por insero
Algoritmo rearranja [1. . a] em ordem crescente
([1. . a] crescente se [1] [a])
ORDENA-POR-INSERO (, a)
1 para ) 2 at a faa
2 chave [)]
3 i ) 1
4 enquanto i 1 e [i] chave faa
5 [i +1] [i]
6 i i 1
7 [i +1] chave
O algoritmo faz o que promete?
Invariante: antes de cada execuo do bloco
de linhas 27, [1. . )1] crescente
1 ) a
22 33 33 33 44 55 11 99 22 55 77
Prove!
8
Quantas atribuies () algoritmo faz?
3 i ) 1 2 ) a
4 enquanto i 1 e [i] chave faa
5 [i +1] [i]
6 i i 1
linha atribuies
3 1
4 0
5 ) 1 a 1
6 a 1
36 2a 1
9
1 para ) 2 at a faa ) ) +1 escondido
2 chave [)]
3 LINHAS 36
7 [i +1] chave
linha atribuies
1 a 1 +1
2 a 1
36 (a 1)(2a 1)
7 a 1
total 2a
2
1
10
Anlise mais na do nmero de atribuies:
linha atribuies
1 a 1 +1
2 a 1
3 a 1
4 0
5 1 +2 + +(a1) = a(a 1)2
6 1 +2 + +(a1) = a(a 1)2
7 a 1
total a
2
+3a 3
a a
2
+3a 3 a
2
1 1 1
2 7 4
3 15 9
10 127 100
100 10297 10000
1000 1002997 1000000
10000 100029997 100000000
100000 10000299997 10000000000
a
2
domina os outros termos
11
Exerccio 2.B
Se cada linha de cdigo consome
1 unidade de tempo, qual o consumo total?
1 para ) 2 at a faa
2 chave [)]
3 i ) 1
4 enquanto i 1 e [i] chave faa
5 [i +1] [i]
6 i i 1
7 [i +1] chave
Soluo
linha todas as execues da linha
1 a
2 a 1
3 a 1
4 2 +3 + +a = (a 1)(a +2)2
5 1 +2 + +(a1) = a(a 1)2
6 1 +2 + +(a1) = a(a 1)2
7 a 1
total
3
2
a
2
+
7
2
a 4
12
TAREFA 2
Exerccio 2.C (bom!)
Quanto vale S no m do seguinte algoritmo?
1 S 0
2 i a
3 enquanto i 0 faa
4 para ) 1 at i faa
5 S S +1
6 i i2
Exerccio 2.D
Prove o invariante do algoritmo ORDENA-POR-INSERO.
Exerccio 2.E
Quantas comparaes faz o algoritmo ORDENA-POR-INSERO,
no pior caso, ao receber um vetor [1. . a]?
Exerccio 2.F
Quantas atribuies faz o algoritmo abaixo?
~ 0
para i 1 at a faa
~ ~ +i
devolva ~
Escreva um algoritmo melhorado que produza o mesmo efeito com
menos atribuies.
Exerccio 2.G (AU 3.7.1)
O algoritmo abaixo opera sobre um vetor [1. . a]. Quantas
atribuies ele faz no pior caso? Quantas comparaes?
1 ~ 0
2 para i 1 at a faa
3 ~ ~ +[i]
4 a ~a
5 I 1
6 para i 2 at a faa
7 se ([i] a)
2
< ([I] a)
2
8 ento I i
9 devolva I
13
Exerccio 2.H (AU 3.7.2)
O fragmento abaixo opera sobre uma matriz [1. . a, 1. . a]. Quantas
atribuies faz?
1 para i 1 at a 1 faa
2 para ) i +1 at a faa
3 para I i at a faa
4 [), I] [), I] [i, I] [), i][i, i]
Exerccio 2.I (AU 3.7.3*)
Quantas atribuies faz o algoritmo?
SumPowersOfTwo (a)
1 ~ 0
2 para i 1 at a faa
3 ) i
4 enquanto 2)2 = ) faa
5 ) )2
6 ~ ~ +1
7 devolva ~
14
AULA 3
Anlise assinttica
Notao O
CLRS 3.1
AU 3.4, p.96100 (muito bom!)
15
Funes de a:
5a
2
9a 4a +8 a3 +4
2

a +7 2
a3
loga
Qual maior: a
2
9 ou 4a +8?
Qual cresce mais?
Comparao assinttica (i.e., para a grande)
O()(a)) funes q no crescem mais
rpido que )(a)
funes menores ou iguais a
um mltiplo de )(a)
a
2
+99a O(a
2
)
33a
2
O(a
2
)
9a +2 O(a
2
)
0,00001a
3
200a
2
no O(a
2
)
16
Denio T(a) = O()(a)) se existem c e
a
0
positivos tais que
0 T(a) c )(a)
para todo a a
0
.
Mais informal: T(a) = O()(a)) se existe c 0 tq
0 T(a) c )(a) para todo a sucientemente grande.
T(a) = O()(a)) deve ser entendido como
T(a) O()(a))
Exemplo
Se T(a) 500)(a) para todo a 10
ento T(a) = O()(a))
Exemplo
10a
2
= O(a
3
)
Prova: Para a 0, temos 0 10a
2
10a
3
Outra prova: Para a 10, temos
0 10a
2
aa
2
= a
3
17
Exerccio 3.A
Prove que a
2
+10a +20 = O(a
2
)
Exerccio 3.B
Prove que 300 = O(1)
Exerccio 3.C
Prove que a3 = O(a)
verdade que a = O(a3)?
Exerccio 3.D
Prove que lga = O(log
10
a)
Exerccio 3.E
Prove que a = O(2
a
)
Exerccio 3.F
Prove que lga = O(a)
Exerccio 3.G
Prove que a1000 no O(1)
Exerccio 3.H
Prove que
1
2
a
2
no O(a)
18
Exerccio 3.I
Suponha T denida para a = 0, 1, . . .
Se T(a) = O(1), mostre que existe c

tal que
T(a) c

para todo a 0.
Se T(a) = O(a), mostre que existe c

tal que
T(a) c

a para todo a 1.
19
TAREFA 3
Exerccio 3.J
Prove que a
2
+999a +9999 = O(a
2
).
Exerccio 3.K
Prove que
1
2
a(a +1) = O(a
2
).
Exerccio 3.L
verdade que
1
100
a
2
999a 9999 = O(a)? Justique.
Exerccio 3.M
Suponha que )(a) = a
2
quando a par e )(a) = a
3
quando a
mpar. verdade que )(a) = O(a
2
)? verdade que )(a) = O(a
3
)?
verdade que a
2
= O()(a))? verdade que a
3
= O()(a))?
Exerccio 3.N
verdade que a
2
= O(2
a
)?
Exerccio 3.O
verdade que lga = O(

a)?
Exerccio 3.P
Suponha )(a) = 64alga e j(a) = 8a
2
, com a inteiro positivo.
Para que valores de a temos )(a) j(a)?
Exerccio 3.Q (bom!)
Suponha T e ) denidas para a = 1, 2, . . . Mostre que se
T(a) = O()(a)) e )(a) 0 para a 1 ento existe c

tal que
T(a) c

)(a) para todo a 1.


Exerccio 3.R (bom!)
Faz sentido dizer T(a) = O(a
2
) para a 3?
20
TAREFA ADICIONAL
Exerccio 3.S
verdade que 2
a
= O(a)? verdade que a = O(lga)? Justique.
Exerccio 3.T
verdade que a +

a O(a)? verdade que a O(

a)?
verdade que a
23
O(

a)? verdade que



a +1000 O(a)?
Exerccio 3.U
verdade que lga = O(a
12
)? verdade que

a = O(lga)?
verdade que lga = O(a
13
)? Justique. (Sugesto: prove, por
induo, que lga a para todo nmero real a 1.)
Exerccio 3.V
verdade que lga = O(lga)?
21
AULA 4
Anlise de algoritmos iterativos
CLRS 2.12.2
AU 3.3, 3.6 (muito bom)
22
Anlise com notao O
ORDENA-POR-INSERO (, j, )
1 para ) j +1 at faa
2 chave [)]
3 i ) 1
4 enquanto i j e [i] chave faa
5 [i +1] [i]
6 i i 1
7 [i +1] chave
Quanto tempo o algoritmo consome?
Tamanho de uma instncia: a := j +1
linha consumo de todas as execues da linha
1 O(a)
2 O(a)
3 O(a)
4 aO(a) = O(a
2
)
5 aO(a) = O(a
2
)
6 aO(a) = O(a
2
)
7 O(a)
total O(3a
2
+4a) = O(a
2
)
23
Explicao:
Bloco de linhas 46 executado a vezes;
cada execuo consome O(a);
todas juntas consomem aO(a).
pa!
Quem garante que aO(a) = O(a
2
)?
Quem garante que
O(a
2
) +O(a
2
) +O(a
2
) = O(3a
2
)?
Quem garante que O(3a
2
+4a) = O(a
2
)?
Veja exerccios na prxima aula.
Concluso:
O algoritmo consome
O(a
2
) unidades de tempo
Notao O cai como uma luva!
24
Anlise da intercalao
Dados [j . . q] e [q+1. . ] crescentes,
rearranjar [j . . ] em ordem crescente.
Para que valores de q o problema faz sentido?
j q
11 33 55 77 99 22 44 66 88
1
INTERCALA (, j, q, )
00 crie vetor 1[j . . ]
01 para i j at q faa
02 1[i] [i]
03 para ) q +1 at faa
04 1[ +q +1 )] [)]
05 i j
06 )
07 para I j at faa
08 se 1[i] 1[)]
09 ento [I] 1[i]
10 i i +1
11 seno [I] 1[)]
12 ) ) 1
25
00 crie vetor 1[j . . ]
01 para i j at q faa
02 1[i] [i]
03 para ) q +1 at faa
04 1[ +q +1 )] [)]
05 i j
06 )
07 para I j at faa
08 se 1[i] 1[)]
09 ento [I] 1[i]
10 i i +1
11 seno [I] 1[)]
12 ) ) 1
Quanto tempo consome
em funo de a := j +1?
linha consumo de todas as execues da linha
00 O(a)
0104 O(a)
0506 O(1)
07 aO(1) = O(a)
08 aO(1) = O(a)
0912 aO(1) = O(a)
Consumo total = O(5a +1) = O(a)
26
TAREFA 4
Exerccio 4.A
Problema: rearranjar um vetor [j . . ] em ordem crescente. Escreva
um algoritmo de seleo para o problema. Analise a correo do
algoritmo (ou seja, encontre e prove os invariantes apropriados).
Analise o consumo de tempo do algoritmo; use notao O.
Exerccio 4.B
Analise a correo e o consumo de tempo do seguinte algoritmo:
EXERC (, j, )
1 q (j +)2
2 ORDENA-POR-INSERO(, j, q)
3 ORDENA-POR-INSERO(, q +1, )
4 INTERCALA(, j, q, )
27
AULA 5
Mais notao O
CLRS 3.1
AU 3.5, p.101108
28
Exerccio 5.A
Interprete e prove a armao
O(a
2
) +O(a
2
) +O(a
2
) = O(3a
2
).
Exerccio 5.B
Interprete e prove a armao aO(a) = O(a
2
).
Exerccio 5.C
Interprete e prove a armao
O(3a
2
+4a) = O(a
2
).
Exerccio 5.D (propriedade transitiva)
Suponha T(a) = O()(a)) e )(a) = O(j(a)).
Mostre que T(a) = O(j(a)).
D um exemplo interessante.
Exerccio 5.E (regra da soma, caso especial)
Suponha que T(a) = O()(a)) e mostre que
T(a) +)(a) = O()(a)).
D um exemplo interessante.
29
Exerccio 5.E (regra da soma, geral)
Suponha T
1
(a) = O()
1
(a)) e T
2
(a) = O()
2
(a)).
Se )
1
(a) = O()
2
(a)), mostre que
T
1
(a) +T
2
(a) = O()
2
(a)).
Exerccio 5.F
O que signica T(a) = a
2
+O(a)?
Mostre que se T(a) = a
2
+O(a) ento
T(a) = O(a
2
).
30
TAREFA 5
Exerccio 5.G
O que signica T(a) = aO(lga)? Mostre que T(a) = aO(lga) se e
s se T(a) = O(alga).
Exerccio 5.H
Interprete e prove a armao 7 O(a) = O(a).
Exerccio 5.I
Interprete e prove a armao O(a) +O(a) = O(a).
Exerccio 5.J
Prove que O(a) = O(a
2
). verdade que O(a
2
) = O(a)?
Exerccio 5.K
Interprete e prove a armao (a +2) O(1) = O(a).
Exerccio 5.L
Interprete e prove a armao O(1) + +O(1)
. .
a+2
= O(a).
Exerccio 5.M
Prove que O(1) +O(1) +O(1) = O(1).
verdade que O(1) = O(1) +O(1) +O(1)?
Exerccio 5.N
Interprete e prove a armao O()) +O(j) = O() +j).
31
AULA 6
Cotas inferiores:
notao
CLRS 3.1
32
Denio T(a) = ()(a)) se existem c e
a
0
positivos tq
0 c )(a) T(a)
para todo a a
0
Mais informal: T(a) = ()(a)) se existe c 0 tq
0 c)(a) T(a) para todo a sucientemente grande.
Exemplo: Se T(a) 0.001a
2
para todo a 8
ento T(a) = (a
2
).
Exemplo: INTERCALA O(a) e tambm (a).
Fcil: T = ()) ) = O(T)
Denio
T = ()) T = O()) e T = ())
33
Alguns nomes de classes :
(1) constante
(loga) logartmica
(a) linear
(aloga) aloga
(a
2
) quadrtica
(a
3
) cbica
(2
a
) exponencial
Exerccio 6.A
J sabemos que ORDENA-POR-INSERO
O(a
2
). Mostre que o algoritmo (a).
Exerccio 6.B
Mostre que ORDENA-POR-INSERO (a
2
)
no pior caso.
Exerccio 6.C
Mostre que ORDENA-POR-INSERO O(a)
no melhor caso.
34
TAREFA 6
Exerccio 6.D
Prove que a
2
+10a +20 = (a
2
). Prove que a
2
10a 20 = (a
2
).
Exerccio 6.E
Prove que a = (lga).
Exerccio 6.F
Prove que lga = (log
10
a).
Exerccio 6.G
verdade que 2
a
= (3
a
)?
Exerccio 6.H
verdade que 2a
3
+5

a = (a
3
)?
Exerccio 6.I
Suponha que os algoritmos , e B s dependem de um parmetro a.
Suponha ainda que , consome S(a) unidades de tempo enquanto B
consome T(a) unidades de tempo. Quero provar que algoritmo ,
pelo menos to eciente quanto o algoritmo B (no sentido
assinttico). Devo mostrar que existe )(a) tal que
S(a) = O()(a)) e T(a) = O()(a))?
S(a) = O()(a)) e T(a) = ()(a))?
S(a) = ()(a)) e T(a) = O()(a))?
S(a) = ()(a)) e T(a)()(a))?
Que devo fazer para mostrar que , mais eciente que B?
Exerccio 6.J
Mostre que o consumo de tempo do algoritmo INTERCALA
(a), sendo a o nmero de elementos do vetor que o algoritmo
recebe.
35
AULA 7
Recurso
AU 2.6, 2.7, 2.9
36
Recurso: resolve uma instncia do problema
a partir das solues de instncias menores
"To understand recursion, we must rst understand recursion.
Exerccio 7.A
Problema: vericar se elemento de [j . . ].
(Para q valores de j e faz sentido?)
Escreva algoritmo recursivo.
Exerccio 7.B
Problema: vericar se elemento de vetor
crescente [j . . ]. Escreva algoritmo recursivo
de busca linear e outro de busca binria.
Exerccio 7.C
Escreva verso recursiva da ordenao por
insero.
37
TAREFA 7
Exerccio 7.D (Verso sosticada de busca)
Problema: vericar se elemento de vetor crescente [j . . ].
Escreva um algoritmo que devolva ) tal que
[)] < [) +1] .
Quais os possveis valores de ) ? Escreva duas verses: uma linear e
uma binria. Prove que os seus algoritmos esto corretos.
Exerccio 7.E
Escreva uma verso recursiva do algoritmo de ordenao por seleo.
38
AULA 8
Recorrncias
CLRS 4.14.2
AU 3.9, 3.11
39
Recorrncia =
= frmula que dene uma funo
em termos dela mesma
= algoritmo recursivo que calcula uma funo
Exemplo 1
T(1) = 1
T(a) = T(a 1) +3a +2 para a = 2, 3, 4, . . .
Dene funo T sobre inteiros positivos:
a T(a)
1 1
2 9
3 20
4 34
5 51
6 71
40
Resolver uma recorrncia =
= obter uma frmula fechada para T(a)
Mtodo da substituio:
chute frmula e verique por induo
Exemplo 1 (continuao)
Eu acho que T(a) =
3
2
a
2
+
7
2
a 4.
Vericao:
Se a = 1 ento T(a) = 1 =
3
2
+
7
2
4.
Tome a 2 e suponha que a frmula est certa
para a 1:
T(a) = T(a 1) +3a +2
hi
=
3
2
(a 1)
2
+
7
2
(a 1) 4 +3a +2
=
3
2
a
2
3a +
3
2
+
7
2
a
7
2
4 +3a +2
=
3
2
a
2
+
7
2
a 4 .
Bingo!
41
Como adivinhei frmula fechada?
rvore da recorrncia:
T(a) 3a+2
[
T(a1)
3a+2
[
3(a1)+2
[
T(a2)
3a+2
[
3a1
[
3(a2)+2
[
T(a3)
3a+2
[
3a1
[
3a4
[
.
.
.
[
8
[
T(1)
1 +a 1 nveis
T(a) = (3a +2) +(3a 1) + +8 +T(1)
=
3
2
a
2
+
7
2
a 4
42
Exemplo 2
T(1) = 1
T(a) = 2T(a2) +7a +2 para a = 2, 3, 4, 5, . . .
No uma recorrncia! No faz sentido!
Exemplo 3
G(1) = 1
G(a) = 2G(a2) +7a +2 para a = 2, 4, . . , 2
i
, . .
a G(a)
1 1
2 18
4 66
8 190
16 494
Frmula fechada: G(a) = ?
43
Acho que G da forma alga
a G(a) 6alga 7alga 8alga a
2
1 1 0 0 0 1
2 18 12 14 16 4
4 66 48 56 64 16
8 190 144 168 192 64
16 494 384 448 512 256
32 1214 960 1120 1280 1024
64 2878 2304 2688 3072 4096
128 6654 5376 6272 7168 16384
256 15102 12288 14336 16384 65536
44
Acho que a frmula fechada
G(a) = 7alga +3a 2
para a = 1, 2, 4, 8, 16, . . .
Prova:
Se a = 1 ento G(a) = 1 = 7 1lg1 +3 1 2.
Se a 2 ento
G(a) = 2G(
a
2
) +7a +2
hi
= 2(7
a
2
lg
a
2
+3
a
2
2) +7a +2
= 7a(lga 1) +3a 4 +7a +2
= 7alga 7a +3a 2 +7a
= 7alga +3a 2
Bingo!
45
Como adivinhei frmula fechada?
rvore da recorrncia:
G(a) 7a +2
\
G(
a
2
) G(
a
2
)
7a +2
\
7
a
2
+2 7
a
2
+2
\ \
G(
a
4
) G(
a
4
) G(
a
4
) G(
a
4
)
7a +2
\
7
a
2
+2 7
a
2
+2
\ \
7
a
4
+2 7
a
4
+2 7
a
4
+2 7
a
4
+2
.
.
.
.
.
.
.
.
.
.
.
.
G(1) G(1) . . . . . . G(1) G(1)
total de 1 +lga nveis
46
nvel soma no nvel
0 7a +2
1 7a +4
2 7a +8
.
.
.
.
.
.
I 1 7a +2
I
I 2
I
G(1)
a = 2
I
G(a) = 7a +2
1
+7a +4
2
+ +7a +2
lga
+2
lga
G(1)
= 7alga +(2 +4 + +2
lga
) +2
lga
= 7alga +2 2
lga
2 +a
= 7alga +2a 2 +a
= 7alga +3a 2
Lembrete: a
0
+ +a
I
=
a
I+1
1
a 1
CLRS (A.5), p.1060
47
Exemplo 3 (continuao)
mais fcil mostrar que G(a) = O(alga).
Vou provar que G(a) 9alga
quando a = 2, 4, 8, 16, . . , 2
i
, . . .
Prova: Se a = 2, G(a) = 18 = 9 2 lg2.
Se a 4,
G(a) = 2G(a2) +7a +2
hi
2 9(a2) lg(a2) +7a +2
= 9a(lga 1) +7a +2
= 9alga 2a +2
< 9alga (pois a 1)
Da linha 1 para a linha 2, a hiptese de induo vale
pois 2 a2 < a.
48
TAREFA 8
Exerccio 8.A
Seja T a funo denida pela recorrncia
T(1) = 1
T(a) = T(a 1) +2a 2 para a = 2, 3, 4, 5, . . .
Verique que a recorrncia honesta, ou seja, de fato dene uma
funo. A partir da rvore da recorrncia, adivinhe uma boa cota
assinttica para T(a); d a resposta em notao O. Prove a cota
pelo mtodo da substituio.
Exerccio 8.B
Resolva a recorrncia
T(1) = 1
T(a) = T(a 2) +2a +1 para a = 2, 3, 4, 5, . . .
Desenhe a rvore da recorrncia. D a resposta em notao O.
Exerccio 8.C
Resolva a recorrncia
T(1) = 1
T(2) = 2
T(a) = T(a 2) +2a +1 para a = 3, 4, 5, 6, . . .
Exerccio 8.D
Resolva a recorrncia
T(1) = 1
T(a) = T(a2) +1 para a = 2, 3, 4, 5, . . .
Exerccio 8.E
Resolva a recorrncia
T(1) = 1
T(a) = T(a2) +1 para a = 2, 3, 4, 5, . . .
Exerccio 8.F
Resolva a recorrncia
T(1) = 1
T(a) = T(a2) +a para a = 2, 3, 4, 5, . . .
49
Exerccio 8.G
Resolva a recorrncia
T(1) = 1
T(a) = 2T(a2) +a para a = 2, 3, 4, 5, . . .
Exerccio 8.H
Resolva a recorrncia
T(1) = 1
T(a) = 2T(a2) +a para a = 2, 3, 4, 5, . . .
50
AULA 9
Recorrncias com notao O
CLRS 4.14.2
AU 3.9, 3.11
51
Classe O da soluo de uma recorrncia
No fao questo de soluo exata:
basta soluo aproximada
Exemplo (a potncia de 2):
G(1) = 1
G(a) = 2G(a2) +7a +2 para a 2
Soluo exata (a potncia de 2):
G(a) = 7alga +3a 2
Soluo aproximada:
G(a) = O(alga)
Em geral, mais fcil obter e provar soluo aproximada
que soluo exata
52
Dica prtica (sem prova)
A soluo da recorrncia
T(1) = 1
T(a) = 2T(a2) +7a +2 para a = 2, 3, 4, 5, . .
est na mesma classe que a soluo de
T

(1) = 1
T

(a) = 2T

(a2) +a para a = 2
1
, 2
2
, 2
3
, . . .
e na mesma classe que a soluo de
T

(4) = 10
T

(a) = 2T

(a2) +a para a = 2
3
, 2
4
, 2
5
, . . .
53
Recorrncias com O do lado direito
A recorrncia
T(a) = 2T(a2) +O(a)
representa todas as recorrncias da forma
T(a) = 2T(a2) +1(a) em que 1(a) = O(a)
Melhor:
representa todas as recorrncias do tipo
T

(a) = o para a = a
0
1
T

(a) 2T

(a2) +ca para a a


0
quaisquer que sejam o, c 0 e a
0
0
(poderamos tomar a
0
= 1; veja ex 3.I)
Tambm representa todas as do tipo
T

(a) = o para a = 2
I1
T

(a) 2T

(a2) +ca para a = 2


I
, 2
I+1
, . . .
quaisquer que sejam o, c 0 e I 0
As solues exatas vo depender de o, c, a
0
, I;
mas todas estaro na mesma classe O
(especicamente, em O(alga))
54
Dicas prticas
recorrncia condio soluo
T(a) = T(a1) +4a
3
(a
3+1
)
T(a) = 6T(a1) +4a
3
(6
a
)
T(a) = oT(a5) +4a
3
o < 5
3
(a
3
)
T(a) = oT(a5) +4a
3
o = 5
3
(a
3
loga)
T(a) = oT(a5) +4a
3
o 5
3
(a
log
5
o
)
Veja AU, sec 3.11, p.151
A mesma coisa, escrita de maneira um pouco diferente
(Master Theorem, CLRS, sec. 4.3, p.73):
Suponha T(a) = oT(a5) +)(a) para algum o 1.
Ento, em geral,
se )(a) = O(a
log
5
o
) ento T(a) = (a
log
5
o
)
se )(a) = (a
log
5
o
) ento T(a) = (a
log
5
o
lga)
se )(a) = (a
log
5
o+
) ento T(a) = ()(a))
para qquer 0
No lugar de
a5, posso escrever a5 ou a5
5, posso escrever qualquer o 1
4, posso escrever qualquer nmero real
4a
3
posso escrever qualquer polinmio de grau 3
3, posso escrever qualquer inteiro I 0
6, posso escrever qualquer nmero o 1
55
TAREFA 9
Exerccio 9.A
A que classe O pertencem as soluo de recorrncia do tipo
T(a) = T(a3) +O(1)?
Exerccio 9.Aa
Seja T a funo denida pela recorrncia
T(1) = 1
T(a) = 4T(a2) +a para a = 2, 3, 4, 5, . . .
A que ordem pertence T ?
Exerccio 9.B [CLRS 4.2-1]
Seja T a funo denida pela recorrncia
T(1) = 1
T(a) = 3T(a2) +a para a = 2, 3, 4, 5, . . .
A partir da rvore da recorrncia, adivinhe a que classe pertence
T(a). Prove a cota pelo mtodo da substituio.
Exerccio 9.C
Resolva a recorrncia
T(1) = 1
T(a) = 2T(a2) +7a +2 para a = 2, 3, 4, 5, . . .
Exerccio 9.D
Resolva a recorrncia T(a) = T(a 2) +O(a).
Exerccio 9.E
Resolva a recorrncia T(a) = 5T(a 1) +O(a).
56
AULA 10
Anlise
de algoritmos recursivos
CLRS 2.3
AU 2.8, 3.9, 3.10
57
Exemplo 1: Ordenao por insero
Rearranja [j . . ], com j , em ordem crescente
ORDENA-POR-INS (, j, )
1 se j <
2 ento ORDENA-POR-INS (, j, 1)
3 chave []
4 i 1
5 enquanto i j e [i] chave faa
6 [i +1] [i]
7 i i 1
8 [i +1] chave
O algoritmo est correto?
T(a) := consumo de tempo mximo
quando j +1 = a
linha consumo na linha
1 O(1)
2 T(a 1)
3 O(1)
4 O(1)
5 O(a)
6 O(a)
7 O(a)
8 O(1)
T(a) = T(a 1) +O(3a +4)
58
T(a) = T(a 1) +O(a)
Traduo: existe fo 1(a) em O(a) tq
T(a) = T(a 1) +1(a) para todo a
sucientemente grande
Mais traduo: Existem o, c 0 e a
0
0 tq
T(a
0
1) = o e T(a) T(a 1) +ca para todo a a
0
(em virtude do ex 3.I poderamos tomar a
0
= 0)
Soluo: T(a) = O(a
2
)
Prova?
Exemplo:
T(1) = 1
T(a) = T(a 1) +3a +4 para a 2
Soluo: T(a) 4a
2
para a 1
Prova?
59
Exemplo 2: Merge-Sort
Rearranja [j . . ], com j , em ordem crescente.
MERGE-SORT (, j, )
1 se j <
2 ento q (j +)2
3 MERGE-SORT(, j, q)
4 MERGE-SORT(, q +1, )
5 INTERCALA(, j, q, )
j q
99 99 99 99 99 99 99 99 99
O algoritmo est correto?
T(a) := consumo de tempo mximo
quando j +1 = a
linha consumo na linha
1 O(1)
2 O(1)
3 T(a2)
4 T(a2)
5 O(a)
T(a) = T(a2) +T(a2) +O(a +2)
60
T(a) = T(a2) +T(a2) +O(a)
Soluo: T(a) = O(alga).
Prova?
61
AULA 11
Heapsort
CLRS 6
(veja tb CLRS B.5.3)
62
Heap sort
Rearranja [1. . a] em ordem crescente.
HEAPSORT (, a)
1 BUILD-MAX-HEAP(, a)
2 para a a decrescendo at 2
3 faa [1] [a]
4 MAX-HEAPIFY(, a1, 1)
1 a a
66 zz ii SS gg gg
Invariante: no incio de cada execuo de 24,
[a+1. . a] grandes, ordem crescente
[1. . a] pequenos, max-heap
63
Estrutura de heap
01
02 03
04 05 06 07
08 09 10 11 12 13 14
16 17 18 19 20 21 22 23 24 25 26
[1. . 29]
lho esquerdo de i 2i
lho direito de i 2i +1
pai de i i2
nvel de i lgi (nvel j tem 2
j
ns)
altura de i lg
a
i

raiz (i = 1) nvel = 0
folha altura = 0
[1. . a] um max-heap se [
_
i
2
_
] [i]
para cada n i.
64
Exerccio 11.A CLRS 6.1-2
A altura de i em [1. . a] o comprimento da
mais longa seqncia da forma
)(i), )()(i)), )()()(i))), . . . ,
onde )(i) vale 2i ou 2i +1. Mostre que a altura
de i
lg
a
i

65
Exerccio 11.B CLRS 6.3-3
Mostre que um heap [1. . a] tem no mximo
a2
I+1
ns com altura I.
EXEMPLO: .
I
= nmero de ns altura I
a a2 .
0
a2 a4 .
1
a4
16 8 8 8 4 4 4
17 8 9 9 4 4 5
18 9 9 9 4 5 5
19 9 10 10 4 5 5
20 10 10 10 5 5 5
21 10 11 11 5 5 6
22 11 11 11 5 6 6
23 11 12 12 5 6 6
24 12 12 12 6 6 6
66
Exerccio 11.C
Mostre que a2
I+1
a2
I
quando
I lga.
67
Rotina bsica de manipulao de max-heap
MAX-HEAPIFY (, a, i)
01 | 2i
02 2i +1
03 se | a e [|] [i]
04 ento maior |
05 seno maior i
06 se a e [] [maior]
07 ento maior
08 se maior ,= i
09 ento [i] [maior]
10 MAX-HEAPIFY(, a, maior)
Recebe [1. . a] e i 1 tais que
subrvores com raiz 2i e 2i +1 so max-heaps.
Rearranja de modo que subrvore com raiz i seja
max-heap.
I := altura de i = lg
a
i

T(I) := consumo de tempo no pior caso
68
Recorrncia:
T(I) = T(I 1) +O(1)
pois altura de maior I 1
Soluo: T(I) = O(I)
Prova?
Como I lga, podemos dizer que consumo de
tempo de MAX-HEAPIFY(, a, i)
O(lga)
69
Construo de um max-heap
BUILD-MAX-HEAP (, a)
2 para i a2 decrescendo at 1
3 faa MAX-HEAPIFY(, a, i)
T(a) := consumo de tempo no pior caso
T(a) =
a
2
O(lga) = O(alga).
Anlise mais cuidadosa: T(a) = O(a).
PROVA:
Digamos que MAX-HEAPIFY(, a, i) consome
I = lg
a
i
unidades de tempo.
Ento
70
T(a) =
lga

I=1
_
a
2
I+1
_
I

lga

I=1
a
2
I
I
a
_
1
2
1
+
2
2
2
+
3
2
3
+ +
lga
2
lga
_
< a
12
(1 12)
2
= 2a
Comentrio: a
0
+a
1
+a
2
+a
3
+ =
1
1 a
1a
0
+2a
1
+3a
2
+ =
1
(1 a)
2
1a
1
+2a
2
+3a
3
+ =
a
(1 a)
2
71
Consumo de tempo do Heap sort
HEAPSORT (, a)
1 BUILD-MAX-HEAP(, a)
2 para a a decrescendo at 2
3 faa [1] [a]
4 MAX-HEAPIFY(, a1, 1)
linha consumo na linha
1 O(a)
2 O(a)
3 O(a)
4 aO(lga)
Total:O(alga)
72
AULA 12
Filas com prioridades
CLRS 6.5
73
Filas com prioridade
Tipo abstrato de dados (= abstract data type)
1 a

Como organizar [1. . a] de modo que as operaes


consulte mximo
extraia mximo
aumenta valor de elemento
insira novo elemento
sejam ecientes?
Vetor sem ordem alguma? crescente? decrescente?
Implementaes com max-heap:
HEAP-MAX (, a)
1 devolva [1]
Consome O(1)
74
HEAP-EXTRACT-MAX (, a) a 1
3 max [1]
4 [1] [a]
5 a a1
6 MAX-HEAPIFY (, a, 1)
7 devolva max
HEAP-INCREASE-KEY (, i, chave) chave [i]
3 [i] chave
4 enquanto i 1 e [i2] < [i]
5 faa [i] [i2]
6 i i2
MAX-HEAP-INSERT (, a, chave)
1 a a+1
2 [a]
3 HEAP-INCREASE-KEY (, a, chave)
Todos consomem O(lga)
75
AULA 13
Exerccio
relevante para o Quicksort
76
Exerccio 13.A
T(1) = 1
T(a) = T(a3) +T(2a3) +5a
para a = 2, 3, 4, . . .
Faz sentido? Soluo?? T(a) = O(??)
Para adivinhar a cara da soluo, vou tentar
uma recorrncia mais simples:
T(1) = 1
T(a) = T(a3) +T(2a3) +5a
para a = 2, 3, 4, . . . Mas isso no faz sentido!
Ento que tal essa:
T(a) = 1 para a racional tq
1
3
< a 1
T(a) = T(a3) +T(2a3) +5a
para a racional, a 1.
77
rvore da recorrncia:
5a
\
5
a
3
5
2a
3
\ \
5
a
9
5
2a
9
5
2a
9
5
4a
9
\ \ \
5
4a
9
5
4a
27
5
8a
27
.
.
.
soma em cada horizontal = 5a
nmero de nveis log
32
a
T(a) = a soma de tudo
T(a) 5a log
32
a + 1 + +1
. .
log
32
a
T(a) = O(alga)
78
De volta recorrncia: T(1) = 1 e
T(a) = T(a3) +T(2a3) +5a
para a = 2, 3, 4, . . .
a T(a)
1 1
2 1 +1 +5 2 = 12
3 1 +12 +5 3 = 28
4 12 +12 +5 4 = 44
Vou mostrar que T(a) 100alga para
a = 2, 3, 4, 5, 6, . . .
Prova:
Para a = 2 temos T(2) = 12 < 100 2 lg2.
Para a = 3 temos T(3) = 28 < 100 3 lg3.
Suponha agora que a 3. Ento
79
T(a) = T(
a
3
) +T(
2a
3
) +5a
hi
100
a
3
lg
a
3
+100
2a
3
lg
2a
3
+5a
100
a +2
3
lg
a
3
+100
2a
3
lg
2a
3
+5a
< 100
a +2
3
(lg
a
3
+1) +100
2a
3
lg
2a
3
+5a
= 100
a +2
3
lg
2a
3
+100
2a
3
lg
2a
3
+5a
= 100
a
3
lg
2a
3
+100
2
3
lg
2a
3
+100
2a
3
lg
2a
3
+5a
< 100alg
2a
3
+67lg
2a
3
+5a
= 100alga +100alg
2
3
+67lga +67lg
2
3
+5a
< 100alga +100a(0.58) +67lga +67(0.58) +5a
< 100alga 58a +67lga 38 +5a
= 100alga 53a +67lga 38
< 100alga
Bingo!
80
AULA 14
Quicksort
CLRS 7
81
Quicksort
Rearranja [j . . ] em ordem crescente.
QUICKSORT (, j, )
1 se j <
2 ento q PARTICIONE(, j, )
3 QUICKSORT(, j, q 1)
4 QUICKSORT(, q +1, )
j q
zz zz zz ii ii SS gg SS gg SS
No comeo da linha 3,
[j . . q1] [q] [q+1. . ]
82
PARTICIONE rearranja de modo que
j q e [j . . q1] [q] [q+1. . ]
PARTICIONE (, j, )
1 a [] a o piv
2 i j 1
3 para ) j at 1
4 faa se [)] a
5 ento i i +1
6 [i] [)]
7 [i +1] []
8 devolva i +1
Invariantes: no comeo de cada iterao de 36,
[j . . i] a [i+1. . )1] a [] = a
j i )
zz zz zz SS SS SS ii gg ii gg
Consumo de tempo de PARTICIONE (a),
sendo a = j +1.
83
Consumo de tempo do Quicksort
QUICKSORT (, j, )
1 se j <
2 ento q PARTICIONE(, j, )
3 QUICKSORT(, j, q 1)
4 QUICKSORT(, q +1, )
T(a) := consumo de tempo no pior caso
sendo a := j +1
Recorrncia grosseira:
T(a) = T(0) +T(a 1) +(a)
Soluo: T(a) = (a
2
)
Recorrncia cuidadosa:
T(a) = max
0Ia1
_
T(I) +T(aI1)
_
+(a)
Soluo: T(a) = (a
2
)
Prova?
84
EXEMPLO CONCRETO: S(0) = S(1) = 1 e
S(a) = max
0Ia1
_
S(I) +S(aI1)
_
+a
para a 2.
a S(a)
0 1
1 1
2 2 +2
3 5 +3
4 9 +4
Vou provar que S(a) a
2
+1 para a 0.
Prova: Trivial para a 1. Se a 2 ento
S(a) = max
0Ia1
_
S(I) +S(aI1)
_
+a
hi
max
0Ia1
_
I
2
+1 +(aI1)
2
+1
_
+a
= (a 1)
2
+2 +a exerc 14.E
= a
2
a +3
a
2
+1 .
Prove que S(a)
1
2
a
2
para a 1.
85
Tempo do QUICKSORT no melhor caso:
1(a) = 1(
_
a1
2
_
) +1(
_
a1
2
_
) +(a)
Soluo: 1(a) = (alga)
86
TAREFA 14
Exerccio 14.A
Submeta ao algoritmo PARTICIONE um vetor com a elementos
iguais. Como o algoritmo permuta o vetor recebido? Quantas trocas
faz (linhas 6 e 7) entre elementos do vetor?
Exerccio 14.B [CLRS 7.2-2]
Qual o consumo de tempo do QUICKSORT quando aplicado a um
vetor com a elementos iguais?
Exerccio 14.C [CLRS 7.2-3]
Mostre que o consumo de tempo do QUICKSORT (a
2
) quando
aplicado a um vetor crescente com a elementos distintos.
Exerccio 14.D [CLRS 7.4-1, modicado]
Seja S a funo denida sobre os inteiros positivos pela seguinte
recorrncia: S(0) = S(1) = 1 e
S(a) = max
0Ia1
S(I) +S(aI1) +a
quando a 2. Mostre que S(a)
1
2
a
2
para a 1.
Exerccio 14.E [CLRS 7.4-3]
Mostre que I
2
+(a I 1)
2
atinge o mximo para 0 I a 1
quando I = 0 ou I = a 1.
Exerccio 14.F
verdade que 22a33 = 4a9? verdade que
22a33 = 4a9?
Exerccio 14.G [CLRS 7-4]
Considere a seguinte variante do algoritmo Quicksort:
QUICKSORT

(, j, )
enquanto j < faa
q PARTICIONE(, j, )
QUICKSORT

(, j, q 1)
j q +1
Mostre que a pilha de recurso pode atingir altura proporcional a a,
onde a := j +1. Modique o cdigo de modo que a pilha de
recurso tenha altura O(lga). (Veja enunciado completo em CLRS
p.162.)
87
AULA 15
Consumo mdio de tempo
do Quicksort
CLRS 7.4
88
Quicksort
Consumo de tempo no pior caso: (a
2
)
No melhor caso: (alga)
Consumo mdio?
Diviso
1
3
para
2
3
:
1(a) = 1(
_
a1
3
_
) +1(
_
2a2
3
_
) +(a)
Soluo: 1(a) = (alga) veja exerccio 13.A
Diviso
1
10
para
9
10
:
1(a) = 1(
_
a1
10
_
) +1(
_
9a9
10
_
) +(a)
Soluo: 1(a) = (alga)
Isso sugere que consumo mdio (alga).
Conrmao?
89
EXEMPLO:
Nmero mdio de execues da linha 4 do PARTICIONE.
Suponha que [j . . ] permutao de 1. . a
[j . . ] execs
1,2 1
2,1 1
mdia 1
[j . . ] execs
1,2,3 2+1
2,1,3 2+1
1,3,2 2+0
3,1,2 2+0
2,3,1 2+1
3,2,1 2+1
mdia 16/6
[j . . ] execs
1,2,3,4 3+3
2,1,3,4 3+3
1,3,2,4 3+2
3,1,2,4 3+2
2,3,1,4 3+3
3,2,1,4 3+3
1,2,4,3 3+1
2,1,4,3 3+1
1,4,2,3 3+1
4,1,2,3 3+1
2,4,1,3 3+1
4,2,1,3 3+1
[j . . ] execs
1,3,4,2 3+1
3,1,4,2 3+1
1,4,3,2 3+1
4,1,3,2 3+1
3,4,1,2 3+1
4,3,1,2 3+1
2,3,4,1 3+3
3,2,4,1 3+3
2,4,3,1 3+2
4,2,3,1 3+2
3,4,2,1 3+3
4,3,2,1 3+3
mdia 116/24
O nmero mdio coincide exatamente com a frmula
E[A] =

a1
o=1

ao
I=1
2
I+1
dada algumas transparncia adiante.
90
Algo melhor: Quicksort aleatorizado
PARTICIONE-ALEA (, j, )
1 i RANDOM(j, )
2 [i] []
3 devolva PARTICIONE(, j, )
QUICKSORT-ALE (, j, )
1 se j <
2 ento q PARTICIONE-ALEA(, j, )
3 QUICKSORT-ALE(, j, q 1)
4 QUICKSORT-ALE(, q +1, )
Anlise do consumo medio?
Basta contar o nmero esperado de
comparaes na linha 4 do PARTICIONE
91
Suponha [j . . ] permutao de 1. . a
Quero calcular
A = total de comparas [)] a
=
a1

o=1
a

o=o+1
A
oo
A
oo
= nmero de comparaes entre o e o
EXEMPLO:
1 3 6 2 5 7 4
1 3 2 4 5 7 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 1 0 1 0 0 0
2 1 1 1 0 0 0
3 0 1 1 0 0 0
4 1 1 1 1 1 1
5 0 0 0 1 1 0
6 0 0 0 1 1 1
7 0 0 0 1 0 1
92
Supondo o < o,
A
oo
=
1 se primeiro piv em o, . . . , o o ou o
0 caso contrrio
Pr A
oo
=1 =
1
o o +1
+
1
o o +1
A =
a1

o=1
a

o=o+1
A
oo
E[A] = ?
93
E[A] =
a1

o=1
a

o=o+1
E[A
oo
]
=
a1

o=1
a

o=o+1
Pr A
oo
=1
=
a1

o=1
a

o=o+1
2
o o +1
=
a1

o=1
ao

I=1
2
I +1
<
a1

o=1
2(
1
1
+
1
2
+ +
1
a
)
< 2a(
1
1
+
1
2
+ +
1
a
)
< 2a(lna +1) CLRS (A.7), p.1060
Consumo esperado do QUICKSORT-ALE:
O(alga)
94
AULA 16
E por falar em
anlise probabilstica
e algoritmos aleatorizados . . .
CLRS 5 e C.2C.3
95
Hiring problem:
Encontrar o mximo de permutao [1. . a]
de 1, . . . , a
MAX (, a)
1 max 0
2 para i 1 at a
3 faa se [i] max
4 ento max [i]
5 devolva max
Quantas vezes linha 4 executada?
Melhor caso, pior caso, caso mdio
Suponha que [1. . a]
permutao aleatria uniforme
de 1, . . . , a
isto , cada permutao tem probabilidade 1a!
96
EXEMPLO: nmero de execues da linha 4
[1. . 2] linha 14
1,2 2
2,1 1
E[A] 3/2
[1. . 3] linha 14
1,2,3 3
1,3,2 2
2,1,3 2
2,3,1 2
3,1,2 1
3,2,1 1
E[A] 11/6
[1. . 4] linha 14
1,2,3,4 4
1,2,4,3 3
1,3,2,4 3
1,3,4,2 3
1,4,2,3 2
1,4,3,2 2
2,1,3,4 3
2,1,4,3 2
2,3,1,4 3
2,3,4,1 3
2,4,1,3 2
2,4,3,1 2
[1. . 4] linha 14
3,1,2,4 2
3,1,4,2 2
3,2,1,4 2
3,2,4,1 2
3,4,1,2 2
3,4,2,1 2
4,1,2,3 1
4,1,3,2 1
4,2,1,3 1
4,2,3,1 1
4,3,1,2 1
4,3,2,1 1
E[A] 50/24
97
Variveis aleatrias:
A
i
=
1 se max [i] executado
0 caso contrrio
A = nm total de execs da linha 4
= A
1
+ +A
a
Esperanas:
E[A
i
] = probabilidade de que [i] seja
mximo em [1. . i]
= 1i
E[A] = E[A
1
+ +A
a
]
= E[A
1
] + +E[A
a
]
= 11 + +1a
< lna +1
= O(lga)
2.92 <
1
1
+ +
1
10
< 2.93 < 3.30 < 1 +ln10
98
Como garantir permutao aleatria uniforme?
MAX-ALEATORIZADO (, a)
0 PERMUTE()
1 max 0
2 para i 1 at a
3 faa se [i] max
4 ento max [i]
5 devolva max
Linha 0 faz uma permutao aleatria uniforme
dos elementos de
Como?
99
Soluo 1
PERMUTE-POR-ORDENAO (, a)
1 para i 1 at a faa
2 1[i] RANDOM(1, a
3
)
3 ordene [1. . a] com chaves 1[1. . a]
No comeo da linha 3, com grande
probabilidade, 1[1. . a] no tem elementos
repetidos
Linha 3 faz permutao [)
1
. . )
a
] de [1. . a]
tal que 1[)
1
] 1[)
a
]
Consumo de tempo: (alga)
se RANDOM for (1)
100
Soluo 2
(Como se diz in place em portugues?)
PERMUTE-IN-PLACE (, a)
1 para i 1 at a faa
2 ) RANDOM(i, a)
3 [)] [i]
No bvio que isso produz permutao
aleatria uniforme de [1. . a]
Consumo de tempo: (a)
supondo que RANDOM (1)
101
TAREFA 16
Exerccio 16.A [CLRS 5.3-3]
Que acontece se trocarmos RANDOM(i, a) por RANDOM(1, a)
no algoritmo PERMUTE-IN-PLACE? O algoritmo continua
produzindo permutao aleatria uniforme?
Exerccio 16.B [CLRS C.3-2]
Um vetor [1. . a] contm a nmeros distintos aleatoriamente
ordenados. Suponha que cada permutao dos a nmeros
igualmente provvel. Qual a esperana do ndice do maior elemento
do vetor? Qual a esperana do ndice do menor elemento do vetor?
102
AULA 17
Limite inferior para
o problema da ordenao
CLRS 8.1
103
Ordenao: limite inferior
Problema:
Rearranjar [1. . . a] em ordem crescente
Existem algoritmos O(alga)
Existe algoritmo assintoticamente melhor?
NO,
se o algoritmo baseado em comparaes
Prova?
Qualquer algoritmo de comparaes
uma rvore de deciso
104
EXEMPLO: INSERTION-SORT com a = 3
rvore de deciso para o, o, c, todos distintos
o : o representa comparao entre o e o
o : o
<
o : c o : c
\ \
ooc o : c ooc o : c
\ \
oco coo oco coo
ooc signica que o < o < c
105
rvore de deciso para [1. . a]
todas as a! permutaes de 1, . . . , a
devem ser folhas
nmero de comparaes, no pior caso?
resposta: altura, I, da rvore
devemos ter 2
I
a! , donde I lg(a!)
(a!)
2
=
a1

i=0
(ai)(i+1)
a

i=1
a = a
a
I lg(a!)
1
2
alga
Concluso: Todo algoritmo de ordenao
baseado em comparaes faz
(alga)
comparaes no pior caso
106
AULA 18
Ordenao em tempo linear
CLRS 8.28.3
107
Ordenao por contagem
Cada [i] est em 0, . . . , I
COUNTING-SORT (, 1, a, I)
1 para i 0 at I
2 faa C[i] 0
3 para ) 1 at a
4 faa C[[)]] C[[)]] +1
5 para i 1 at I
6 faa C[i] C[i] +C[i 1]
7 para ) a decrescendo at 1
8 faa 1[C[[)]]] [)]
9 C[[)]] C[[)]] 1
1 a

1
0 I
C
Entre linhas 4 e 5, C[i] = nm de )s tq [)] = i
entre linhas 6 e 7, C[i] = nm de )s tq [)] i
108
Consumo de tempo do COUNTING-SORT:
linha consumo na linha
12 (I)
34 (a)
56 (I)
79 (a)
Consumo total: (a +I)
se I a ento consumo (a)
se I 10a ento consumo (a)
se I = O(a) ento consumo (a)
se I a
2
ento consumo (I)
A propsito: COUNTING-SORT estvel
109
Ordenao digital (= radix sort)
Exemplo:
329 720 720 329
457 355 329 355
657 436 436 436
839 457 839 457
436 657 355 657
720 329 457 720
355 839 657 839
Cada [)] tm o dgitos decimais:
[)] = o
o
10
o1
+ +o
2
10
1
+o
1
10
0
Exemplo com o = 3: 3 10
2
+2 10 +9
RADIX-SORT (, a, o)
1 para i 1 at o faa
2 1 at o e no o contrrio!
3 ordene [1. . a] pelo dgito i
110
Linha 3:
faz ordenao [)
1
. . )
a
] de [1. . a]
tal que [)
1
]
i
[)
a
]
i
ordenao deve ser estvel
use COUNTING-SORT
Consumo de tempo:
dgitos decimais: (oa)
dgitos em 0. . I: (o (a +I)).
Exemplo com o = 5 e I = 128:
o
5
128
4
+o
4
128
3
+o
3
128
2
+o
2
128 +o
1
sendo 0 o
i
127
111
AULA 19
Mediana e
i-simo menor elemento
CLRS 9
112
Mnimo e mediana
Problema: Encontrar o i-simo menor elemento
de [1. . a]
Suponha [1. . a] sem elementos repetidos
Exemplo: 33 o 4-o menor elemento:
22 99 32 88 34 33 11 97 55 66
11 22 32 33 34 55 66 88 97 99 ordenado
Mediana o
a+1
2
-simo menor
ou o
a+1
2
-simo menor elemento
113
Algoritmo SELECT
Recebe [j . . ] e i tal que 1 i j+1
e devolve valor do i-simo menor elemento de [j . . ]
SELECT (, j, , i)
1 se j =
2 ento devolva [j]
3 q PARTICIONE(, j, )
4 I q j +1
5 se I = i
6 ento devolva [q]
7 se I i
8 ento devolva SELECT(, j, q 1, i)
9 seno devolva SELECT (, q +1, , i I)
j q
. . . .
I 1 a I
114
T(a) = nm comparaes entre elementos de
quando a = j +1
Pior caso: T(a) = T(a 1) +a1
Soluo: T(a) = (a
2
)
T(1) = 0 e
T(a) = T(a 1) +a1 para a 2
Soluo: T(a) =
1
2
a
2

1
2
a
Consumo mdio?
E[T(a)] = ?
115
EXEMPLO: Nmero mdio de comparaes sobre todas as
permutaes de [j . . ] (supondo que nas linhas 8 e 9 o algoritmo
sempre escolhe o lado maior):
[j . . ] comps
1,2 1+0
2,1 1+0
mdia 2/2
[j . . ] comps
1,2,3 2+1
2,1,3 2+1
1,3,2 2+0
3,1,2 2+0
2,3,1 2+1
3,2,1 2+1
mdia 16/6
[j . . ] comps
1,2,3,4 3+3
2,1,3,4 3+3
1,3,2,4 3+2
3,1,2,4 3+2
2,3,1,4 3+3
3,2,1,4 3+3
1,2,4,3 3+1
2,1,4,3 3+1
1,4,2,3 3+1
4,1,2,3 3+1
2,4,1,3 3+1
4,2,1,3 3+1
[j . . ] comps
1,3,4,2 3+1
3,1,4,2 3+1
1,4,3,2 3+1
4,1,3,2 3+1
3,4,1,2 3+1
4,3,1,2 3+1
2,3,4,1 3+3
3,2,4,1 3+3
2,4,3,1 3+2
4,2,3,1 3+2
3,4,2,1 3+3
4,3,2,1 3+3
mdia 116/24
No caso j +1 = 5, a mdia 864120.
116
SELECT-ALEATORIZADO (= randomized select)
Usa PARTICIONE-ALEATORIZADO
Consumo mdio de tempo: E[T(1)] = 0 e
E[T(a)] a1 +
1
a
a1

I=o
E[T(I)] +
1
a
a1

I=o
E[T(I)]
onde o = a2 e o = a2
Compare com a recorrncia do Quicksort
a E[T(a)]

=
1 0 0
2 22 1
3 166 2.7
4 11624 4.8
5 864120 7.2
Soluo: E[T(a)] = O(a)
117
AULA 20
Programao dinmica
CLRS 15.115.3
118
Programaco dinmica
= recursocomtabela
= transformao inteligente de recurso em iterao
EXEMPLO 1: Nmeros de Fibonacci
1
0
= 0 1
1
= 1 1
a
= 1
a1
+1
a2
Algoritmo recursivo para 1
a
:
FIBO-REC (a)
1 se a 1
2 ento devolva a
3 seno o FIBO-REC(a 1)
4 o FIBO-REC(a 2)
5 devolva o +o
Consumo de tempo?
Nmero de somas:
T(0) = 0
T(1) = 0
T(a) = T(a 1) +T(a 2) +1 se a 2
119
Soluo: T(a) 3
a
2
a
para a 6.
Prova: T(6) = 12 (32)
6
e T(7) = 20 (32)
7
.
Se a 8 ento
T(a) = T(a 1) +T(a 2) +1
(32)
a1
+(32)
a2
+1
= (32 +1) (32)
a2
+1
(52) (32)
a2
(94) (32)
a2
= (32)
2
(32)
a2
= (32)
a
.
Consumo de tempo: ((
3
2
)
a
)
Exponencial!
Algoritmo resolve as mesmas subinstncias muitas vezes:
1
5
\
1
4
1
3
\ \
1
3
1
2
1
2
1
1
\ \ \
1
2
1
1
1
1
1
0
1
1
1
0
120
Algoritmo de programao dinmica:
FIBO (a)
1 )[0] 0
2 )[1] 1
3 para i 2 at a
4 faa )[i] )[i 1] +)[i 2]
5 devolva )[a]
Note a tabela )[0. . a1]
Consumo de tempo: (a)
121
Programaco dinmica, EXEMPLO 2:
Subset-sum (soma de cheques)
Dados inteiros no-negativos &
1
, . . . , &
a
, W,
encontrar subconjunto 1 de 1, . . . , a
tal que

I1
&
I
= W.
Exemplo
& = 100, 30, 90, 35, 40, 30, 10 e W = 160
Motivao: Algum subconjunto dos cheques &
1
, . . . , &
a
(&
i
o valor do cheque i) tem soma W?
Propriedade da subestrutura tima:
Suponha que 1 soluo da instncia (a, W) do
problema.
Se 1 a
ento 1 a soluo da instncia (a 1, W &
a
)
seno 1 soluo da instncia (a 1, W).
122
Simplicao:
diga 1 se a instncia tem soluo e 0 em caso contrrio.
Soluo recursiva:
REC (&, a, W)
1 se W = 0
2 ento devolva 1
3 se a = 0
4 ento devolva 0
5 se REC (&, a 1, W) = 1
6 ento devolva 1
7 se &
a
W
8 ento devolva 0
9 seno devolva REC (&, a1, W&
a
)
Consumo de tempo: (2
a
)
Por que demora tanto?
A mesmo instncia resolvida muitas vezes.
123
Programao dinmica
~[i, Y ] :=
1 se instncia (i, Y ) tem soluo
0 caso contrrio
Recorrncia:
~[i, 0] = 1
~[0, Y ] = 0 se Y 0
~[i, Y ] = ~[i 1, Y ] se &
i
Y
~[i, Y ] = max ~[i 1, Y ], ~[i 1, Y &
i

Y
0 1 2 3 4
i 0 0 0 0 0 0
1
2
3
4 ?
5
W = 4
a = 5
Lembrete: W e &
1
, . . . , &
a
so inteiros
124
Cada instcia (i, Y ) do problema resolvida
uma s vez:
SOMA-DE-SUBCONJ (&, a, W)
1 para i 0 at a faa
2 ~[i, 0] 1
3 para Y 1 at W faa
4 ~[0, Y ] 0
5 para i 1 at a faa
6 ~[i, Y ] ~[i1, Y ]
7 se ~[i, Y ] = 0 e &
i
Y
8 ento ~[i, Y ] ~[i1, Y &
i
]
9 devolva ~[a, W]
Consumo de tempo: (aW)
NOTA: O consumo (a2
lgW
) exponencial!
Explicao: o tamanho de W lgW e no W
(tente multiplicar &
1
, . . . , &
a
e W por 1000)
EXERCCIO: Escreva uma verso que devolva 1 tal que

I1
&
I
= W
125
Programaco dinmica, EXEMPLO 3:
Multiplicao iterada de matrizes
Preliminares:
Se j q e 1 q ento 1 j
(1)[i, )] =

I
[i, I] 1[I, )]
Nmero de multiplicaes escalares = j q
MULT-MAT (j, , q, 1, )
1 para i 1 at j faa
2 para ) 1 at faa
3 AB[i, )] 0
4 para I 1 at q faa
5 AB[i, )] AB[i, )] +[i, I] 1[I, )]
Multiplicao iterada:
1

2

3
10

1
100

2
5

3
50
((
1

2
)
3
) 7500 mults escalares
(
1
(
2

3
)) 75000 mults escalares
126
Problema: Encontrar nmero mnimo de
multiplicaes escalares necessrio para
calcular produto
1

2

a
.
j
0
j
1
j
2
. . . j
a1
j
a

1

2
. . .
a
cada
i
j
i1
j
i
Solues timas contm solues timas: se
(
1

2
) (
3
((
4

5
)
6
))
ordem tima de multiplicao ento
(
1

2
) e (
3
((
4

5
)
6
))
tambm so ordens timas.
127
a[i, )] = nmero mnimo de
multiplicaes escalares
para calcular
i

)
Decomposio: (
i

I
) (
I+1

)
)
Recorrncia:
se i = ) ento a[i, )] = 0
se i < ) ento a[i, )] =
min
iI<)
a[i, I] +j
i1
j
I
j
)
+a[I+1, )]
Exemplo:
a[3, 7] = min
3I<7
a[3, I] +j
2
j
I
j
7
+a[I+1, 7]
128
Algoritmo recursivo:
recebe j
i1
, . . . , j
)
e devolve a[i, )]
REC-MAT-CHAIN (j, i, ))
1 se i = )
2 ento devolva 0
3 a[i, )]
4 para I i at ) 1 faa
5 q
1
REC-MAT-CHAIN (j, i, I)
5 q
2
REC-MAT-CHAIN (j, I +1, ))
5 q q
1
+j
i1
j
I
j
)
+q
2
6 se q < a[i, )]
7 ento a[i, )] q
8 devolva a[i, )]
Consumo de tempo: (2
a
)
onde a = ) i +1.
Por que demora tanto?
Uma mesma instncia resolvida muitas vezes.
129
Clculo do consumo de tempo de REC-MAT-CHAIN:
T(a) = nmero comparaes entre q e a[ , ]
na linha 6 quando a := ) i +1
T(1) = 0
T(a) =
a1

I=1
(T(I) +T(a I) +1)
= 2
a1

I=2
T(I) + (a 1)
= 2(T(2) + +T(a1)) + (a 1)
para a 2
Fcil vericar: T(a) 2
a2
para a 2
130
Programao dinmica:
cada instncia
i

)
resolvida uma s vez.
Em que ordem calcular os componentes da tabela a?
Para calcular a[2, 6] preciso de
a[2, 2], a[2, 3], a[2, 4], a[2, 5] e de
a[3, 6], a[4, 6], a[5, 6], a[6, 6].
1 2 3 4 5 6 7 8 )
1 0
2 0 ?
3 0
4 0
5 0
6 0
7 0
8 0
i
Calcule todos os a[i, )] com ) i +1 = 2,
depois todos com ) i +1 = 3,
depois todos com ) i +1 = 4,
etc.
131
Algoritmo de programao dinmica:
recebe j
0
, j
1
, . . . , j
a
e devolve a[1, a]
MATRIX-CHAIN-ORDER (j, a)
02 para i 1 at a faa
03 a[i, i] 0
04 para | 2 at a faa
05 para i 1 at a | +1 faa
06 ) i +| 1
07 a[i, )]
08 para I i at ) 1 faa
09 q a[i, I] +j
i1
j
I
j
)
+a[I+1, )]
10 se q < a[i, )]
11 ento a[i, )] q
12 devolva a[1, a]
Linhas 411: tratam das subcadeias
i

)
de comprimento |
Consumo de tempo: O(a
3
)
132
Curioso vericar que consumo (a
3
):
Nmero de execues da linha 9
(para cada i, linha 9 executada | 1 vezes)
| i execs linha 9
2 1, . . . , a 1 (a 1) 1
3 1, . . , a 2 (a 2) 2
4 1, . , a 3 (a 3) 3
a 1 1, 2 2 (a 2)
a 1 1 (a 1)
total

a1
I=1
I(a I)
Para a 6,

a1
I=1
I(a I) =
= a

a1
I=1
I

a1
I=1
I
2
= a
1
2
a(a 1)
1
6
(a 1)a(2a 1) (CLRS p.1060)

1
2
a
2
(a 1)
1
6
2a
3

1
2
a
25a
6

1
3
a
3
=
5
12
a
3

1
3
a
3
=
1
12
a
3
Consumo de tempo (a
3
)
133
AULA 21
Mais programao dinmica
CLRS 15.4
134
Def: :
1
, . . . , :
I
) subseqncia de a
1
, . . . , a
a
)
se existem ndices i
1
< < i
I
tais que
:
1
= a
i
1
. . . :
I
= a
i
I
EXEMPLO: 5, 9, 2, 7)
subseqncia de 9, 5, 6, 9, 6, 2, 7, 3)
135
Pequeno exerccio:
Decidir se :
1
, . . . , :
I
) subseqncia de a
1
, . . . , a
a
)
Exemplo: : = A A A
a = B A B B A B B B A A B B A B A B A B B
Soluo:
SUB-SEQ- (:, I, a, a)
0 i I
1 ) a
2 enquanto i 1 e ) 1 faa
3 se :
i
= a
)
4 ento i i 1
5 ) ) 1
6 se i 1
7 ento devolva no
8 seno devolva sim
136
Programaco dinmica, EXEMPLO 4:
Subseqncia comum mxima
Z subseq comum de A e Y
se Z subseq de A e de Y
ssco = subseq comum
Problema: Encontrar uma ssco mxima
de A e Y
Exemplo: A = A B C B D A B
Y = B D C A B A
ssco = B C A
ssco maximal = A B A
ssco mxima = B C A B
Outra ssco mxima = B D A B
LCS = longest common subsequence
137
Subestrutura tima:
Suponha que Z = :
1
, . . . , :
I
) sscomx
de A = a
1
, . . . , a
a
) e Y =
1
, . . . ,
a
).
Se a
a
=
a
ento :
I
= a
a
=
a
e
Z
I1
sscomx de A
a1
e Y
a1
Se a
a
,=
a
ento :
I
,= a
a
implica que
Z sscomx de A
a1
e Y
Se a
a
,=
a
ento :
I
,=
a
implica que
Z sscomx de A e Y
a1
Notao: A
)
:= a
1
, . . . , a
)
)
Prove a propriedade!
138
Simplicao: encontrar o comprimento
de uma ssco mxima
c[i, )] = comprimento de uma sscomx
de a
1
, . . . , a
i
) e
1
, . . . ,
)
)
Recorrncia:
c[0, )] = c[i, 0] = 0
c[i, )] = c[i1, )1] +1 se a
i
=
)
c[i, )] = max (c[i, )1], c[i1, )]) se a
i
,=
)
139
Algoritmo de programao dinmica:
SSCOMX-COMPR (A, a, Y, a)
01 para i 1 at a faa
02 c[i, 0] 0
03 para ) 1 at a faa
04 c[0, )] 0
05 para i 1 at a faa
06 para ) 1 at a faa
07 se a
i
=
)
08 ento c[i, )] c[i 1, ) 1] +1
09 seno se c[i 1, )] c[i, ) 1]
10 ento c[i, )] c[i 1, )]
11 seno c[i, )] c[i, ) 1]
12 devolva c[a, a]
Consumo de tempo: O(aa)
140
AULA 22
Algoritmos gulosos (greedy)
CLRS 16.2
141
Mximo e maximal
S = coleo de subconjuntos de 1, . . . , a
Elemento A de S mximo se
no existe Y em S tal que [Y [ [A[.
Elemento A de S maximal se
no existe Y em S tal que Y A.
Exemplo:
1, 2, 2, 3, 4, 5, 1, 2, 3, 2, 3, 4, 5, 1, 3, 4, 5
1, 2 no maximal
1, 2, 3 maximal
2, 3, 4, 5 maximal e mximo
Problema 1: Encontrar elemento mximo de S.
Usualmente difcil.
Problema 2: Encontrar elemento maximal de S.
Muito fcil: aplique algoritmo guloso.
S tem estrutura gulosa se todo maximal mximo.
Se S tem estrutura gulosa, Problema 1 fcil.
142
Algoritmos gulosos
Algoritmo guloso
procura maximal e acaba obtendo mximo
procura timo local e acaba obtendo timo global
costuma ser
muito simples e intuitivo
muito eciente
difcil provar que est correto
Problema precisa ter
subestrutura tima
(como na programao dinmica)
propriedade da escolha gulosa
(greedy-choice property)
143
Algoritmo guloso, EXEMPLO 1:
Caso especial da mochila booleana
Dados inteiros no-negativos &
1
, . . . , &
a
e W,
encontrar um subconjunto mximo 1 de
1, . . . , a dentre os que satisfazem

I1
&
I
W .
Subestrutura tima (j vimos):
Se 1 timo para (a, W) e a 1
ento 1 a timo para (a 1, W &
a
)
seno 1 timo para (a 1, W).
Propriedade da escolha gulosa:
Se &
a
&
i
para todo i e &
a
W
ento a pertence a alguma soluo tima.
Prove as propriedades!
144
Simplicao: basta dar tamanho de 1 timo
Algoritmo guloso, verso recursiva,
supondo &
1
&
a
:
SS-REC (&, a, W)
1 se a = 0 ou &
a
W
2 ento devolva 0
3 seno devolva 1+SS-REC(&, a1, W &
a
)
Consumo de tempo: T(a) = T(a 1) +O(1)
Consumo de tempo: O(a)
145
Algoritmo guloso, verso iterativa,
supondo &
1
&
a
:
SS-ITER (&, a, W)
1 soma 0
2 para ) a decrescendo at 1 faa
3 se &
)
W
4 ento devolva soma
5 seno soma soma +1
6 W W &
)
7 devolva soma
Prove que o algoritmo est correto!
Consumo de tempo: O(a)
Prog din consumiria (a
2
)
146
AULA 23
Mais algoritmos gulosos
CLRS 16.2
147
Algoritmo guloso, EXEMPLO 2:
Problema dos intervalos disjuntos
Dados intervalos [~
1
, )
1
), . . . , [~
a
, )
a
),
encontrar uma coleo mxima de intervalos
disjuntos dois a dois.
Soluo um subconjunto de 1, . . . , a
Exemplo:
~
1
)
1
Soluo:
Se cada intervalo uma atividade, queremos coleo
disjunta mxima de atividades compatveis
(i e ) so compatveis se )
i
~
)
)
148
Anlise do problema:
Intervalos S := 1, . . . , a
Propriedade da escolha gulosa:
Se )
a
mnimo em S ento
a est em alguma soluo tima.
Propriedade da subestrutura tima:
Suponha que )
i
mnimo em S.
Se soluo tima de S e i
ento i soluo tima de S
i
.
Notao: S
i
:= I : ~
I
)
i

(todos os intervalos direita de i)


Prove as propriedades!
149
Algoritmo guloso:
Supe )
1
)
a
Primeira verso:
FEIO-INTERVALOS-DISJUNTOS (~, ), a)
1
2 i 1
3 enquanto i a faa
4 i
5 a i +1
6 enquanto a a e ~
a
< )
i
faa
7 a a+1
8 i a
9 devolva
Correta, eciente, mas deselegante.
150
Segunda verso: mais elegante
Supe )
1
)
a
INTERVALOS-DISJUNTOS (~, ), a)
1 1
2 i 1
3 para a 2 at a faa
4 se ~
a
)
i
5 ento a
6 i a
7 devolva
Consumo de tempo: (a)
Nome do algoritmo no CLRS: Greedy-Activity-Selector
151
AULA 24
Estrutura de dados para
conjuntos disjuntos
dinmicos
CLRS 21.1, 21.3
152
Exemplo de coleo disjunta dinmica:
componentes conexos de grafo dinmico
aresta componentes
o o c o c
(o, o) o o, o c c
(c, c) o o, o c, c
(c, o) o o, o, c, c
(c, o) o o, o, c, c
Operaes bsicas:
MAKESET (a) a elemento novo
UNION (a, ) a e em comps diferentes
FINDSET (a) devolve representante do comp
153
Componentes conexos de um grafo G:
CONNECTED-COMPONENTS (G)
1 para cada em \ [G] faa
2 MAKESET()
3 para cada (&, ) em 1[G] faa
4 se FINDSET(&) ,= FINDSET()
5 ento UNION(&, )
Decide se & e esto no mesmo componente:
SAME-COMPONENT (&, )
1 se FINDSET(&) = FINDSET()
2 ento devolva SIM
3 seno devolva NO
154
Generalizao:
conjuntos disjuntos dinmicos
Seqncia de operaes
MAKESET, UNION, FINDSET
M M M
. .
a
U F U U F U F F F U F
. .
a
Que estrutura de dados usar?
Compromissos (trade-o s)
Estrutura disjoint-set forest:
cada conj tem uma raiz
cada n a tem um pai
pai [a] = a se e s se a uma raiz
155
MAKESET
0
(a)
1 pai [a] a
UNION
0
(a, )
1 a

FINDSET
0
(a)
2

FINDSET
0
()
3 pai [

] a

FINDSET
0
(a)
1 enquanto pai [a] ,= a
2 faa a pai [a]
3 devolva a
Verso recursiva:
FINDSET
1
(a)
1 se pai [a] = a
2 ento devolva a
3 seno devolva FINDSET
1
(pai [a])
156
Custos: MAKESET
0
O(1)
UNION
0
O(a)
FINDSET
0
O(a)
M M M
. .
a
U F U U F U F F F U F
. .
a
Custo total da seqncia:
aO(1) +aO(a) +aO(a) = O(aa)
157
Melhoramento 1:
rank[a] = psto do n a
MAKESET (a)
1 pai [a] a
2 rank[a] 0
UNION (a, ) com union by rank
1 a

FINDSET(a)
2

FINDSET() supe que a

,=

3 se rank[a

] rank[

]
4 ento pai [

] a

5 seno pai [a

6 se rank[a

] = rank[

]
7 ento rank[

] rank[

] +1
altura(a) rank[a] lga
altura(a) := comprimento do mais longo caminho
que vai de a at uma folha
158
Consumo de tempo:
M M M
. .
a
U F U U F U F F F U F
. .
a
altura(a) lga
Custos: MAKESET O(1)
UNION O(lga)
FINDSET O(lga)
Custo total da seqncia: O(alga)
159
Melhoramento 2:
FINDSET (a) com path compression
1 se a ,= pai [a]
2 ento pai [a] FINDSET(pai [a])
3 devolva pai [a]
Redao menos elegante:
FINDSET (a)
1 se a = pai [a]
2 ento devolva a
3 seno a

FINDSET(pai [a])
4 pai [a] a

5 devolva a

Anlise difcil:
Custo amortizado de uma operao: O(lg

a)
160
lg

a o menor I tal que lg lg . . . lg


. .
I
a 1
a lg

a
1 0
2 1
3 1
4 2
5 2
.
.
.
.
.
.
15 2
16 3
.
.
.
.
.
.
65535 3
65536 4
.
.
.
.
.
.
100000000000000000 000000000000
. .
4
80 .
.
.
.
.
.
161
AULA 25
rvores geradora mnimas
CLRS 23
162
rvore geradora
de grafo no-dirigido G = (\, 1):
1 tq (\, ) conexo e no tem circuitos
Cuidado: rvores no tm raiz, nem pais, nem lhos
G tem rvore geradora G conexo
rvore geradora [[ = [\ [ 1
&(&): peso da aresta &
&() =

&(&): peso da rvore


Problema da rvore geradora mnima:
Dados G e &, encontrar uma rvore geradora
de peso mnimo
Soluo: av de todos os algoritmos gulosos
163
Algoritmo genrico
Recebe grafo conexo G com pesos & e
devolve rvore geradora de peso mnimo
GENERIC-MST (G, &) G conexo
1
2 enquanto no rvore geradora faa
3 (S, \ S) corte que respeita
4 & aresta leve que cruza (S, \ S)
5 &
6 devolva
& cruza (S, \ S)
se & S e \ S ou vice-versa
(S, \ S) respeita
se no cruzado por aresta de
& leve
se &(&) mnimo em (S, \ S).
Invariante: no comeo de cada iterao,
faz parte de alguma rvore geradora mnima
164
Algoritmo de Kruskal
MST-KRUSKAL (G, &) G conexo
1
2 para cada vrtice
3 faa MAKESET()
4 coloque arestas em ordem crescente de &
5 para cada & em ordem crescente de &
6 faa se FINDSET(&) ,= FINDSET()
7 ento &
8 UNION(&, )
9 devolva
linha consumo
23 O(\ )
4 O(1 lg1)
5 O(1)
6 O(1 lg

\ )
7 O(1)
8 O(1 lg

\ )
total O(1 lg1)
total = O(1 lg\ ) pois [1[ < [\ [
2
165
Rascunho do algoritmo de Prim
MST-PRIM (G, &) G conexo
01
02 escolha vrtice
03 S
04 enquanto S ,= \ [G] faa
05 min
06 para cada aresta & faa
07 se & S
08 ento &
09 se & S e S e &(&) < min
10 ento min &(&)
11 &

&
12


13 S S

14 &

15 devolva
Consumo de tempo:
linha consumo
0103 O(1)
0405 O(\ )
0612 O(\ 1)
1314 O(\ )
15 O(1)
total O(\ 1)
166
Algoritmo de Prim
MST-PRIM (G, &) G conexo
00 escolha vrtice
01 para cada vrtice &
02 faa chave[&]
03 [&] NIL
04 chave[] 0
05
06 Q \ [G]
07 enquanto Q ,= faa
08 & EXTRACT-MIN(Q, chave)
09 se & ,= ento [&]&
10 para cada em Adj [&] faa
11 se Q e &(&) < chave[]
12 ento [] &
13 chave[] &(&)
14 devolve
listas de adjacncia Adj []
[&] ,= NIL [&] \ Q
167
Invariantes: no comeo de cada iterao
(\ Q, ) uma rvore
para cada Q tal que [] ,= NIL
chave[] < e
chave[] = min &(

) :

\ Q
168
Consumo de tempo,
supondo Q implementada como um min-heap:
linha consumo
0006 O(\ )
07 O(\ )
08 O(\ lg\ )
09 O(\ )
1012 O(1)

[Adj [][ = 2[1[


13 O(1lg\ ) DECREASE-KEY
14 O(1)
total O(\ lg\ +1lg\ )
Total = O(1lg\ ) pois [1[ [\ [ 1
Note o mtodo agregado de anlise nas linhas 1012
169
AULA 26
Anlise amortizada
CLR 18 ou CLRS 17
170
Anlise amortizada
Exemplo 1:
Contador binrio
I1 3 2 1 0

INCREMENT (, I)
1 i 0
2 enquanto i < I e [i] = 1
3 faa [i] 0
4 i i +1
5 se i < I
6 ento [i] 1
Custo = consumo de tempo =
= nmero de bits alterados = O(I)
Seqncia de a chamadas:
INCR INCR INCR INCR INCR
. .
a
Custo = O(aI) Exagero!
171

5 4 3 2 1 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 1 0
0 0 0 0 1 1
0 0 0 1 0 0
0 0 0 1 0 1
0 0 0 1 1 0
0 0 0 1 1 1
0 0 1 0 0 0
0 0 1 0 0 1
0 0 1 0 1 0
0 0 1 0 1 1
0 0 1 1 0 0
0 0 1 1 0 1
0 0 1 1 1 0
0 0 1 1 1 1
0 1 0 0 0 0 a = 16
[0] muda a vezes
[1] " a2 "
[2] " a4 "
[3] " a8 "
172
Custo total:
lga

i=0
_
a
2
i
_
< a

i=0
1
2
i
= 2a = O(a)
Custo amortizado (= custo ctcio =
= custo faz-de-conta) de uma operao:
2a
a
= O(1)
Este foi o mtodo agregado de anlise:
soma os custos de todas as operaes
para determinar o custo amortizado
de cada operao
173
Outro mtodo de anlise: potencial

0
1
a
op

1
2
a
op

2
. . .
a
a
op

a

i
= estado de depois da i
a
operao
Custo real da i
a
operao: c
i
= |
i
+1
onde |
i
= nmero de 10 na i
a
operao
Energia potencial de
i
:
(
i
) = nmero de bits 1
= (
i1
) |
i
+1
Custo amortizado da i
a
operao:
c
i
= c
i
+(
i
) (
i1
)
= c
i
+(
i1
) |
i
+1 (
i1
)
= c
i
|
i
+1
= (|
i
+1) |
i
+1
= 2
174
Soma dos custos amortizados limita a soma dos
custos reais pois 0:
a

i=1
c
i
=

(c
i
+(
i
) (
i1
))
=

c
i
+ (
a
) (
0
)
=

c
i
+ (
a
) 0
=

c
i
+ (
a
)

c
i
Concluso:

c
i

c
i
= 2a = O(a) .
Resumo da relao entre c, c e :
c
i
c
i
=
i

i1
175
Exemplo 2: Tabelas dinmicas
11111
22222
33333
44444

11111
22222
33333
44444
55555
_

_
|
a[T]= nmero de itens
Inicialmente a[T] = |[T] = 0
TABLE-INSERT (T, a)
01 se |[T] = 0
02 ento aloque tabela[T] com 1 posio
03 |[T] 1
04 se a[T] = |[T]
05 ento aloque nova com 2|[T] posies
06 insira itens da tabela[T] na nova
07 libere tabela[T]
08 tabela[T] nova
09 |[T] 2|[T]
10 insira a na tabela[T]
11 a[T] a[T] +1
Custo = nmero de inseres elementares (linhas 6 e 10)
176
Seqncia de a TABLE-INSERTs
Custo real da i
a
operao:
c
i
=
1 se h espao
1 +a
i1
se tabela cheia
onde a
i
= valor de a depois da i
a
operao
= i
Custo de uma operao = O(a)
Custo das a operaes = O(a
2
). Exagero!
Funo potencial: (T) := 2a[T] |[T]
Note que 0 (T) |[T]
177
Clculo do custo amortizado c
i
:
Se i
a
operao no causa expanso ento
c
i
= c
i
+
i

i1
= 1 +(2a
i
|
i
) (2a
i1
|
i1
)
= 1 +(2a
i
|
i
) (2(a
i
1) |
i
)
= 3
a
i
, |
i
,
i
= valores depois da i
a
operao
Se i
a
operao causa expanso ento
c
i
= c
i
+
i

i1
= a
i
+(2a
i
|
i
) (2a
i1
|
i1
)
= a
i
+(2a
i
2a
i1
) (2a
i1
a
i1
)
= a
i
+2a
i
3a
i1
= a
i
+2a
i
3(a
i
1)
= 3
Concluso: c
i
= 3 para qualquer i
178
O custo real das a operaes limitado
pelo custo amortizado pois 0:
a

i=1
c
i
=

c
i

a
+
0
=

c
i

c
i
= 3a
= O(a)
179
AULA 27
Complexidade computacional:
P versus NP
CLR 36 ou CLRS 34
180
Consumo de tempo de um algoritmo
Complexidade de um problema
Problemas e instncias
Instncias = cadeias de caracteres
. = tamanho de uma instncia
Exemplos
problema da subseqncia crescente mxima
problema subcoleo disjunta mxima de intervalos
problema da mochila
problema da rvore geradora de peso mnimo
181
Complexidade de um problema
Problema polinomial:
existe algoritmo O(.
i
) para algum i
Por que polinmios?
Classe P de problemas
Para muitos problemas, no se conhece algoritmo
melhor que testar todas as possibilidades.
(Exemplo: examinar todas as 2
a
seqs de a bits.)
Em geral, isso no est em P.
182
Problemas de deciso: respostas SIM ou NO
subseqncia crescente I
subcoleo disjunta I de intervalos
mochila de valor I
rvore geradora de peso I
Vericao de solues
Certicados de respostas SIM
Certicados de respostas NO
existe subseqncia crescente I?
existe subcoleo disjunta I de intervalos?
existe mochila de valor I?
grafo tem rvore geradora de peso I?
grafo tem circuito de comprimento I?
grafo tem conjunto independente de tamanho I?
grafo tem emparelhamento de tamanho I?
183
Certicados polinomiais
Classe NP:
resposta SIM tem certicado polinomial
No confunda NP com no-polinomial
Classe coNP:
resposta NO tem certicado polinomial
Fcil: P NP P coNP
Ningum sabe: P
?
= NP
184
Reduo entre problemas
Converta instncia de problema em instncia de 1.
Resolva instncia de 1.
Converta soluo de 1 em soluo de .
Reduo polinomial
Permite comparar o grau de complexidade
de problemas diferentes.
185
Problemas completos em NP
completo em NP se todo problema em NP pode
ser polinomialmente reduzido a
Classe NPC
Classe dos problemas mais difceis de NP
P = NP P NPC ,=
Teorema de S. Cook: NPC ,=
mochila
circuito hamiltoniano
caminho mximo
escalonamento de tarefas
clique mximo
186

Você também pode gostar