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.
Top Related