analise de complexidade de algoritmo

43
 Estruturas Avançadas de Dados I (Complexidade) Prof. Gilberto Irajá Müller Prof. Gilberto Irajá Müller Última atualização 11/8/2011

Upload: fsennavr

Post on 08-Jul-2015

304 views

Category:

Documents


1 download

TRANSCRIPT

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 1/43

Estruturas Avançadas de

Dados I(Complexidade)

Prof. Gilberto Irajá Müller Prof. Gilberto Irajá Müller 

Última atualização 11/8/2011

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 2/43

Introdução

O que é um problema computacional?É o conjunto de entradas válidas e qual é a relaçãoentre a entrada e a saída desejada. Alguns

problemas computacionais não possuem soluçãoótima.

Todo problema computacional é uma coleção de

"casos particulares" que chamaremos deINSTÂNCIAS.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 3/43

Introdução

O que é uma instância? É um exemplo concreto do problema, com dados

específicos. Cada conjunto de dados de umproblema define uma instância do problema;

Considere, por exemplo, o problema dedeterminar a média de dois números, digamos a eb. Uma instância desse problema consiste emdeterminar a média de 123 e 9876. Outrainstância consiste em determinar a média de22222 e 34343434.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 4/43

Introdução

O que é uma instância? A palavra é um (mau) neologismo, importado do

inglês. Ela está sendo empregada aqui nosentido de exemplo, exemplar, espécime,amostra e ilustração;

Cada instância é definida por um conjunto dedados;

Poderemos encontrar na literatura recente oconceito de p-Teste (Programas Teste).

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 5/43

Introdução

Tamanho de uma instância O tamanho de uma instância de um problema é a

quantidade de dados necessária para descrever ainstância (ou seja, o "espaço" necessário paraespecificar a instância);

Em geral, o tamanho de uma instância é descritopor um único número natural, mas às vezes émais conveniente usar um par, ou até um terno,

de números naturais.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 6/43

Introdução

Algoritmos para os problemas Dizemos que um algoritmo resolve um

problema se, ao receber a descrição de qualquerinstância do problema, devolve uma solução dainstância (ou informa que a instância não temsolução).

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 7/43

Introdução

Mas o que é um Algoritmo? Segundo Cormen (2009), um algoritmo é

qualquer procedimento computacional bemdefinido que toma algum valor ou conjunto devalores como entrada e produz algum valor ouconjunto de valores como saída.

Algoritmos são utilizados para resolver diversos

tipos de problemas!

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 8/43

Introdução

E a Estrutura de Dados? Durante o processo de computação de sua saída, um

algoritmo manipula dados obtidos de sua entrada.Quando os dados são dispostos e manipulados de forma

homogênea, constituem um tipo abstrato de dados.

Um algoritmo é projetado em função de tipos abstratos dedados. Para implementá-los em uma linguagem deprogramação é necessário representá-los de alguma

maneira;

Na representação do tipo abstrato de dados, emprega-seuma estrutura de dados.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 9/43

Introdução

E a Estrutura de Dados? Segundo Cormen (2009), uma estrutura de

dados é um meio para armazenar e organizardados com o objetivo de facilitar o acesso e asmodicações;

A escolha de um algoritmo para resolver umadeterminada instância de um problema depende

também do tipo de estrutura utilizada paraarmazenamento dos dados, ou seja, a estruturade dados.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 10/43

 Análise de Algoritmos

Segundo Cormen (2009), analisar um algoritmosignifica prever os recursos de que ele necessitará.Em geral, memória, largura de banda decomunicação ou hardware de computação são a

preocupação primordial;

Porém, é o tempo computacional que se desejamedir.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 11/43

 Análise de Algoritmos

Dois aspectos importantes:Um problema pode, geralmente, ser resolvido por diferentesalgoritmos;

 A existência de um algoritmo não implica, necessariamente, queeste problema possa ser resolvido na prática.

A análise de algoritmos pode ser definida como oestudo da estimativa de tempo de execução dealgoritmos;

O tempo computacional é determinado pelosseguintes aspectos:

Tempo para executar uma instrução ou passo; A natureza do algoritmo;

O tamanho do conjunto de dados que constitui o problema.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 12/43

 Análise de Algoritmos

