Anda di halaman 1dari 9

7.

Introduo Complexidade de Algoritmos


Fernando Silva
DCC-FCUP

Estruturas de Dados

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

1/1

Anlise de Algoritmos
No desenvolvimento de algoritmos importante ter a noo da eficincia
de um algoritmo, i.e. da eficincia que pode ter uma implementao do
algoritmo.
Eficincia normalmente mede-se em tempo de execuo ou espao
(memria) necessrio execuo do algoritmo (ou programa
associado).
Tempo de Execuo de um algoritmo varia com o input e
normalmente aumenta com o tamanho do input.
I
I

caso mdio difcil de determinar.


normalmente, olha-se para o pior caso possvel de tempo de execuo:
F
F

mais simples de analizar


crucial nas aplicaes mais exigentes, jogos, etc.

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

2/1

Como aferir a eficincia


Como aferir a eficincia, por exemplo, o tempo de execuo?
Anlise emprica executando o programa com inputs de tamanho e
composio variados, mas
I
I
I

nem sempre simples concretizar o algoritmo, ou


os resultados podem no ser conclusivos,
comparao de algoritmos obriga a usar igual software e hardware.

Anlise terica
I

I
I

usa uma descrio de mais alto nvel do algoritmo em vez da


implementao,
caracteriza o tempo de execuo como uma funo do tamanho do
input, n,
tem em conta todos os possveis inputs,
permite avaliar eficincia de forma independente do ambiente de
hardware/software.

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

3/1

Exemplo de anlise de complexidade - findMax()


Como calcular o tempo de execuo do algoritmo seguinte:

Pressupostos (RAM -Random Access Memory):


memria ilimitada e endereos contm um no arbitrrio ou caracteres,
aceder ao contedo de um endereo custa uma unidade de tempo.
max= A[0]; 1 leitura de A[0] + 1 atribuio a max.

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

4/1

Determinar complexidade do findMax()


Casos possveis:
caso mais favorvel (A[0] o maior elemento):
t(n) = 2 + 1 + n + 4(n 1) + 1 = 5n operaes primitivas
pior caso:
t(n) = 2 + 1 + n + 6(n 1) + 1 = 7n 2
caso mdio? difcil de calcular, depende da distribuio do input; usar
teoria de probabilidades.
Normalmente, olharemos para o pior caso, pois d-nos um limite superior
do tempo de execuo.

Clculo do tempo de execuo:


seja a o tempo observado para a operao primitiva mais rpida
seja b o tempo observado para a operao primitiva mais lenta
ento, o pior tempo de execuo T (n) ser
a(7n 2) T (n) b(7n 2) T (n) limitado por 2 funes lineares
Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

5/1

Taxa de crescimento do tempo de execuo


Saliente-se que:
o tempo de execuo, T (n), pode ser afectado pela alterao do
ambiente hardware/software, mas
tal no acontece se considerarmos a taxa de crescimento de T (n)

A taxa de crescimento de T (n) corresponde


ao crescimento de T (n) quando se aumenta o valor de n.
O exemplo findMax()
mostrava T (n) limitado por 2 funes lineares em n, significando que
o tempo de execuo varia na mesma proporo que n.
Logo, diz-se que o crescimento de T (n) linear.

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

6/1

Taxas de crescimento (1)


logartmica
linear
quadrtica
cbica
polinomial
exponencial

log2 n
n
n2
n3
nk
an (a > 1)

Crescimento de
n log2 n
2
1
8
3
16
4
...
...
1024
10

algumas funes:

n
n n log2 n
1.4
2
2
2.8
8
24
4.0
16
64
...
...
...
32 1024
10240

Fernando Silva (DCC-FCUP)

n2
4
64
256
...
> 106

n3
8
512
4096
...
> 109

7. Introduo Complexidade de Algoritmos

2n
4
256
65536
...
> 10308
Estruturas de Dados

7/1

Taxas de crescimento (2)


Se assumirmos que cada operao pode ser executada em 1s (micro-sec),
qual ser o maior problema (funo de n) para um programa que execute
em 1 seg., 1 min., 1 hora?
T (n)
400n
20ndlog ne
2n2
n4
2n

Tamanho mximo problema (n)


1 seg.
1 min.
1 hora
2500 150,000
9,000,000
4096 166,666
7,826,087
707
5,477
42,426
31
88
244
19
25
31

No caso de crescimento exponencial, apenas conseguimos tratar problemas


para dimenses muito pequenas de n.
Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

8/1

A definio big-Oh O()

Definio de ordem de complexidade assimpttica:


Sejam f (n) e g(n) funes de N0 7 R.

f (n) O(g(n)) (ou seja, f (n) da ordem de g(n))

se c > 0, n0 1 : f (n) cg(n), n n0


Interpretao grfica:

O(g(n)) corresponde ao limite


