Escolar Documentos
Profissional Documentos
Cultura Documentos
DE ALGORITMOS
Paulo Feofiloff
Instituto de Matemtica e Estatstica
Universidade de So Paulo
agosto 2009
Introduo
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
2 / 102
Introduo
Um exemplo
Problema
Encontrar a soma dos elementos positivos de um vetor A[1 . . n]
Uma instncia do problema: Encontrar a soma dos elementos positivos
do vetor (20, 30, 15, 10, 30, 20, 30, 30)
1
20
P. Feofiloff (IME-USP)
30
15
10
30
20 30
Anlise de Algoritmos
n=8
30
agosto 2009
3 / 102
Introduo
Um exemplo
Algoritmo
SOMAPOSITIVOS (A, n)
1 s0
2 para i 1 at n faa
3
se A[i] > 0
4
ento s s + A[i]
5 devolva s
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
4 / 102
Introduo
Um exemplo
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
5 / 102
Introduo
Um exemplo
depende da instncia
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
6 / 102
Introduo
Um exemplo
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
7 / 102
Introduo
Um exemplo
Algoritmo recursivo
SOMAPOS (A, n)
1 se n = 0
2
ento devolva 0
3
seno s SOMAPOS (A, n 1)
4
se A[n] > 0
5
ento devolva s + A[n]
6
seno devolva s
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
8 / 102
Introduo
Um exemplo
T (n) = ?
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
9 / 102
Introduo
Um exemplo
Algoritmo recursivo:
se a instncia em questo pequena
resolva-a diretamente
seno
reduza-a a uma instncia menor do mesmo problema
encontre soluo S da instncia menor
use S para construir soluo da instncia original
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
10 / 102
Introduo
Um exemplo
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
11 / 102
Comparao assinttica
de funes
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
12 / 102
funes de N em R
G(n) 0 para n = 0, 1, 2, 3, . . .
Ordem O
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
13 / 102
Ordem O
Exemplo 1:
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
14 / 102
Ordem O
Exemplo 2:
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
15 / 102
Ordem O
n est em O(2n )
Exemplo 3:
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
16 / 102
Exemplo 4:
Ordem O
lg n est em O(n)
Prova: xxxxxxxxxxxxxxxx n 2n
Prova: xxxxxxxxxxxxxxxx lg n n
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
17 / 102
Ordem mega
Ordem mega
F (G) G O(F )
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
18 / 102
Ordem mega
Exemplos:
I
n2 2n est em (n2 )
n lg n est em (n)
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
19 / 102
Ordem Theta
Ordem Teta
tem sabor de F = G
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
20 / 102
Ordem Theta
11n2 22n + 33
2n2 + 3n lg n 4n + 5
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
21 / 102
Algoritmo linear:
I
Algoritmo quadrtico:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
22 / 102
Algoritmo polinomial:
I
Algoritmo exponencial:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
23 / 102
Soluo de
recorrncias
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
24 / 102
Recorrncias
Exemplo 2F(n1)+1
Exemplo 1
funo F de N em R>
F (n 0 1 2 3
F (n) ? 1 3 7
4
15
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
25 / 102
Recorrncias
Exemplo 2F(n1)+1
Fato
F (n) = 2n 1 para todo n 1
Prova: F (n) = 2 F (n 1) + 1
= 2 2F (n 2) + 1 + 1
= 4F (n 2) + 3
..
.
= 2j F (n j) + 2j 1
= 2n1 F (1) + 2n1 1
= 2n1 + 2n1 1
= 2n 1
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
26 / 102
Recorrncias
Exemplo 2F(n1)+1
Conseqncia
F (n) est em (2n )
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
27 / 102
Recorrncias
Exemplo 2F(n/2)+n
Exemplo 2
funo F de N em R>
F (n 0 1 2 3
F (n) ? 1 4 5
4
12
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
28 / 102
Recorrncias
Exemplo 2F(n/2)+n
Fato A (potncias de 2)
F (n) = n lg n + n para n = 1, 2, 4, 8, 16, 32, 64, . . .
Prova, com n = 2j
F (2j ) = 2 F (2j1 ) + 2j
= 2 2F (2j2 ) + 2j1 + 2j
= 22 F (2j2 ) + 21 2j1 + 2j
= 23 F (2j3 ) + 22 2j2 + 21 2j1 + 2j
= 2j F (20 ) + 2j1 21 + + 22 2j2 + 21 2j1 + 20 2j
= 2j 20 + 2j1 21 + + 22 2j2 + 21 2j1 + 20 2j
= (j + 1)2j
= j 2j + 2j
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
29 / 102
Recorrncias
Exemplo 2F(n/2)+n
Se n no potncia de 2 . . .
Fato B
F (n) 6 n lg n para todo n 2
Prova:
I
F crescente
...
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
30 / 102
Recorrncias
Exemplo 2F(n/2)+n
Fato C
F (n)
1
2
n lg n para todo n 2
Prova:
I
F crescente
...
Conseqncia
F (n) est em (n lg n)
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
31 / 102
Recorrncias
Exemplo 2F(n/2)+n
ento F continua em (n lg n)
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
32 / 102
Recorrncias
Exemplo 3F(n/2)+n
Exemplo 3
funo F de N em R>
F (1) = 1 e
F (n) = 3 F (bn/2c) + n para todo n 2
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
33 / 102
Recorrncias
Exemplo 3F(n/2)+n
Fato A (para n = 2j )
F (2j ) = 3 3j 2 2j
para todo j 0
se j = 0 ento F (2j ) = 1 = 3 3j 2 2j
agora tome j 1
F (2j ) = 3 F (2j1 ) + 2j
F (2j ) = 3 3j 2j + 2j
F (2j ) = 3 3j 2 2j
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
34 / 102
Recorrncias
3 = 2lg 3
Exemplo 3F(n/2)+n
Conseqncia
F (n) = 3 nlg 3 2n para n = 1, 2, 4, 8, 16, 32, 64, . . .
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
35 / 102
Recorrncias
Exemplo 3F(n/2)+n
Se n no potncia de 2 . . .
Fato B (n arbitrrio)
F (n) 9 nlg 3 para todo n 1
Fato C (n arbitrrio)
F (n)
1
3
Conseqncia
F est em (nlg 3 )
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
36 / 102
Recorrncias
Exemplo 3F(n/2)+n
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
37 / 102
Recorrncias
Teorema mestre
Teorema mestre
Se
I
F : N R>
F (n) = a F
F crescente
n
2
+ cnk para n = 21 , 22 , 23 , . . .
ento
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
38 / 102
Ordenao de vetor
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
39 / 102
Ordenao de vetor
O problema
Problema da ordenao
Rearranjar um vetor A[p . . r] em ordem crescente
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
40 / 102
Ordenao de vetor
Mergesort
Algoritmo Mergesort
MERGESORT (A, p, r)
1 se p < r
2
ento q b(p + r)/2c
3
MERGESORT (A, p, q)
4
MERGESORT (A, q + 1, r)
5
INTERCALA (A, p, q, r)
p
111
333
555
555
777
q
q+1
888 222 444
777
999
r
999
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
41 / 102
Ordenao de vetor
Mergesort
agora suponha n 2
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
42 / 102
Ordenao de vetor
Mergesort
Consumo de tempo
T (n) : consumo de tempo no pior caso
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
43 / 102
Ordenao de vetor
Diviso e conquista
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
44 / 102
Multiplicao de inteiros
35871227428009 11234908764388
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
45 / 102
Multiplicao de inteiros
O problema
Problema
Dados nmeros naturais u e v com n dgitos cada
calcular o produto u v
u v ter 2n dgitos
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
46 / 102
Multiplicao de inteiros
6
69
699
777
6
9
9
9
6
9
7
9
9
9
3
2
9
7
9
9
3
99
77
93
3
223
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
47 / 102
Multiplicao de inteiros
u = a 10n/2 + b
v = c 10n/2 + d
u v = a c 10n + (a d + b c) 10n/2 + b d
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
48 / 102
Multiplicao de inteiros
P. Feofiloff (IME-USP)
99998888
77776666
u
v
99998888
8888
77776666
6666
a
b
c
d
77762223
1357753103333
59247408
ac
ad + bc
bd
7777580112347408
Anlise de Algoritmos
agosto 2009
49 / 102
Multiplicao de inteiros
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
50 / 102
Multiplicao de inteiros
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
51 / 102
Multiplicao de inteiros
Algoritmo de KaratsubaOfman
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
52 / 102
Multiplicao de inteiros
Algoritmo de KaratsubaOfman
999988888
077766666
u
v
5925807408
ac
bd
07769223
9888733333
6744333333
666923594133333
73565931033333
077765801856807408
P. Feofiloff (IME-USP)
a+b
c+d
y
y ac bd
x
Anlise de Algoritmos
agosto 2009
53 / 102
Multiplicao de inteiros
Algoritmo de KaratsubaOfman
Anlise de Algoritmos
agosto 2009
54 / 102
Multiplicao de inteiros
Algoritmo de KaratsubaOfman
Consumo de tempo
T (n) : consumo de tempo do algoritmo no pior caso
I
recorrncia:
soluo:
I
I
T (n) = 3 T (bn/2c) + n
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
55 / 102
Multiplicao de inteiros
Algoritmo de KaratsubaOfman
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
56 / 102
Multiplicao de inteiros
Algoritmo de KaratsubaOfman
Consumo de tempo
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
57 / 102
Multiplicao de inteiros
Algoritmo de KaratsubaOfman
Observaes finais:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
58 / 102
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
59 / 102
O problema
Definies:
I
soma de um segmento
30
15
10
30
20 30
r
30
solidez 35
Problema
Calcular a solidez de um vetor A[p . . r] de nmeros inteiros.
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
60 / 102
Algoritmo trivial
Idia:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
61 / 102
Algoritmo 1
Algoritmo 1: trivial
SOLIDEZI (A, p, r)
1 x A[r]
2 para q r 1 decrescendo at p faa
3
s0
4
para j q at r faa
5
s s + A[j]
6
se s > x ento x s
7 devolva x
p
20
30
15
q q+1
10 30 20 30
r
30
x
30
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
62 / 102
Algoritmo 1
Consumo de tempo
Tamanho do vetor: n = r p + 1
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
63 / 102
Idia:
I
semelhante a MERGESORT
p
20
P. Feofiloff (IME-USP)
30
15
q q+1
10 30 20 30
Anlise de Algoritmos
r
30
agosto 2009
64 / 102
Algoritmo 2
P. Feofiloff (IME-USP)
30
15
q q+1
10 30 20 30
Anlise de Algoritmos
r
30
agosto 2009
65 / 102
Algoritmo 2
6
7
8
9
10
11
12
13
y 0 s A[q]
para i q 1 decrescendo at p faa
s A[i] + s
se s > y 0 ento y 0 s
00
y s A[q + 1]
para j q + 2 at r faa
s s + A[j]
se s > y 00 ento y 00 s
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
66 / 102
Algoritmo 2
agora suponha n 2
etc.
Consumo de tempo
T (n) : consumo de tempo no pior caso
I
soluo: T est em (n lg n)
Anlise de Algoritmos
agosto 2009
67 / 102
30
15
10
30
20 30
r
30
firmeza = 30
Problema auxiliar
Calcular a firmeza de todos os segmentos iniciais de A[p . . r]
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
68 / 102
Algoritmo 3
p
20
30
15
10
30
20
10
15
35
20 30
r
30
15
30
15
Propriedade recursiva:
I
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
69 / 102
Algoritmo 3
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
70 / 102
Algoritmo 3
etc.
Consumo de tempo
T (n) : consumo de tempo no pior caso
I
T est em (n)
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
71 / 102
Algoritmo 3
Observaes:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
72 / 102
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
73 / 102
Motivao:
I
Exemplos:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
74 / 102
O problema
Definies:
I
objetos 1, . . . , n
nmeros naturais p1 , . . . , pn e v1 , . . . , vn
pi o peso de i
vi o valor de i
P
o peso de um conjunto S de objetos
iS pi
P
o valor de S
iS vi
P
um conjunto S vivel se
iS pi M
I
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
75 / 102
O problema
Problema da mochila
Dados nmeros naturais p1 , . . . , pn , M , v1 , . . . , vn
encontrar um subconjunto vivel de {1, . . . , n} que tenham valor mximo
inaceitvel. . .
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
76 / 102
Estrutura recursiva:
I
se n
/ S ento S um soluo da instncia (n 1, p, M, v)
Recorrncia:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
77 / 102
Algoritmo recursivo
por que?
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
78 / 102
M e pi so nmeros naturais
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
79 / 102
p
4
2
1
3
v
500
400
300
450
0
1
2
3
4
Programao dinmica
0
1
2
3
4
5
0
0
0
0
0
0
.0
0
0
0 500 500
0
0 400 400 500 500
0 300 400 700 700 800
0 300 400 700 750
?
Mochila com n = 4 e M = 5
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
80 / 102
p
4
2
1
3
v
500
400
300
450
0
1
2
3
4
Programao dinmica
0
1
2
3
4
5
0
0
0
0
0
0
.0
0
0
0 500 500
0
0 400 400 500 500
0 300 400 700 700 800
0 300 400 700 750 850
Mochila com n = 4 e M = 5
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
81 / 102
Programao dinmica
Algoritmo
MOCHILA (n, p, M, v)
1 para L 0 at M faa
2
X[0, L] 0
3
para m 1 at n faa
4
a X[m 1, L]
5
se L pm 0
6
ento b X[m 1, L pm ] + vm
7
se a < b ento a b
8
X[m, L] a
9 devolva X[n, M ]
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
82 / 102
Programao dinmica
Consumo de tempo
I
tempo total: (n M )
algoritmo lento. . .
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
83 / 102
Programao dinmica
algoritmo no polinomial
Comentrios:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
84 / 102
Mochila de valor
quase mximo
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
85 / 102
O problema
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
86 / 102
Algoritmo de aproximao
Idia:
I
suponha 1 pi M
suponha
v1
v2
vn
p1
p2
pn
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
87 / 102
Algoritmo de aproximao
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
88 / 102
Algoritmo de aproximao
max (v(X), vm )
P. Feofiloff (IME-USP)
v(X) + vm
=
2
1
2
v(X {m})
Anlise de Algoritmos
agosto 2009
89 / 102
Algoritmo de aproximao
Fato
v(X {m}) > v(S) para qualquer conjunto vivel S
Prova:
I
seja Y = X {m}
vm
pm
v(Y ) v(S) =
vm
pm
vm
pm
p(Y S)
p(Y ) p(S)
M M
vm
pm
vi
pi
pi
p(S Y )
v(Y ) v(S) = 0
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
90 / 102
Algoritmo de aproximao
Consumo de tempo
Tamanho de uma instncia: n
I
pr-processamento consome (n lg n)
consumo total: (n lg n)
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
91 / 102
Algoritmo de aproximao
Observaes finais:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
92 / 102
A cobertura de um grafo
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
93 / 102
A cobertura de um grafo
Motivao:
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
94 / 102
A cobertura de um grafo
O problema
Grafos:
I
V um conjunto de vrtices
A um conjunto de arestas
i e j so as pontas da aresta ij
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
95 / 102
A cobertura de um grafo
O problema
Definies:
I
r
r
r
r
r
r
r
r
r
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
96 / 102
A cobertura de um grafo
Algoritmo de aproximao
Complexidade de problema
I
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
97 / 102
A cobertura de um grafo
Algoritmo de aproximao
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
98 / 102
A cobertura de um grafo
Algoritmo de aproximao
Invariantes
No incio de cada iterao do bloco de linhas 6-9
P
i. xi = j yij para todo i em V
ii. xi ci para todo i em V
iii. para toda aresta ij j examinada tem-se xi = ci ou xj = cj
ijA yij
2 c(Z)
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
99 / 102
A cobertura de um grafo
Algoritmo de aproximao
Prova do segundo :
P
P
P
ijA yij
iZ
j yij
P
=
iZ xi
P
iZ ci
Prova do primeiro :
P
P
iX ci =
iX xi
P
P
=
iX
j yij
P
2 ijA yij
P. Feofiloff (IME-USP)
(i Z ou j Z)
(invariante i)
(invariante ii)
(ci = xi )
(invariante i)
(aresta s tem 2 pontas)
Anlise de Algoritmos
agosto 2009
100 / 102
A cobertura de um grafo
Algoritmo de aproximao
Consumo de tempo
Tamanho de instncia: (n, m)
I
consumo total: (n + m)
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
101 / 102
Fim
Obrigado pela ateno!
P. Feofiloff (IME-USP)
Anlise de Algoritmos
agosto 2009
102 / 102