Buscar

ANÁLISE E COMPLEXIDADE DE ALGORITMOS

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

INSTITUTO FEDERAL DO ESPÍRITO SANTO – CAMPUS SERRA 
 
 
BACHARELADO EM SISTEMA DE INFORMAÇÃO 
 
 
 
JOHNSON SUDRE 
JEAN CARLOS PENAS 
 
TÉCNICAS DE ANÁLISE E COMPLEXIDADE DE 
ALGORÍTMOS 
 
 
 
 
 
 
 
 
 
 
SERRA 
2013 
 2 
JOHNSON SUDRE 
JEAN CARLOS PENAS 
 
 
 
 
TÉCNICAS DE ANÁLISE E COMPLEXIDADE DE 
ALGORÍTMOS 
 
 
 
 
Tr ab a l ho ap r e s en tad o à d i s c ip l in a 
E s t r u tu r a D e Dad os do cu r so 
B ach a r e l ado em S i s t em a d e 
In f o r m ação do In s t i t u to Fed e r a l do 
E s p í r i t o S an to – Cam pu s S e r r a , pa r a 
av a l i a ção p a r c i a l . 
P ro f e s so r a : M ar t a Ta l i t h a 
 
 
 
 
 
SERRA 
2013 
 
 
 
 
 3 
 
 
Apresentação 
 
E s t e é um t r ab a lho e l ab or ado p e l a p r o f es s o r a M ar t a Ta l i t h a , n a 
d i s c i p l i n a d e e s t ru t u ra de dado s com o t em a t é cn i ca s de an á l i s e e 
co mpl ex i d ad e d e a lg o r i t mo s , n es t e r e l a t ó r io s e r á ab o rd ado co n ce i tos 
d e com o s e l ec i on a r a l go r i t mo s q u e r es o l v em o mesm o p r o b l em a em 
f u n ção da su a e f i c i ên c i a e t am bém vam os an a l i s a r a com pl ex id ad e 
d os a l go r i tm os q ue e s t á as so c i ad a ao cus t o . Es s es co nce i t os s e r ão 
ap l i c ad os em t r ê s a l go r i tmo s imp l em en t ad os n a l i ng uag em c . 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 4 
 
S UM Á RI O 
1 IN T R O DU ÇÃ O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05 
2 O Q UE É UM A LG O R ÍT MO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 6 
2 A N Á LIS E D E A LG O R ÍT MO S. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 
2 N O TAÇ ÃO ASS IN T Ó T IC A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 
3 COMPLEXIDADE DE ALGORITMOS............................ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 
4 A LG O R Í T M O DE O R DE N AÇ ÃO QU IC KS ORT. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 
7 A LG O R IT M O DE O R DE N AÇ ÃO BOLHA.............. . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 
8 C O NC LU S Ã O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 
9 R EF ERÊ NC IA B IB LIO G R Á F IC A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 8 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 5 
 
INTRODUÇÃO 
 
U m pr ob l em a p od e se r r es o l v i do d e vá r i as f o rm a s , en t ão v amo s u s a r 
o con ce i to d e an á l i s e d e a l go r i tm os p a r a de t e r min a r a s me lh o re s 
s o l u çõ es , com o o d e s emp enh o d o a lg o r i t mo va r i a conf o rm e a s u a 
en t r ad a e a conf i gu r ação d a m esm a , vamo s u s a r an á l i s e d e 
co mpl ex i d ad e p a r a d e t e r min a r o s eu cus to . 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 6 
 
 
 
 
O QUE É UM ALGORÍTMO? 
 
O algoritmo é um procedimento, passo a passo, para a resolução de um problema em um 
tempo finito, além disso, ele é tratado como a estrutura lógica fundamental na computação e a 
sua construção é composta por uma forma sistemática de organização que proporciona um 
melhor acesso aos seus dados, essa forma é chamada de estruturas de dados. 
 Não existe subjetividade na resolução de um problema por meio algoritmo, ou o 
problema é tratável ou não. Como existem diversas soluções, temos diferentes níveis de 
eficiência que precisam ser adequadas para diversas objeções. Essa adequação é determinada 
segundo alguns critérios, os principais são o tempo e a quantidade de memória usada pelo 
algoritmo no decorrer da solução. 
 O algoritmo pode ser representado de várias formas, a seguir, veremos que formas são 
essas e qual a importâncias delas na análise de algoritmos. 
 
REPRESENTAÇÃO DE ALGORITMOS 
 
Existem algoritmos mais difíceis de ser entendida por isso a necessidade da representação 
deles em outras linguagens com um nível de abstração mais alta.As representações mais 
conhecidas são o fluxograma convencional, descrição narrativa, pseudocódigo e a linguagem 
de programação. 
 
 
 
 
 
 7 
 