É necessário ter uma forma de criar medidas decomparação entre algoritmos que resolvem ummesmo problema. Dessa forma, é possíveldeterminar:

 A viabilidade de um algoritmo;Qual é o melhor algoritmo para a solução de um problema.

O interessante é ter uma comparação relativa entrealgoritmos.

 Assumir que a execução de qualquer passo de um algoritmo levaa um tempo fixo e igual;O tempo de execução de um computador particular não éinteressante.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 13/43

 Análise de Algoritmos

Qual a quantidade de recursos utilizados pararesolver um problema?

TempoEspaço

Expressar como uma função do tamanho doproblema.

Como os requisitos crescem com o aumento do problema?

Tamanho do problema:Número de elementos a ser tratadoTamanho dos elementos

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 14/43

 Análise de Algoritmos

Considerar eficiência de tempo:Número de operações expresso em termos do tamanho daentrada;Se dobramos o tamanho da entrada, qual o tempo de resposta?

Por que a eficiência é importante? Velocidade de computação aumentou (hardware);Crescimento de aplicações com o aumento do podercomputacional;Maior demanda por aumento na velocidade decomputação.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 15/43

 Análise de Algoritmos

Quando a velocidade de computaçãoaumenta, podemos tratar mais dados?

Um algoritmo toma n2 comparações paraordenar n números;

Necessitamos de 1 segundo para ordenar 5números (25 comparações);

Velocidade de computação aumenta de um fatorde 100

Usando 1 segundo, podemos executar 100x25comparações e ordenar 50 números com 100vezes de ganho em velocidade, ordenamosapenas 10 vezes mais números.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 16/43

 Análise de Algoritmos

Como medir a eficiência do algoritmo? Estudo experimental e/ou Benchmarking

Desenvolver um programa que implemente o algoritmo; Executar o programa com diferentes instâncias; Usar um método como System.currentTimeMillis() para obter

medidas acuradas do tempo de execução real.

Limitações: Necessidade de implementar e testar o algoritmo; Experimentos em cenários limitados; Dependem de compilador, hardware, quantidade de memória, entre

outros.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 17/43

 Análise de Algoritmos

Como medir a eficiência do algoritmo? Análise assintótica

Usa uma descrição de alto nível dos algoritmos em vez de testaruma de suas implementações;

Leva em consideração todas as possíveis entradas;

Permite a avaliação da eficiência de algoritmos de uma forma que éindependente do hardware e ambiente de software utilizado;

Modelo matemático.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 18/43

 Análise Assintótica

O tempo de execução de um algoritmo será representado poruma função de custo T, onde T(n) é a medida do temponecessário para executar um algoritmo para um problema detamanho n;

Logo, T é chamada função complexidade de tempo doalgoritmo;

Se T(n) é a medida de memória necessária para a execuçãode um algoritmo, então T é chamada de função de

complexidade de espaço;

Conforme Ziviani (2004), é importante enfatizar que T(n) nãorepresenta diretamente o tempo de execução, mas o númerode vezes que certa operação relevante é executada.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 19/43

 Análise Assintótica

Ex.:public int getMenor(int[] a) {

int menor = a[0];for(int i = 1; i < a.length; i++)

if (a[i] < menor)menor = a[i];return menor;

}

 A função de complexidade de tempo T(n) é o número decomparações entre os elementos do array a, visto que, paraencontrar o menor elemento do array, é preciso mostrar quecada um dos n 1 elementos é menor do que algum outro, epara isso, gasta-se pelo menos n 1 comparações, logo:

T ( n ) = n - 1

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 20/43

 Análise Assintótica

Porém, em algoritmos de busca sequencial, não secomportam dessa maneira, ou seja, uniforme!

Neste caso, identificamos três casos:

Pior caso: corresponde ao maior tempo de execuçãosobre todas as entradas de tamanho n;

Melhor caso: corresponde ao menor tempo de execuçãosobre todas as entradas de tamanho n;

Caso médio: corresponde à média dos tempos deexecução do algoritmo sobre todas as entradas detamanho n.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 21/43

 Análise Assintótica

Pior caso: T(n) = n Melhor caso: T(n) = 1 Caso médio: T(n) = (n + 1) / 2

� Para encontrar o caso médio, considere pi aprobabilidade de procurar o i-ésimo registro. Comopara encontrar o i-ésimo registro são necessárias icomparações, temos:

