Escolar Documentos
Profissional Documentos
Cultura Documentos
DE ALGORITMOS
Paulo Feolo
Instituto de Matemtica e Estatstica
Universidade de So Paulo
agosto 2009
Introduo
P. Feolo (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 n = 8
20 30 15 10 30 20 30 30
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 3 / 102
Introduo Um exemplo
Algoritmo
SOMAPOSITIVOS (A, n)
1 s 0
2 para i 1 at n faa
3 se A[i] > 0
4 ento s s + A[i]
5 devolva s
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 4 / 102
Introduo Um exemplo
O algoritmo est correto?
depende da instncia
Consumo de tempo do algoritmo
T(n) = ?
funes de N em R
G(n) 0 para n = 0, 1, 2, 3, . . .
Denio da ordem O(G)
Funo F est em O(G) se existe c em N
>
tal que
F(n) c G(n) para todo n sucientemente grande
Exemplo 2: 2n
3
+ 100n est em O(n
3
)
F (G) G O(F)
Denio da ordem (G)
Funo F est em (G) se existe c em N
>
tal que
F(n)
1
c
G(n) para todo n sucientemente grande
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 18 / 102
Comparao assinttica de funes Ordem mega
Exemplos:
n
2
2n est em (n
2
)
100 n no est em (n
2
)
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 19 / 102
Comparao assinttica de funes Ordem Theta
Ordem Teta
tem sabor de F = G
Denio da ordem (G)
Funo F est em (G) se F O(G) e F (G)
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 20 / 102
Comparao assinttica de funes Ordem Theta
Algumas funes em (n
2
):
11n
2
22n + 33
2n
2
+ 3nlg n 4n + 5
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 21 / 102
Comparao assinttica de funes
Consumo de tempo de algoritmos
Algoritmo linear:
tempo (n
2
) no pior caso
no-exemplos: (2
n
), (1.1
n
)
Algoritmo exponencial:
consome tempo (a
n
) para algum a > 1
exemplos: (2
n
), (1.1
n
)
funo F de N em R
>
F(n 0 1 2 3 4
F(n) ? 1 3 7 15
2F(n 2) + 1
+ 1
= 4F(n 2) + 3
.
.
.
= 2
j
F(n j) + 2
j
1
= 2
n1
F(1) + 2
n1
1
= 2
n1
+ 2
n1
1
= 2
n
1
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 26 / 102
Recorrncias Exemplo 2F(n1)+1
Conseqncia
F(n) est em (2
n
)
P. Feolo (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 4
F(n) ? 1 4 5 12
2F(2
j2
) + 2
j1
+ 2
j
= 2
2
F(2
j2
) + 2
1
2
j1
+ 2
j
= 2
3
F(2
j3
) + 2
2
2
j2
+ 2
1
2
j1
+ 2
j
= 2
j
F(2
0
) + 2
j1
2
1
+ + 2
2
2
j2
+ 2
1
2
j1
+ 2
0
2
j
= 2
j
2
0
+ 2
j1
2
1
+ + 2
2
2
j2
+ 2
1
2
j1
+ 2
0
2
j
= (j + 1)2
j
= j 2
j
+ 2
j
P. Feolo (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 nlg n para todo n 2
Prova:
F crescente
. . .
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 30 / 102
Recorrncias Exemplo 2F(n/2)+n
Fato C
F(n)
1
2
nlg n para todo n 2
Prova:
F crescente
. . .
Conseqncia
F(n) est em (nlg n)
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 31 / 102
Recorrncias Exemplo 2F(n/2)+n
Detalhes no alteram a ordem de F:
funo F de N em R
>
F(1) = 1 e
F(n) = 3 F(n/2|) + n para todo n 2
se j = 0 ento F(2
j
) = 1 = 3 3
j
2 2
j
agora tome j 1
F(2
j
) = 3 F(2
j1
) + 2
j
F(2
j
) = 3
3
j
2
j
+ 2
j
F(2
j
) = 3 3
j
2 2
j
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 34 / 102
Recorrncias Exemplo 3F(n/2)+n
3 = 2
lg 3
3
j
= (2
lg 3
)
j
= (2
j
)
lg 3
= n
lg 3
n < n
lg 3
< n
2
Conseqncia
F(n) = 3 n
lg 3
2n para n = 1, 2, 4, 8, 16, 32, 64, . . .
P. Feolo (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 n
lg 3
para todo n 1
Fato C (n arbitrrio)
F(n)
1
3
n
lg 3
para todo n 1
Conseqncia
F est em (n
lg 3
)
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 36 / 102
Recorrncias Exemplo 3F(n/2)+n
Detalhes no alteram a ordem de F:
ento F continua em (n
lg 3
)
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 37 / 102
Recorrncias Teorema mestre
Teorema mestre
Se
F : N R
>
F(n) = a F
n
2
+ cn
k
para n = 2
1
, 2
2
, 2
3
, . . .
F crescente
ento
se lg a = k ento F est em (n
k
lg n)
agora suponha n 2
u v ter 2n dgitos
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 46 / 102
Multiplicao de inteiros
Algoritmo usual de multiplicao
9 9 9 9
7 7 7 7
6 9 9 9 3
6 9 9 9 3
6 9 9 9 3
6 9 9 9 3
7 7 7 6 2 2 2 3
Consumo: (n
2
) unidades de tempo
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 47 / 102
Multiplicao de inteiros
Preparando algoritmo mais eciente
u 9 9 9 9 8 8 8 8
a b
Truque (supondo n par)
u = a 10
n/2
+ b
v = c 10
n/2
+ d
u v = a c 10
n
+ (a d + b c) 10
n/2
+ b d
n < n
lg 3
< n
2
soma de um segmento
r1
q=p
(r q + 1) =
n
j=2
j =
1
2
(n
2
+ n 2)
semelhante a MERGESORT
SOLIDEZII (A, p, q)
5 x
SOLIDEZII (A, q + 1, r)
6 calcula mximo y
+y
de +A[q]+A[q+1]+
14 x max (x
, y
+ y
, x
)
15 devolva x
p q q+1 r
20 30 15 10 30 20 30 30
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 65 / 102
Segmento de soma mxima Algoritmo 2
calcula mximo y
+y
de +A[q]+A[q+1]+ :
6 y
s A[q]
7 para i q 1 decrescendo at p faa
8 s A[i] + s
9 se s > y
ento y
s
10 y
s A[q + 1]
11 para j q + 2 at r faa
12 s s + A[j]
13 se s > y
ento y
s
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 66 / 102
Segmento de soma mxima Algoritmo 2
Algoritmo 2 est correto
Tamanho de uma instncia: n = r p + 1
agora suponha n 2
hiptese de induo: x
solidez de A[p . . q]
etc.
Consumo de tempo
T(n) : consumo de tempo no pior caso
F[q] = max
etc.
Bloco 68 escolhe a maior das rmezas
Consumo de tempo
T(n) : consumo de tempo no pior caso
T est em (n)
Concluso: algoritmo 3 mais rpido que algoritmo 2
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 71 / 102
Segmento de soma mxima Algoritmo 3
Observaes:
p
i
= v
i
: problema dos cheques
v
i
= 1 : problema do pen drive
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 74 / 102
Mochila de valor mximo O problema
Denies:
objetos 1, . . . , n
nmeros naturais p
1
, . . . , p
n
e v
1
, . . . , v
n
p
i
o peso de i
v
i
o valor de i
o valor de S
iS
v
i
um conjunto S vivel se
iS
p
i
M
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 75 / 102
Mochila de valor mximo O problema
Problema da mochila
Dados nmeros naturais p
1
, . . . , p
n
, M, v
1
, . . . , v
n
encontrar um subconjunto vivel de 1, . . . , n que tenham valor mximo
consome tempo (2
n
)
inaceitvel. . .
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 76 / 102
Mochila de valor mximo
A estrutura recursiva do problema
Estrutura recursiva:
se n S ento S n soluo de (n 1, p, M p
n
, v)
Recorrncia:
X(n, M) = max
X(n1, M) , X(n1, Mp
n
) + v
n
se p
n
> M ento X(n, M) = X(n1, M)
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 77 / 102
Mochila de valor mximo
Algoritmo recursivo
Recorrncia transformada em algoritmo:
por que?
M e p
i
so nmeros naturais
algoritmo lento. . .
algoritmo no polinomial
Comentrios:
suponha 1 p
i
M
suponha
v
1
p
1
v
2
p
2
v
n
p
n
seja X = 1, . . . , m1
seja v(S) :=
iS
v
i
para qualquer S
max (v(X), v
m
)
v(X) + v
m
2
=
1
2
v(X m)
seja Y = X m
iSY
v
i
v(Y ) v(S) =
iY S
v
i
p
i
p
i
iSY
v
i
p
i
p
i
v(Y ) v(S)
v
m
p
m
p(Y S)
v
m
p
m
p(S Y )
v(Y ) v(S) =
v
m
p
m
p(Y ) p(S)
M M
v(Y ) v(S) = 0
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 90 / 102
Mochila quase tima Algoritmo de aproximao
Consumo de tempo
Tamanho de uma instncia: n
V um conjunto de vrtices
A um conjunto de arestas
i e j so as pontas da aresta ij
ijA
y
ij
2 c(Z)
para qualquer cobertura Z
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 99 / 102
A cobertura de um grafo Algoritmo de aproximao
Prova do segundo :
ijA
y
ij
iZ
j
y
ij
(i Z ou j Z)
=
iZ
x
i
(invariante i)
iZ
c
i
(invariante ii)
Prova do primeiro :
iX
c
i
=
iX
x
i
(c
i
= x
i
)
=
iX
j
y
ij
(invariante i)
2
ijA
y
ij
(aresta s tem 2 pontas)
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 100 / 102
A cobertura de um grafo Algoritmo de aproximao
Consumo de tempo
Tamanho de instncia: (n, m)
consumo total: (n + m)
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 101 / 102
Fim
Obrigado pela ateno!
P. Feolo (IME-USP) Anlise de Algoritmos agosto 2009 102 / 102