DESCRIÇÃO NARRATIVA 
Geralmente usada para descrever passo a passo, seqüência de tarefas com a finalidade de 
se atingir um objetivo, que neste caso é fazer o bolo de milharina. 
 Figura 1 - Bolo de milharina Figura 2 – Receita de Bolo de milharina 
 
 
 
 
 
 
 
FLUXOGRAMA 
É a representação gráfica de um algoritmo através de formas geométricas que são 
interpretadas como ações distintas e facilita o entendimento das idéias contidas no algoritmo, 
aumentando a sua usabilidade. O nível de abstração desta linguagem é maior que as demais 
representações. 
Figura 3 – Formas geométricas e as suas respectivas operações. 
 
 
 8 
 
 Figura 4 - fluxograma de busca Binária Figura 5 - fluxograma de busca seqüencial 
 
 
PSEUDOCÓDIGO 
 
É uma forma genérica de escrever um algoritmo, utilizando uma linguagem simples e de fácil 
entendimento, um exemplo claro de pseudocódigos é o portugol. Nesta linguagem se conta 
com algumas técnicas de organização e identificação do código, como por exemplo, a 
endentação, que serve para identificar estruturas de laço e decisão. 
Outra forma de descrever um algoritmo é através da linguagem de programação que é 
basicamente um conjunto de regras sintáticas e semânticas usadas para definir um programa 
de computador. 
 
 Figura 7 – Exemplo de código escrito em Matlab 
 
 
 
 
 9 
 
 
ANÁLISE DE ALGORÍTMOS 
No mundo real, um problema pode ser solucionado de várias maneiras, isto também reflete de 
alguma forma no mundo digital, a única diferença é que o problema passa a ser solucionado 
através de algoritmos, como há várias alternativas de solução, usa-se a análise de algoritmos 
para determinar o algoritmo mais eficiente. Analisar um algoritmo significa determinar quais 
recursos computacionais serão consumidos por ele, na sua execução. 
Verá mais a frente que esses recursos podem ser medidos e os seus resultados determinaram a 
eficiência do algoritmo. Existem várias técnicas de análise para determinar a eficiência de um 
Algoritmo, mas os principais são por tempo e por quantidade memória. 
A análise que será abordada será por tempo, e o objetivo dessa análise é obter uma expressão 
ou fórmula matemática que represente o tempo de execução de um algoritmo. Os aspectos 
mais importantes da análise de tempo são: 
 A quantidade de elementos que serão processados. 
 A forma como os elementos estão configurados na entrada. 
 
O tempo de execução do algoritmo, na análise é escrito em função do tamanho da entrada e 
escreve-se como f(n), onde n é o tamanho da entrada e f é o numero de operações processados 
pelo algoritmo. A entrada depende do problema que está sendo solucionado pelo algoritmo e 
ela é analisada em três casos, o pior, médio e o melhor. O teste mais eficiente é a análise feita 
utilizando o pior caso, que consiste em encontrar uma entrada com alto nível de complexidade 
e aplicá-la no algoritmo e a partir daí medir a sua eficiência em função do número de passos. 
A seguir compararemos dois algoritmos de ordenação e vamos aplicar a análise utilizando o 
pior caso e definir o mais eficiente. 
 
NOTAÇÃO ASSINTÓTICA 
É uma notação matemática utilizada para analisar o comportamento assintótico de funções, e 
seráutilizada na análise de algoritmo para representar o comportamento das operações do 
algoritmo associado com a entrada, na tentativa de simplificar o comportamento das 
operações do algoritmo relacionado com a sua entrada, a definição da notação O procura uma 
função que seja limitada superiormente pela função f(n), ou seja, g(n) é a derivada de f(x). 
 
 
 10 
Tabela 1- Exemplos de uso da notação assintótica 
notação nome 
O(1) ordem constante 
O(log x) ordem logarítmica 
O([log x]
c
) ordem poli-logarítmica 
O(x) ordem linear 
O(x · log x) ordem linear-logarítmica 
O(x²) ordem quadrática 
O(x³) ordem cúbica 
O(x
c
) ordem polinomial 
O(c
x
) ordem exponencial 
O(x!) ordem fatorial 
O(x
x
) ordem exponencial 
 
 
 