T(n) = 1. p1 + 2. p2 + 3.p3 + ... + n.pn

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 22/43

 Análise Assintótica

Considerando que a probabilidade de cada um dosregistros ser encontrado é 1/n, temos:

T(n) = 1.1/n + 2.1/n + 3.1/n + ... + n.1/n

T(n) = 1.1/n . (1 + 2 + 3 + ... + n) p PAT(n) = 1.1/n . (n . (n + 1) / 2)T(n) = (n + 1) / 2

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 23/43

 Análise Assintótica - Consideração

� Pior caso: o pior caso ocorre quando o elemento está na última posiçãoem uma busca sequencial (ou não existe);

� Melhor caso: quando os dados de entrada são tais que o algoritmo temo menor trabalho possível para encontrar a solução. Exemplo: paradeterminar a posição de um elemento em um array, o melhor caso ocorrequando o elemento está na primeira posição em uma busca sequencial;

� Caso médio: se refere ao trabalho feito pelo algoritmo em média. Assumimos que os dados de entrada são randômicos;

O melhor caso é muito raro e, portanto, pouco significativo. Na maioria dos algoritmos utilizamos a métrica do pior caso. Em algumas situaçõ es pod emos utilizar a métrica do caso médio. E xist em situaçõ es em que o uso da métricado pior caso é obrigatório (control e d e tráf ego aér eo, por exemplo).

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 24/43

 Análise Assintótica - Exemplo

Número Melhor caso Pior caso Caso médio1 1 1 12 1 1 13 2 n+1 (n/2)+14 1 n n/25 1 0 16 1 n n/27 1 1 18 0 1 09 1 0 1

T(n) 9 3n + 5 (3n + 12)/2

 public int getPos(int[] a, int x) { boolean existe = false;

int i = 0;

 while(i < a.length || !existe) {

if(a[i] == x)

existe = true;

i++;

}

if(!existe)return -1;

else

return i - 1;

}

(1)

(2)

(3)

(4)

(5)

(6)

(7)(8)

(9)

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 25/43

 Análise Assintótica

Como exemplo, considere o número de operaçõesde cada um dos dois algoritmos abaixo queresolvem o mesmo problema, como função de n.

Algoritmo 1: f 1(n) = 2n2 + 5n operações

Algoritmo 2: f 2(n) = 500n + 4000 operações

Dependendo do valor de n, o Algoritmo 1 poderequerer mais ou menos operações que o Algoritmo

2. (Compare as duas funções para n = 10 e n =256)

Qual algoritmo é mais eficiente?

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 26/43

 Análise Assintótica

Um caso de particular interesse é quando n temvalor muito grande (npg), denominadocomportamento assintótico; por isso,chamamos de Análise Assintótica!

Os termos inferiores e as constantes multiplicativascontribuem pouco na comparação e podem serdescartados.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 27/43

Notação Assintótica

Notação O (ou Big O) A notação O dene um limite superior para a função,

por um fator constante; Escreve-se f(n) = O(g(n)), se existirem constantes

positivas c e n0 tais que para n u n0, o valor de f(n) émenor ou igual a cg(n). Neste caso, pode-se dizerque g(n) é um limite assintótico superior para f(n).

f(n) = O(g(n)), c > 0 e n0 ` 0 e f(n) e cg(n), n u n0

Escrevemos f(n) = O(g(n)) para expressar que g(n)domina assintoticamente f(n). Lê-se f(n) é da ordemno máximo g(n).

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 28/43

Notação Assintótica

Notação O (ou Big O)

Quando a notação O é usada para expressar o tempo deexecução de um algoritmo no pior caso, está se denindotambém o limite (superior) do tempo de execução dessealgoritmo para todas as entradas.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 29/43

Notação Assintótica

Notação ; (ou Big Ômega) A notação ; dene um limite inferior para a

função, por um fator constante.

Escreve-se f(n) =;

(g(n)), se existiremconstantes positivas c e n0 tais que para n u n0, ovalor de f(n) é maior ou igual a cg(n).

Pode-se dizer que g(n) é um limite assintótico

inferior para f(n).

f(n) = ;(g(n)), c > 0 e n0 ` 0 e cg(n) e f(n), n u n0

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 30/43

Notação Assintótica

Notação ; (ou Big Ômega)

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 31/43

Notação Assintótica

