Professional Documents
Culture Documents
CALCULO
DE COMPLEXIDADE
Jose de Siqueira
UFMG - ICEx - DCC
1o semestre de 2015
&
'
Calculo de Complexidade
Jose de Siqueira
&
'
Calculo de Complexidade
1
1
1
1
1
T (a) + max(T (b),T (c))
X
T (ai )
1in
Jose de Siqueira
&
'
Calculo de Complexidade
Exemplo 1
function fat(n:integer):integer;
begin
if n = 0 then fat := 1
else fat := n fat(n-1);
end; % fat
Operacao fundamental: .
Seja T (n) o n de operacoes fundamentais:
o
T (0) = 0
Jose de Siqueira
&
'
Calculo de Complexidade
Exemplo 2
...
const n = 1000;
type Vetor = array [1..n] of integer;
...
function Max(var A: Vetor): integer;
var i, aux: integer;
begin
aux := A[1];
for i:= 2 to n do
if aux < A[i] then aux := A[i];
Max := aux;
end; % Max
Operacao fundamental: comparacao.
Seja T (n) o n de comparacoes.
o
Jose de Siqueira
&
'
Calculo de Complexidade
Jose de Siqueira
&
'
Calculo de Complexidade
Exemplo 3 - Continua
c
ao
C
alculo do caso m
edio
Hip
otese: todos os elementos sao distintos.
Seja q a probabilidade de que a chave X esteja no
arquivo A.
Hip
otese: Se X esta em A, todas as posicoes sao
equiprovaveis.
Notac
ao: Seja Dn,i, 1 i n o conjunto de
dados onde X aparece na i-esima posicao.
Dn,0 e o conjunto de dados do qual X esta ausente.
Assim,
p(Dn,i) =
e
q
n
p(Dn,0) = 1 q.
Jose de Siqueira
&
'
Calculo de Complexidade
fmedio(n) =
Jose de Siqueira
&
n n + 1 3n + 1
+
=
2
4
4
'
Calculo de Complexidade
Exemplo 4
Calcular o maior e o menor elemento de um vetor
Versao 1:
procedure MaxMin1(var A: Vetor; var
Max, Min: integer);
var i: integer;
begin
Max := A[1];
Min := A[1];
for i := 2 to n do
begin
if A[i] > Max then Max := A[i];
if A[i] < Min then Min := A[i];
end;
end; % MaxMin1
Seja f (n) o n de comparacoes entre os elementos
de A.
o
&
'
Calculo de Complexidade
Exemplo 4 - Continua
c
ao
Versao 2:
procedure MaxMin2(var A: Vetor; var Max,
Min: integer);
var i: integer;
begin
Max := A[1];
Min := A[1];
for i := 2 to n do
begin
if A[i] > Max then Max := A[i]
else if A[i] < Min then Min := A[i];
end;
end; % MaxMin2
&
'
Calculo de Complexidade
f (n) = n 1 +
2
2
2
possvel melhorar esta versao ainda mais?
E
Algoritmo:
1. Compare os elementos de A aos pares (dn/2e
comparacoes).
2. Obtenha o maximo do subconjunto dos
maiores elementos (dn/2 1e comparacoes).
3. Obtenha o mnimo do subconjunto dos
menores elementos (dn/2 1e comparacoes).
A notacao dxe e chamada de teto de x e retorna o
menor inteiro superior a x.
Da mesma forma, o operador piso de x, bxc,
retorna o maior inteiro inferior a x.
Jose de Siqueira
&
10
'
Calculo de Complexidade
Exemplo 4 - Continua
c
ao
Versao 3:
procedure MaxMin3(var A:Vetor;var Max,Min:integer);
var i, Fim: integer;
begin
if (n mod 2) > 0 then
begin
A[n+1] := A[n]; % A[n+1] e
sentinela para
% vetor de tamanho
mpar
Fim := n; % Fim determina at
e onde comparar
end
else Fim := n-1;
if A[1] > A[2] % Determina Max e Min iniciais
then begin Max := A[1]; Min := A[2]; end;
else begin Max := A[2]; Min := A[1]; end;
i:= 3;
while i Fim do % O la
co n~
ao trata casos
% especiais
begin
if A[i] > A[i+1] then
begin
if A[i] > Max then Max := A[i];
if A[i+1] < Min then Min := A[i+1];
end
else begin
if A[i] < Min then Min := A[i];
if A[i+1] > Max then Max := A[i+1];
end;
i := i+2;
end; %while
end; %MaxMin3
Jose de Siqueira
&
11
'
Calculo de Complexidade
Vers
ao 3 - An
alise de Complexidade
Para esta versao, o custo nos tres casos e:
n n 2 n 2 3n
f (n) = +
+
=
2, para n > 0.
2
2
2
2
Compara
c
ao da Complexidade
dos 3 Algoritmos
Os tres
algoritmos Melhor caso
MaxMin1 2(n 1)
MaxMin2
n1
MaxMin3 3n/2 2
f (n)
Pior caso Caso medio
2(n 1) 2(n 1)
2(n 1) 3n/2 3/2
3n/2 2 3n/2 2
Jose de Siqueira
&
12
'
Calculo de Complexidade
Exemplo 4 - Continua
c
ao
Versao 4 (Recursiva):
procedure MaxMin4(Linf, Lsup: integer;
var Max,Min: integer);
var Max1, Max2, Min1, Min2, Meio: integer;
begin
if Lsup - Linf 1 then
if A[Linf] < A[Lsup]
then begin Max := A[Lsup];
Min := A[Linf];
end;
else begin Max := A[Linf];
Min := A[Lsup];
end
else begin
Meio := (Linf + Lsup) div 2;
MaxMin4(Linf, Meio, Max1, Min1);
MaxMin4(Meio+1, Lsup, Max2, Min2);
if Max1 > Max2 then Max := Max1
else Max := Max2;
if Min1 < Min2 then Min := Min1
else Min := Min2;
end;
end; % MaxMin4
1 Linf Lsup n.
Jose de Siqueira
&
13
'
Calculo de Complexidade
Vers
ao 4 - An
alise de Complexidade
Seja f (n) a funcao de complexidade em n de
comparacoes entre os elementos de A, se A
contiver n elementos:
o
f (n) =
1
para n 2,
f (bn/2c) + f (dn/2e) + 2 para n > 2.
= 2f (n/2) + 2
= 4f (n/4) + 2 2
= 8f (n/8) + 23
..
= 2i1f (n/2i1) + 2i1
2k
1ki1
i1
= 2 f (2) + 2 2
= 2i1 + 2i 2
= 3n/2 2
para o melhor caso, o pior caso e o caso medio.
Jose de Siqueira
&
14