• Nenhum resultado encontrado

T( ) 1. T(a i ) 1 i n

N/A
N/A
Protected

Academic year: 2021

Share "T( ) 1. T(a i ) 1 i n"

Copied!
15
0
0

Texto

(1)

CÁLCULO DE COMPLEXIDADE

José de Siqueira UFMG - ICEx - DCC

(2)

Cál ulo de Complexidade de Programas

Contagem do número de operações de ada tipo.

Para isso, é pre iso:

 determinar as operações relevantes.

 determinar o número de vezes que essas operações são exe utadas

 não se onsideram sobre argas de geren iamento de memória ou E/S

Em geral, estamos interessados na omplexidade no pior aso.

(3)

Cál ulo de Complexidade de Programas

Operações em seqüên ia: adi ionam-se os ustos de ada operação.

Regras de Transformação

T (

read

)

→ 1

T (

write

)

→ 1

T (

a := b

)

→ 1

T (

a

>

b

)

(e outros op. lógi os)

→ 1

T (

a

+

b

)

(e outros op. aritméti os)

→ 1

T (

if

a

then

b

else

c)

→ T (a) +

max(

T (b)

,

T (c)

)

T (

for i := 1 to n do

a

i

)

X

1≤i≤n

T (a

i

)

Outros laços: limite superior.

Para funções ou pro edimentos: ordem de hamada das funções.

Funções ou pro edimentos re ursivos: relações de re orrên ia.

(4)

Exemplo 1

fun tion fat(n:integer):integer; begin

if n = 0 then fat := 1 else fat := n

fat(n-1); end; % fat

Operação fundamental:

.

Seja

T (n)

o n o de operações fundamentais:

T (0) = 0

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

para

n ≥ 1

Resolução da eq. de re orrên ia:

T (0) = 0

T (1) = 1 + T (0)

= 1

T (2) = 1 + T (1)

= 2

. . .

T (n) = 1 + T (n − 1) = n

(5)

Exemplo 2

. . .

onst n = 1000;

