Análise de Algoritmos
• Sejam e constantes, seja uma função definida sobre os inteiros não negativos pela recorrência
• então pode ser limitado assintoticamente como a seguir:
1. Se para alguma constante , então
2. Se , então
3. Se para alguma constante , e se . para alguma constante e grande,
então
www.nakamura.eti.br/eduardo Análise de Algoritmos 2
1
a b 1 T (n )
) (n T
1 se
, ) (
1 se
, ) 1
( aT n b f n n
n n T
O n
ba n
f ( ) log 0
n ba
n
T ( ) log
n ba
n
f ( ) log T ( n ) n log
ba log n
n
ba n
f ( ) log
n b cf (n )
af
0
( )
)
( n f n
T
n
• Exemplo #01
www.nakamura.eti.br/eduardo Análise de Algoritmos 3
1 se
, 1 2
1 se
, ) 1
( T n n
n n T
) (log )
( n n
T
1 a
2 b
) 1 ( 1
)
( n f
0 1 log
log b a 2
1
)
( n n log n 0
f
ba
n n n n n
n
T ( ) log
ba log 0 log log
• Exemplo #02
www.nakamura.eti.br/eduardo Análise de Algoritmos 4
) ( )
( n n
T
2 a
2 b
) 1 ( 1
)
( n f
1 2 log
log b a 2
1 , para 1
)
( n O n log O n 1 O
f
ba
n n n
n
T ( ) log
ba 1
1 se
, 1 2
2
1 se
, ) 1
( T n n
n n
T
• Exemplo #03
www.nakamura.eti.br/eduardo Análise de Algoritmos 5
) ( )
( n n
T
2 a
3 b
) ( )
( n n n
f
6 , 0 2 log
log b a 3
, para 0 , 4
)
( n n log n 0 , 6 n
f
ba
f n n
n
T ( ) ( )
1 se
, 3
2
1 se
, ) 1
( T n n n
n n T
n b cf n 2 f n 3 cf n 2 3 n cn , 3 c 1
af verdade 2
• Mostre que o custo do Bubble-sort é
www.nakamura.eti.br/eduardo Análise de Algoritmos 6
) ( n 2
BUBBLE-SORT(A, n)
1: for i 1 to n do
2: for j i + 1 to n do 3: if A[j] < A[i] then 4: troca(A[i], A[j]);
5: end if
6: end for
7: end for
• Mostre que o custo do Bubble-sort é
www.nakamura.eti.br/eduardo Análise de Algoritmos 7
) ( n 2
BUBBLE-SORT(A, n)
1: for i 1 to n do
2: for j i + 1 to n do 3: if A[j] < A[i] then 4: troca(A[i], A[j]);
5: end if 6: end for 7: end for
Avaliar o número de
comparações
• Mostre que o custo do Bubble-sort é
www.nakamura.eti.br/eduardo Análise de Algoritmos 8
) ( n 2
BUBBLE-SORT(A, n)
1: for i 1 to n do
2: for j i + 1 to n do 3: if A[j] < A[i] then 4: troca(A[i], A[j]);
5: end if 6: end for 7: end for
1
)
(n
T
• Mostre que o custo do Bubble-sort é
www.nakamura.eti.br/eduardo Análise de Algoritmos 9
) ( n 2
BUBBLE-SORT(A, n)
1: for i 1 to n do
2: for j i + 1 to n do 3: if A[j] < A[i] then 4: troca(A[i], A[j]);
5: end if 6: end for 7: end for
n
i
j 1
1
)
(n
T
n
i
n
i j
1 1
1
• Mostre que o custo do Bubble-sort é
www.nakamura.eti.br/eduardo Análise de Algoritmos 10
) ( n 2
BUBBLE-SORT(A, n)
1: for i 1 to n do
2: for j i + 1 to n do 3: if A[j] < A[i] then 4: troca(A[i], A[j]);
5: end if 6: end for 7: end for
)
(n
T
• Resolvendo os somatórios temos
www.nakamura.eti.br/eduardo Análise de Algoritmos 11
n n
n n n
n T
n n n
n n n
n T
i n
i n n
T
i n n
T n T
n
i n
i n
i n
i n
i
n
i j
2 2
2
2 2
2
1 1
1 1
1 1
2 1 2
) 2 (
2 2
) 1 ) (
( ) (
1 ) 1 (
) (
1 )
(
• Observe e analise a variação abaixo do merge-sort, assumindo que a função MERGE3 possui custo n.
www.nakamura.eti.br/eduardo Análise de Algoritmos 12
MERGE3-SORT(A, p, r) 1: if p < r then
2: d (p+r)/3; // inteiro 3: MERGE3-SORT(A,p,p+d);
4: MERGE3-SORT(A,P+d+1,r-d);
5: MERGE3-SORT(A,r-d+1,r);
6: MERGE3(A,p,d,r); // custo n 7: end if
1 1
3 3
1 ) 1
( T n n n
n n
T , se
se
,
• Analise o algoritmo abaixo que calcula o n-ésimo elemento de uma PG de razão 2
www.nakamura.eti.br/eduardo Análise de Algoritmos 13
NUM-PG2(n)
1: if n = 0 then 2: return 1;
3: else
4: return NUM-PG2(n-1) + NUM-PG2(n-1);
5: end if
0 se
, 1 1 2
0 se
, ) 1
( T n n
n n
T
• Analise o algoritmo abaixo que troca o elemento da posição i com o elemento da posição i + 1, caso o elemento em i+1 seja par
www.nakamura.eti.br/eduardo Análise de Algoritmos 14