You are on page 1of 15

'

CALCULO
DE COMPLEXIDADE
Jose de Siqueira
UFMG - ICEx - DCC
1o semestre de 2015

&

'

Calculo de Complexidade

Calculo de Complexidade de Programas

Contagem do numero de operacoes de cada tipo.


Para isso, e preciso:
determinar as operacoes relevantes.
determinar o numero de vezes que essas
operacoes sao executadas
nao se consideram sobrecargas de
gerenciamento de memoria ou E/S
Em geral, estamos interessados na complexidade
no pior caso.

Jose de Siqueira

&

'

Calculo de Complexidade

Calculo de Complexidade de Programas

Operacoes em sequencia: adicionam-se os custos


de cada operacao.
Regras de Transforma
c
ao
T (read)
T (write)
T (a := b)
T (a > b)(e outros op. logicos)
T (a + b)(e outros op. aritmeticos)
T (if a then b else c)
T (for i := 1 to n do ai )

1
1
1
1
1
T (a) + max(T (b),T (c))
X
T (ai )
1in

Outros lacos: limite superior.


Para funcoes ou procedimentos: ordem de
chamada das funcoes.
Funcoes ou procedimentos recursivos: rela
co
es
de recorr
encia.

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

T (n) = 1 + T (n 1), para n 1


Resolucao da eq. de recorrencia:
T (0) = 0
T (1) = 1 + T (0)
= 1
T (2) = 1 + T (1)
= 2
..
T (n) = 1 + T (n 1) = n

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

Se A tiver n elementos, T (n) = n 1.


O algoritmo e o
timo (tem o menor custo
possvel).

Jose de Siqueira

&

'

Calculo de Complexidade

Calculo de Complexidade de Programas


Tres cenarios possveis:
1. Melhor caso: menor tempo de execucao para
todas entradas possveis de tamanho n.
2. Pior caso: maior tempo de execucao. . . O
custo de um algoritmo nunca e maior que o
pior caso.
3. Caso medio (ou esperado): media dos tempos
de execucao. . . Supoe uma distribuicao de
probabilidades sobre o conjunto de entrada de
tamanho n.
Exemplo 3
Pesquisa sequencial: encontrar uma chave dada
dentre os registros de um arquivo.
Seja f (n) o n de registros consultados:
o

melhor caso: f (n) = 1.


pior caso: f (n) = n.

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

Pela analise do algoritmo, temos:


custo(Dn,i) = i e custo(Dn,0) = n
Assim,
p(Dn,i) custo(Dn,i)
0in
q
X
= (1 q) n +
i
1in
n

fmedio(n) =

Se sabemos que X esta em A, temos que q = 1 e


n+1
fmedio(n) =
2
Se ha uma chance em duas de que X esteja em A,
entao q = 12 e
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

Quanto vale f (n) para o melhor caso, o pior caso


e o caso medio?
possvel melhorar esta implementacao?
E
Jose de Siqueira

&

'

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

Para esta versao, temos:


melhor caso: f (n) = n 1 (dados em ordem
crescente)
pior caso: f (n) = 2(n 1) (dados em ordem
decrescente)
3
caso medio: 3n
2 2
Jose de Siqueira

&

'

Calculo de Complexidade

Calculo do caso medio:


Considerando A[i] > Max a metade das vezes,
n 1 3n 3
=

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

possvel aumentar ainda mais a eficiencia do 3


E
algoritmo?

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.

Solucao da equacao de recorrencia:


quando n = 2i, i > 0, entao
f (n)
2f (n/2)
4f (n/4)
..
2i2f (n/2i2)

= 2f (n/2) + 2
= 4f (n/4) + 2 2
= 8f (n/8) + 23
..
= 2i1f (n/2i1) + 2i1

Apos as substituicoes, obtemos:


f (n) = 2i1f (n/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