type Vetor = array [1..n℄ of integer;

. . .

fun tion 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

Operação fundamental: omparação.

Seja

T (n)

o n o

de omparações.

Se A tiver

n

elementos,

T (n) = n − 1

.

O algoritmo é ótimo (tem o menor usto possível).

(6)

Cál ulo de Complexidade de Programas

Três enários possíveis:

1. Melhor aso: menor tempo de exe ução para todas entradas possíveis de tamanho

n

.

2. Pior aso: maior tempo de exe ução

. . .

O usto de um algoritmo nun a é maior que o pior aso.

3. Caso médio (ou esperado): média dos tempos de exe ução

. . .

Supõe uma distribuição de probabilidades sobre o onjunto de entrada de tamanho

n

.

Exemplo 3

Pesquisa seqüen ial: en ontrar uma have dada dentre os registros de um arquivo.

Seja

f (n)

o n o

de registros onsultados:  melhor aso:

f (n) = 1

.

(7)

Exemplo 3

Cál ulo do aso médio

Hipótese: todos elementos são distintos.

Seja

q

a probabilidade de que a have X esteja no arquivo A.

Hipótese: Se X está em A, todas as posições são eqüiprováveis.

Notação: Seja

D

n,i

, 1 ≤ i ≤ n

o onjunto de dados onde X apare e na i-ésima posição.

• D

n,0

é o onjunto de dados do qual X está ausente.

Assim,

p(D

n,i

) =

q

n

e

p(D

n,0

) = 1 − q.

(8)

Pela análise do algoritmo, temos:

usto

(D

n,i

) = i

e usto

(D

n,0

) = n

Assim,

f

médio

(n) =

X

0≤i≤n

p(D

n,i

) ∗

usto

(D

n,i

)

= (1 − q) · n +

X

1≤i≤n

i ·

q

n

Se sabemos que X está em A, temos que

q = 1

e

f

médio

(n) =

n + 1

2

Se há uma han e em duas de que X esteja em A, então

q =

1

2

e

f

médio

(n) =

n

2

+

n + 1

4

=

3n + 1

4

(9)

Cal ular o maior e o menor elemento de um vetor

Versão 1:

pro edure 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 o

de omparações entre os elementos de A.

Quanto vale

f (n)

para o melhor aso, o pior aso e o aso médio?

(10)

Exemplo 4 - Continuação

Versão 2:

pro edure 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 versão, temos:

 melhor aso:

f (n) = n − 1

(dados em ordem res ente)

 pior aso:

f (n) = 2(n − 1)

(dados em ordem de res ente)

(11)

f (n) = n − 1 +

n − 1

2

=

3n

2

3

2

É possível melhorar esta versão ainda mais?

Algoritmo:

1. Compare os elementos de A aos pares (

⌈n/2⌉

omparações).

2. Obtenha o máximo do sub onjunto dos

maiores elementos (

⌈n/2 − 1⌉

omparações). 3. Obtenha o mínimo do sub onjunto dos

menores elementos (

⌈n/2 − 1⌉

omparações).

A notação

⌈x⌉

é hamada de teto de

x

e retorna a parte inteira superior do argumento real.

Da mesma forma, o operador piso de

x

,

⌊x⌋

,

(12)

Versão 3:

pro edure 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℄ é sentinela para % vetor de tamanho ímpar Fim := n; % Fim determina até onde omparar end

else Fim := n-1;

if A[1℄

>

A[2℄ % Determina Max e Min ini iais 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ço não trata asos

% espe iais 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;

(13)

Versão 3 - Análise de Complexidade

Para esta versão, o usto nos três asos é:

f (n) =

n

2

+

n − 2

2

+

n − 2

2

=

3n

2

− 2,

para

n > 0.

Comparação da Complexidade dos 3 Algoritmos Os três

f (n)

algoritmos Melhor aso Pior aso Caso médio MaxMin1

2(n − 1)

2(n − 1)

2(n − 1)

MaxMin2

n − 1

2(n − 1) 3n/2 − 3/2

MaxMin3

3n/2 − 2

3n/2 − 2

3n/2 − 2

É possível aumentar ainda mais a e iên ia do 3

o algoritmo?

(14)

Versão 4 (Re ursiva):

pro edure 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;

(15)

Seja

f (n)

a função de omplexidade em n o

de omparações entre os elementos de A, se A ontiver

n

elementos:

f (n) =

1

para

n ≤ 2,

f (⌊n/2⌋) + f (⌈n/2⌉) + 2

para

n > 2.

Solução da equação de re orrên ia: quando

n = 2

i

, i > 0,

então

f (n) = 2f (n/2) + 2

2f (n/2) = 4f (n/4) + 2 × 2

4f (n/4) = 8f (n/8) + 2

3

. . . . . .

2

i−2

f (n/2

i−2

) = 2

i−1

f (n/2

i−1

) + 2

i−1

Após as substituições, obtemos:

f (n) = 2

i−1

f (n/2

i−1

) +

X

1≤k≤i−1

2

k

= 2

i−1

f (2) + 2

i

− 2

= 2

i−1

+ 2

i

− 2

= 3n/2 − 2

Referências

Documentos relacionados

O piedoso Staupitz abriu a Palavra de Deus à mente de Lutero, mandando-lhe que não mais olhasse para si mesmo, que cessasse a contemplação do castigo infinito

• Não há ilegalidade na utilização, em processo penal no Brasil, de informações compartilhadas por força de acordo internacional de cooperação em matéria penal e oriundas

• Pacientes que apresentam edema macular, retinopatia não proliferativa moderada ou grave e qualquer retinopatia proliferativa de- vem ser encaminhados prontamente a um

Achte beim Aneinanderfügen dieser Teile darauf, dass du ein Klickgeräusch hörst. Wie du vauf der Abbildung sehen kannst, lassen sie sich

Dentre os problemas de Combinatória - arranjo, combinação, permutação e produto cartesiano (ver BORBA; PESSOA, 2013), esses últimos são os menos complexos e mais

ELISANGELA SILVA FERREIRA GOMES DE PAULA 91.. ELISANGELA VITOR

6.1 Os candidatos CLASSIFICADOS no final deste Processo Seletivo constituirão um Banco de Talentos e poderão ser aproveitados nos casos de desistência ou desclassificação

POR MARCIA RANGEL CANDIDO E VERÔNICA TOSTE DAFLON HEBE VESSURI: ANTROPÓLOGA E ESPECIALISTA EM ESTUDOS SOCIAIS SOBRE A CIÊNCIA NA AMÉRICA LATINA.. POR MARCIA RANGEL CANDIDO E