Você está na página 1de 17

Complexidade de Algoritmos

ACH2002 - Introduo Cincia da Computao II

Delano M. Beder
Escola de Artes, Cincias e Humanidades (EACH) Universidade de So Paulo dbeder@usp.br

08/2008

Material baseado em slides do professor Marcos Chaim

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

1 / 17

Projeto de Algoritmos

Algoritmos so projetados para resolver problemas Problema: encontrar a melhor rota, em termos de tempo de entrega, dos produtos das Casas Cear em Ermelino Matarazzo Soluo: algoritmo para descoberta da melhor rota tendo como entrada os locais de entrega Projetar algoritmos implica estudar o seu comportamento No tempo: quanto tempo vai demorar para encontrar a soluo do problema No espao: quanto de memria ser necessrio para encontrar a soluo

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

2 / 17

Anlise de algoritmos

Na rea de anlise de algoritmos h dois problemas distintos:


1

Anlise de um algoritmo particular


Qual o custo de usar um dado algoritmo para resolver um problema especco? Quantas vezes cada parte desse algoritmo vai ser executada? Quanto de memria ser necessria?

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

3 / 17

Anlise de algoritmos
2

Anlise de uma classe de algoritmos


Qual o algoritmo de menor custo possvel para resolver um problema especco? Isto implica investigar toda uma famlia de algoritmos Para realizar esta investigao limites podem ser impostos:
Exemplo: nmero mnimo de comparaes necessrias para ordenar n nmeros por meio de comparaes sucessivas. Logo, nenhum algoritmo vai fazer melhor que isto menor custo possvel. Menor custo possvel medida de diculdade.

Se o custo do algoritmo A = menor custo possvel A timo.


Delano M. Beder (EACH - USP) Complexidade de Algoritmos ACH2002 4 / 17

Complexidade
Como medir o custo de um algoritmo? Como comparar o custo de vrios algoritmos que resolvem um problema?
1

Medio direta do tempo de execuo em um computador real. Problemas: depende do compilador; depende do hardware; medidas de tempo podem se inuenciadas pela memria disponvel. Computador ideal em que cada instruo tem seu custo determinado (soluo de Donald Knuth). Considerar apenas as operaes mais signicativas. Mais usual.
Exemplo: Ordenao nmero de comparaes.

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

5 / 17

Funo de complexidade

Para medir o custo de execuo de um algoritmo Denio de uma funo de custo ou complexidade f (n)
f (n) a medida do tempo ou espao necessrio para executar um algoritmo para uma entrada de tamanho n.

Se a medida de tempo, ento f (n) chamada de funo de complexidade de tempo ou temporal do algoritmo. Se a medida a da memria necessria (espao) para executar o algoritmo, ento f (n) a funo de complexidade espacial. Se nada for dito, entende-se f (n) como complexidade de tempo.

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

6 / 17

Exemplo

int maxArray(int [] A) { int i, max; max = A[0]; for(i=1; i < A.length; ++i) { if(max < A[i]) { max = A[i]; } } return max; }

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

7 / 17

Funo de complexidade

Seja f (n) uma funo de complexidade f (n) o nmero de comparaes para um vetor A de tamanho n Como seria f (n) ?
f (n) = n 1, para n > 0.

Ser que o algoritmo apresentado timo ?

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

8 / 17

Funo de complexidade

Teorema Qualquer algoritmo para encontrar o maior elemento de um conjunto de n elementos, n 1, faz ao menos n 1 comparaes. Prova: Cada um dos n 1 elementos tem que ser vericado, por meio de comparaes, que menor do que algum outro elemento. Logo, n 1 comparaes so necessrias. Como maxArray() possui complexidade igual ao limite inferior de custo, ento seu algoritmo timo.

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

9 / 17

Funo de complexidade

Normalmente, a medida de custo de execuo depende do tamanho da entrada.


Mas este no o nico fato que inuencia o custo.

O tipo de entrada pode tambm inuenciar o custo.


No caso de maxArray() a entrada no inuencia.

Considere um outro mtodo para obter o mximo e o mnimo de um arranjo.

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

10 / 17

Funo de complexidade
void maxArray1(int [] A) { int i, max, min; max = min = A[0]; for(i=1; i < A.length; ++i) { if(max < A[i]) { max = A[i]; } else if(A[i] < min) { min = A[i]; } } System.out.print("Mnimo = " + min); System.out.print(", Mximo = " + max); }
Delano M. Beder (EACH - USP) Complexidade de Algoritmos ACH2002 11 / 17

Funo de complexidade
Qual a funo de complexidade de maxMin1? Depende: Se o arranjo j estiver ordenado em ordem crescente
f (n) = n 1

Se o arranjo j estiver ordenado em ordem decrescente


f (n) = 2(n 1)

Se o A[i] for maior que max metade das vezes


f (n) = n 1 + (n 1)/2 = 3n/2 3/2 para n > 0

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

12 / 17

Funo de complexidade
Trs situaes podem ser observadas:
1

Melhor caso: j ordenado crescentemente


Menor tempo de execuo

Pior caso: j ordenado decrescentemente


Maior tempo de execuo

Caso mdio: um elemento A[i] tem 50% de chances de ser maior ou menor que max
Mdia dos tempos de execuo de todas as entradas de tamanho n

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

13 / 17

Caso mdio

Supe uma distribuio de probabilidades sobre o conjunto de entradas de tamanho n.


O custo mdio obtido com base nessa distribuio.

Normalmente, o caso mdio muito mais difcil de determinar do que o melhor caso e o pior caso.
Usalmente, supe-se que todas as entradas tm a mesma chance de ocorrer equiprovveis. Nem sempre isto verdade, por isto, o caso mdio determinado apenas se zer sentido.

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

14 / 17

Resumo

Problemas requerem algoritmos que os solucione. Algoritmo adequado depende do seu comportamento
complexidade temporal e espacial.

Algoritmo timo
soluciona o problema com o menor custo possvel.

Funo de complexidade
melhor caso, pior caso e caso mdio.

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

15 / 17

Exerccios

Determine a funo de complexidade da busca seqencial de um vetor A de tamanho n para o melhor caso, pior caso e caso mdio. Determine a funo de complexidade do algoritmo de ordenao por insero direta no pior caso para um vetor de tamanho n. (Ver [1] Seo 2.2, pginas 16-21)

Referncias utilizadas: [2] (Seo 1.3 pginas 3-11).

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

16 / 17

Referncias

[1] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest & Clifford Stein. Algoritmos - Traduo da 2a. Edio Americana. Editora Campus, 2002.

[2] Nvio Ziviani. Projeto de Algoritmos com implementaes em C e Pascal. Editora Thomson, 2a. Edio, 2004.

Delano M. Beder (EACH - USP)

Complexidade de Algoritmos

ACH2002

17 / 17