COMPLEXIDADE DE ALGORITMOS 
A notação O descreve o comportamento da entrada n do algoritmo associando-a a uma outra 
função limitada superiormente pela função que descreve o tamanho da entrada de um 
algoritmo.O comportamento dessa função limitada superiormente será analisada em três 
casos, no pior, médio e no melhor caso, utilizando o custo ou complexidade em função do 
tempo ou do espaço usado na memória.Veremos que o algoritmo possui comportamentos 
diferentes nos três casos. 
MÉTODO DE ORDENAÇÃO QUICKSORT 
É um método de ordenação por troca. Entretanto, enquanto o bubblesort (bolha) troca 
pares de elementos consecutivos, o quicksort compara pares de elementos distantes, o que 
acelera o processo de ordenação. É um algoritmo de troca do tipo “dividir para conquistar” 
que resolve um determinado problema, dividindo-o em três subproblemas, tais que: o 
primeiro subproblema é composto dos elementos menores ou iguais ao elemento escolhido 
arbitrariamente, o segundo subproblema é o próprio elemento escolhido e o terceiro 
subproblema são os elementos maiores ou iguais ao elemento escolhido. A seguir, os 
problemas menores são ordenados independentemente e depois os resultados são combinados 
para produzir a solução do problema maior. 
O primeiro passo do algoritmo é crucial, por enquanto não será especificado como 
escolher o elemento, pois o algoritmo funciona independentemente do elemento escolhido 
para ser o pivô. Entretanto, a seleção do pivô afeta diretamente o tempo de processamento do 
algoritmo. 
O método consiste em alocar um determinado elemento em sua posição correta dentro da 
futura lista ordenada, produzindo uma partição da lista em três sub-grupos: 
 11 
 
1. A sub-lista que contém todos os elementos que são menores ou iguais ao elemento 
alocado; 
 
2. A sub-lista formada somente pelo elemento alocado; 
 
 
3. A sub-lista que contém todos os elementos que são maiores ou iguais ao elemento 
alocado. 
 
 
Método de ordenação kicksort com chamada recursiva 
 
 
Vamos analisar a complexidade (custo) do algoritmo acima em relação ao movimento de 
registros. O movimento do registro é sempre superior ao numero de comparações. 
Qualquer que seja a entrada, após a primeira escolha do pivô, será efetuado no máximo n+1 
comparação, pois o elemento é deslocado quando i torna-se maior ou igual a j então temos 
que: 
C(n)<=n+1+C(n1)+C(n2), com n1+n2=n-1. 
Análise utilizando o pior caso: 
 O pior caso ocorre quando os elementos do vetor estão ordenados ou invertidos, pois a cada 
partição resulta uma coleção vazia de elementos. Então após cada varredura resulta n1=0 e 
 12 
n2=0; Daí pode escrever que: 
C(n) n + 1 + C(n – 1) 
C(n – 1) n + C(n – 2) 
C(n – 2) n – 1 + C(n – 3) 
. . . 
C(2) 3 + C(1) 
Como C(1) = 0, por substituições sucessivas obtemos: 
C(n) (n + 1) + n + (n – 1) +... + 3 = 1/2 (n – 1) (n + 4) 
Portanto C(n) ½ (n – 1) (n + 4) = O (n2), logo na complexidade no pior caso é O(n2).já no 
caso médio é O(n*log n) 
 
Caso Médio 
Conforme vimos, qualquer que seja a entrada, temos; 
C(n) (n + 1) + C(n1) + C(n2), com n1 + n2 = n – 1 
Como n1 varia desde 0 até (n-1), existem n entradas distintas e 
C(n) n + 1 + C(0) + C(n – 1) 
C(n) n + 1 + C(1) + C(n – 2) 
. . . 
C(n) n + 1 + C(n - 1) + C(0) 
Expressando C(n) em função de todas as entradas possíveis. 
Somando todas as desigualdades e dividindo por n obtemos: 
n-1 
C(n) n + 1 + 2/m C(i) 
i=0 
Multiplicando a primeira por n, a segunda por (n-1) e subtraindo a primeira da segunda, 
conseguimos expressar C(n) em função de C(n-1): 
nC(n) – (n – 1)C(n-1) n(n + 1) – (n - 1)n + 2C(n-1) 
nC(n) 2n + (n + 1)C(n-1) 
(C(n) / (n + 1) ) (2/ (n + 1)) + (C(n-1) / n) 
Desta última desigualdade podemos escrever a seqüência: 
(C(n) / (n + 1)) (2/ (n + 1)) + (C(n-1) / n) 
(C(n-1) / n) (2/ n ) + (C(n-2) / (n – 1)) 
(C(n-2) / (n - 1)) (2/ (n - 1)) + (C(n-3) / (n – 2)) 
. . . 
C(2) / 3 2/3 + C(1) / 2 
Levando em conta que C(1) = 0, por substituições sucessivas obtemos: 
n+1 n+1 
C(n) / (n + 1) 2 / (n + 1) + 2 / n + . . . + 2/3 = 2 1/i 2 ∫dx / x 
i=3 1 
C(n) / (n+1) 2 ln (n+1), isto é C(n) (n+1) log(n+1) 
Portanto, C(n) =>O(n log n) 
 
 
 
 
 
 
 13 