Notação ; (ou Big Ômega) Quando a notação ; é usada para expressar o tempo de

execução de um algoritmo no melhor caso, está se denindotambém o limite (inferior) do tempo de execução dessealgoritmo para todas as entradas.

Por exemplo, o algoritmo de ordenação por inserção é ;(n) nomelhor caso. O tempo de execução do algoritmo de ordenação por inserção é ;(n).

O que signica dizer que o tempo de execução (semespecicar se é para o pior caso, melhor caso, ou caso médio) é;(g(n))? O tempo de execução desse algoritmo é pelo menos uma constante vezes

g(n) para valores sucientemente grandes de n.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 32/43

Notação Assintótica

Notação 5 (ou Big Theta) A notação 5 limita a função por fatores

constantes.

Escreve-se f(n) =5

(g(n)), se existiremconstantes positivas c1; c2 e n0 tais que para n u

n0, o valor de f(n) está sempre entre c1g(n) ec2g(n) inclusive.

Neste caso, pode-se dizer que g(n) é um limiteassintótico rme para f(n).

f(n) = 5(g(n)), c1 > 0, c2 > 0 e n0 `

0 e c1g(n) e f(n) e c2g(n), n u n0

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 33/43

Notação Assintótica

Notação 5 (ou Big Theta)

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 34/43

Notação Assintótica

Notação o (O pequeno) e [ (ômegapequeno)

Possuem o mesmo conceito que o Big O e o BigÔmega, porém, os limites sempre serãoinferiores, ou seja, < ou > e não e ou u, ao sercomparado com a cg(n).

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 35/43

Notação Assintótica - Terminologia

Terminologia de classes mais comunsde funções:

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 36/43

Notação Assintótica - Ordens

log nn

n2

2n

n

 f 

n log n

1

(linear)

(quadrática)(exponencial)

(logarítmica)

(constante)

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 37/43

Comparação de Funções de Complexidade

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 38/43

Funções de Custo (número de comparações) do Algoritmo de Ordenação por Inserção

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 39/43

Funções de Custo e Notações do Algoritmo deOrdenação por Inserção

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 40/43

 Análise Assintótica ExercíciosQual a Ordem?

Melhor = Pior = Médio

int conta = 0;

for(int i = 0; i < n; i++)

for(int j = 0; j < n; j++)

conta++;

Melhor = Pior = Médioint conta = 0;int i = 1;

while(i <= n){for(int j = 0; j < n ; j++)

conta++;i *= 2;

}

1.1

1.2

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 41/43

 Análise Assintótica Exercícios

1.3. Dois algoritmos A e B possuem complexidade n5 e 2n,respectivamente. Você utilizaria o algoritmo B ao invés do A.Em qual caso? Desenvolva um gráfico com a análise dos doisalgoritmos.

1.4. Baseando-se no algoritmo abaixo determine a ordem decomplexidade. Podemos dizer que o algoritmo é O(n2)?Justifique.

public void MaxMin(int[] a) {int max = a[0];int min = a[0];for(int i = 1; i < a.length; i++) {

if(a[i] > max) max = a[i];if(a[i] < min) min = a[i];

}

}

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 42/43

 Análise Assintótica Exercícios

1.5. Implemente três algoritmos que represente,respectivamente, as classes abaixo:O(n) LinearO(log n) Logarítmica

O(n2) Quadrática

Para cada algoritmo, gere informações para n entradasdistintas e esboce um gráfico de linha (em Excel) para cadaclasse.

Enviar por e-mail para o professor os algoritmos e os gráficosem XLS.

5/9/2018 Analise de Complexidade de Algoritmo - slidepdf.com

http://slidepdf.com/reader/full/analise-de-complexidade-de-algoritmo 43/43

Referências Bibliográficas

ASCENCIO, A. F. G; ARAÚJO, G. S. Estruturas de Dados.São Paulo: Pearson Prentice Hall, 2010. 432 p.

CORMEN, Thomas H. et al. Introduction to algorithms. 3.ed. Cambridge: MIT, 2009. xix. 1292 p.

FIGUEIREDO, Jorge. Apresentação Ánálise e Técnicas de Algoritmos.

ZIVIANI, N. Projeto de Algoritmos: com implementaçãoem Pascal e C. 2. ed. São Paulo: Pioneira ThomsonLearning, 2004.