superior da taxa de crescimento de
f (n).
dizer que f (n) O(g(n)), significa
dizer que f (n) no cresce mais do que
g(n).

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

9/1

Exemplos - O()
2n + 10 O(n)
porque:

2n + 10 cn

(c 2)n 10

para c = 3 e n0 = 10 verifica-se sempre que 2n + 10 cn

10
(c 2)

outras funes:

20n3 + 10n log n + 5


ak nk + ak1 nk1 + . . . + a0
3 log n + log log n
2100
5
n

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

O(n3 )
O(nk )
O(log n)
O(1)
O( n1 )
Estruturas de Dados

10 / 1

Regras de simplificao
Algumas regras que olhando para expresses mais complexas,
permitem-nos fazer simplificaes:
Se d(n) O(f (n)), ento ad(n) (com a > 0) O(f (n))
Se d(n) O(f (n)) e e(n) O(g(n)), ento d(n) + e(n) O(f (n) + g(n))
Se d(n) O(f (n)) e e(n) O(g(n)), ento d(n)e(n) O(f (n)g(n))
Se d(n) O(f (n)) e f (n) O(g(n)), ento d(n) O(g(n))

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

11 / 1

Complexidade do mtodo da bolha (bubble-sort)


Faamos a anlise de complexidade do mtodo da bolha:

Efectivamente, o nmero de iteraes total a soma das iteraes que o


ciclo j faz para cada valor de i, i.e.
Pn1

i=1 (n

i)

= (n 1) + (n 2) + . . . + 2 + 1 =
=

n(n1)
2

Fernando Silva (DCC-FCUP)

n2
2

n
2

O(n2 )

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

12 / 1

Complexidade de funes recursivas


Considere-se a funo factorial fact() e seja T (n) o tempo de execuo
para fact(n), ento:

c + T (n 1),
T (n) =
d,

se n > 1
se n 1

assumindo n 2: T (n 1) = c + T (n 2) T (n) = 2c + T (n 2)

em geral: T (n) = ic + T (n i), n > i

se i = n 1, ento T (n) = c(n 1) + T (1) = c(n 1) + d

donde podemos concluir T (n) O(n), i.e. fact() tem complexidade n.


Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

13 / 1

Complexidade da pesquisa binria (1)


Considere-se o mtodo pesqbin() (pesquisa binria no recursiva):

Inicialmente o intervalo de valores n (e = 0 e d = n 1). Em cada


passo do ciclo, o intervalo reduz-se a metade.
Portanto, a questo que se coloca :
I

dado um inteiro n, quantas divises inteiras por 2 so necessrias para


que chegue a 1?
i.e. qual dos valores seguintes ser o primeiro a ser < 1?
n/2, n/4, n/8, . . . , n/2k , . . .

k < 1, Complexidade
7. Introduo
Temos de resolver n/2
o que ddekAlgoritmos
> log2 n

Fernando Silva (DCC-FCUP)

Estruturas de Dados

14 / 1

Complexidade da pesquisa binria (2)


necessrio resolver a equao: n/2k < 1
se aplicarmos logaritmos, temos k > log2 n
Podemos ento dizer que:
I

com k = dlog2 ne sabemos que ao fim de um mximo de k iteraes,


encontramos o valor ou podemos concluir que o valor que procuramos
no existe.

Em resumo, dizemos que a funo pesqbin() tem complexidade


logartmica, O(log2 n), pois o nmero de iteraes necessrias no
excede log2 n, sendo n a dimenso dos dados.

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

15 / 1

Complexidade de rvores binrias de pesquisa (1)


Ver primeiro captulo sobre rvores!
Se inserirmos n valores aleatrios numa rvore binria de pesquisa,
sabemos que
I

o comprimento mdio do caminho da raz at uma folha O(log2 n)


correspondente profundidade da rvore.
verificar se x pertence rvore assim O(log2 n)

Se a rvore for completa, ento nenhum caminho da raz at um dado


n pode ter mais do que 1 + log2 n ns.
I

mtodos insertBTNode(), contains() e removeBTNode() so


O(log2 n).

comum que ao inserirmos n valores aleatrios, a rvore no seja


completa, pode at ficar uma sequncia ordenada. Neste caso cada
insero O(n).
Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

16 / 1

Complexidade de rvores binrias de pesquisa (2)


A questo a saber
I

se uma rvore binria em mdia estar prxima de uma rvore


completa ou de uma sequncia?
isto decide se o tempo mdio O(log2 n) ou O(n).

A demonstrao deste resultado complexa, envolvendo


probabilidades, basta-nos aqui saber que possvel mostrar por
induo que a complexidade ser O(log2 n).

Fernando Silva (DCC-FCUP)

7. Introduo Complexidade de Algoritmos

Estruturas de Dados

17 / 1