O quicksort é extremamente eficiente para ordenar arquivos de dados. O método 
Necessita de apenas uma pequena pilha como memória auxiliar, e requer cerca de (n log n) 
Operações em média para ordenar n itens. Como aspectos negativos têm-se: 
 
 A versão recursiva do algoritmo tem um pior caso que é O(n2); 
 A implementação do algoritmo é muito delicada e difícil; 
 O método não é estável. 
Uma vez desenvolvida uma implementação robusta para o quicksort, este deve ser o 
algoritmo preferido para a maioria das aplicações. 
 
 
 
MÉTODO DE ORDENAÇÃO BOLHA 
Este método de ordenação compara os elementos adjacentes e troca se o segundo for menor 
que o primeiro, esta operação se repete até o ultimo par de elementos. É possível melhorar a 
implementação anterior, evitando as passagens desnecessárias, através da identificação da 
entrada para informa se ela já está ordenada. Se em uma passagem não houver nenhuma 
troca, isto quer dizer que a entrada já está ordenada, para isso é necessário controlar o número 
de ocorrências de trocas. 
Como o laço interno executa no máximo N-1 comparações então no pior caso, o número de 
comparações será (n-1)*(n-1), portanto O(n^2), onde n^2 é a função limitada superiormente 
pela função f(n)=(n^2-2n+1). 
Vantagens 
1. Simplicidade. 
 
 
2. Exigência de pouco espaço adicional (um registro extra para armazenar os valores 
temporários da troca e diversos variáveis inteiros simples). 
 
 
3. O fato de ser O(n) no caso em que o arquivo está totalmente classificado 
 
 
 
 
 
 
 
 
 14 
 
Algoritmo de ordenação bolha utilizando vetores de inteiros 
 
Figura 9 – Implementação do BUBLESORT em pascal 
 
 
 
 
 
 15 
 
Figura 8 – Gráfico explorando o comportamento do algoritmo Buble sort em diferentes casos 
 
 
 
As operações descritas no gráfico foram feitas via arquivo binário, o gráfico explora o 
comportamento e o custo (complexidade) em relação ao tempo, do algoritmo bublesort, uma 
coisa curiosa é que o custo do algoritmo aumentou para a entrada com valores ordenados, na 
verdade o que aconteceu foi que mesmo com os valores ordenados, todos eles foram 
comparados novamente devido aos dois laços do algoritmo, enquanto que o procedimento 
troca, ou melhor, o movimento de troca teve um custo baixíssimo. 
 
 
 
 
 
 
 
 
 
 16 
 
CONCLUSÃO 
 
A análise de algoritmo permite determinar a eficiência do algoritmo e também propor as 
devidas correções para que a complexidade da sua entrada assuma comportamentos mais 
suaves, Além disso ela nos permite estudar o quanto de recursos que o algoritmo consome em 
diversos cenários, com isso é possível determinar em quais situações o algoritmo poderá ser 
mais eficiente. 
Vimos alguns exemplos de algoritmos de ordenação cuja complexidade se comportava de 
forma logarítmica e em outros casos se comportava de forma quadrática, um algoritmo de 
complexidade logarítmica, por exemplo, é mais eficiente do que um algoritmo de 
complexidade quadrática,se a unidade custo for a quantidade memória por exemplo, ou até 
mesmo por tempo. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 17 
 
 
 
REFERÊNCIAS BIBLIOGRÁFICAS 
 
UFPE, acessado em: 
http://www.cin.ufpe.br/~joa/menu_options/school/cursos/ppd/aulas/complexidade.pdf 
 
Dielano, USP, acessado em: 
http://www.nakano.pro.br/icc2/pub/aula3assintotico/3-Complexidade/3-handout.pdf 
 
Fábio Henrique, acessado em: 
http://dc.uel.br/~dsbizarro/trab/complex.pdf 
 
Walteno Martins, acessado em: 
http://www.waltenomartins.com.br/aa_aps.pdf 
 
 
Mariano, UTFPR, acessado em: 
http://pessoal.utfpr.edu.br/mariano/arquivos/VAS1997_1.pdf 
 
Paulo Feofilof, USP, acessado em: 
http://www.ime.usp.br/~pf/mac5711-2008/slides/AULAS4up.pdf 
 
Wikpedia, acessado em: 
http://pt.wikipedia.org/wiki/Quicksort 
 
Wikpedia, acessado em: 
http://pt.wikipedia.org/wiki/Merge_sort

Continue navegando

Outros materiais