• 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

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

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

• 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

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

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