Professional Documents
Culture Documents
Juazeiro BA
Dezembro de 2013
Juazeiro BA
Dezembro de 2013
ndice
1. Introduo ........................................................................................................................ 4
2. Esquema Bsico de um Algoritmo ................................................................................... 5
3. Tamanho da Entrada ........................................................................................................ 6
4. Tempo de Complexidade de um Algoritmo .................................................................... 6
4.1 Anlise do Tempo ...................................................................................................... 6
4.2 Anlise do Pior, Mdio e Melhor casos ...................................................................... 7
4.3 Algoritmos de Ordenao ........................................................................................... 7
4.4 Comportamento das Funes de Tempo ................................................................... 11
4.5 A Anlise Matemtica e Emprica .............................................................................. 12
4.6 Grficos Melhor, Mdio e Pior casos ......................................................................... 13
4.7 Resultados da Implementao das Anlise Matemtica e Emprica .......................... 16
4.8 Limite Inferior e Limite Superior ............................................................................... 16
4.9 A eficincia dos Algoritmos na Obteno dos Resultados ......................................... 16
5. Espao de Complexidade de um Algoritmo ....................................................................... 17
6. Concluso ............................................................................................................................ 18
7. Referncias Bibliogrficas .................................................................................................. 18
1. Introduo
Assim como fala [ZIVIANI, 1999], os algoritmos fazem parte do nosso dia-dia.
Instrues, receitas, manuais so exemplos de algoritmos.
Algoritmo de modo resumido um conjunto sequencial e finito de aes que devem ser
executadas para se chegar num objetivo, ou seja, passos necessrios para se chegar a uma
resoluo de um determinado tipo de problema. Mas, como para cada problema tm-se uma
resoluo, encontramos uma incgnita aqui. Podemos ter uma ou vrias resolues para um
mesmo problema por exemplo, e tambm cada cdigo ter uma complexidade e um tempo
de execuo para se chegar ao objetivo, ou seja, cada algoritmo ter sua sequncia de passos
e seu tamanho, diferenciando assim de uma outra resoluo.
J de acordo com [LEISERSON,2002] algoritmo nada mais do que uma receita que mostra
passo a passo os procedimentos necessrios para a resoluo de uma tarefa. Com isso,
[LEISERSON,2002] aprofunda-se mais um pouco ao dizer que estrutura de dados est
ligada escolha do melhor algoritmo para a resoluo de uma tarefa, da levamos em conta
questes como o armazenamento e organizao dos dados, assim mostramos que estamos
preocupados com o melhor modo para se chegar ao objetivo, o jeito mais rpido e fcil de se
resolver um problema. Existem vrios tipos de estruturas de dados e nenhuma delas
funciona perfeitamente para todos os problemas requisitados, com isso, importante no s
conhecer cada uma delas mais tambm escolher melhor aquela que ir proporcionar um
desempenho satisfatrio.
Como algoritmos estruturados so organizadamente escritos, no tem como
falarmos de estrutura de dados sem mencionar os algoritmos e suas caractersticas, nem
como escrever um algoritmo sem pensar em sua estrutura. De acordo com [ZIVIANI, 1999],
programar basicamente construir um cdigo e estrutura-lo adequadamente, de acordo com
as necessidades dos usurios.
Mesmo que os computadores atuais tenha configuraes boas, as mquinas ainda
tem suas limitaes, talvez sua memria seja absurdamente grande, mas certas tarefas ainda
levam muito tempo para serem executadas. Se tivssemos um super computador que fosse
capaz de executar suas aes incrivelmente rpidos, ns no precisaramos nos preocupar
com a estruturao de algoritmos para solucionar problemas, porque todos os algoritmos
teriam seus resultados iguais, e utilizaramos sempre o mtodo mais rpido e fcil de ser
implementado. Por isso devemos dar ateno a importncia de criar algoritmos eficientes em
termos de tempo e de espao alocado na memria para assim termos os melhores resultados
possveis.
Ser objetivo
Supor que voc est desenvolvendo um algoritmo para pessoas que no trabalham
conhecem informtica
3. Tamanho da Entrada
O tamanha da entrada a quantidade de valores iniciais que sero implementados
e testados nos algoritmos. Dependendo do tipo ou estrutura do algoritmo, uma ordenao de
valores num algoritmo pode ser simples ou complexa, mostrando assim que devemos nos
preocupar em escolher melhor a estrutura para uma determinada quantidade de entrada. Em
alguns casos os algoritmos de ordenao mais simples tero uma maior eficincia que os
mais complexos, como o MergeSort que usa a recursividade em alguns problemas, e como
esta tcnica tem um alto consumo de memria e tempo de execuo, acaba no sendo muito
eficiente mesmo tendo uma complexidade de tempo menor (MergeSort (n log2 n)). Mas
isso no significa que ele ser mais eficiente que um InsertionSort, que tem sua
complexidade de tempo (n2).
anlise importante, para desenvolver solues mais rpidas, e que gastem menos recursos do
computador, poupando memria por exemplo.
Refere-se ao nmero mximo de operaes fundamentais que devem ser feitas para a
resoluo de qualquer problema do tamanho fixado.
Pode ser considerado como um limite de complexidade que no ser ultrapassado, sendo
portanto, uma garantia de qualidade mnima do algoritmo. Sua desvantagem que os casos
caticos que dificilmente vo acontecer so levados em considerao, nessa anlise.
mais difcil de determinar do que a complexidade no pior caso. Porque baseia-se nas
distribuies probabilsticas dos dados de entrada do algoritmo, que nem sempre so
conhecidas. Esta anlise indicada para algoritmos que so utilizados com frequncia.
Os algoritmos que no possuem nenhuma estrutura condicional apresentam complexidades
no pior caso e caso mdio, iguais, porque ser executada, sempre o mesmo nmero de
operaes para um mesmo tamanho de entrada.
Esse um dos mtodos mais utilizados entre os jogadores de cartas, por ser fcil de ser
implementado. A complexidade do algoritmo da ordem O(n) [ZIVIANI, 2004].
4.3.3 SelectionSort
De acordo com Ziviani, um dos mtodos de ordenao mais simples,
possui um tempo de execuo linear no tamanho de entrada. Quando o arquivo j est
ordenado o custo quadrtico. um mtodo interessante para arquivos pequenos.
4.3.4 ShellSort
[ZIVIANI, 2004] explica que o shellsort uma extenso do algoritmo
de ordenao por insero. Entretanto, na classificao por insero, se o menor item do
vetor de origem estiver na posio mais direita, ento o nmero de comparaes e
movimentaes igual a (n-1) para encontrar o seu ponto de insero.
A estratgia utilizada pelo shellsort para contornar este problema foi permitir trocas de
registros que esto distantes um do outro. Os itens que esto separados h posies so
rearranjados de tal forma que todo h-simo item leva a uma sequncia ordenada.
Alguns autores chamam h de salto, que pode ser constante ou pode variar de acordo com
uma lgica previamente escolhida. Vrias sequncias para h tm sido experimentadas.
[KNUTH, 1973] mostrou experimentalmente que a escolha do incremento para h = {1, 4,
13, 40, 121, 364, 1093, 3280, ...} difcil de ser batida por mais de 20% em eficincia no
tempo de execuo.
Shellsort uma tima opo para arquivos de tamanho moderado (da ordem de 5000
registros), segundo ZIVIANI, tanto pela fcil implementao do cdigo como pelo tempo de
classificao.
Quanto sua complexidade, existem duas conjecturas tratadas por ZIVIANI: C(n) =
O(n1,25) e C(n) = O(n*log2(n)). O autor explica que o algoritmo possui em sua
complexidade problemas matemticos difceis de resolver e ningum conseguiu prov-la
ainda.
4.3.5 QuickSort
Consiste em dividir o problema de ordenar um conjunto de n itens em
2 problemas menores, os problemas menores so ordenados e depois os resultados so
combinados para produzir a soluo do maior problema. (Dividir para conquistar !) Este
mtodo ineficiente para arquivos j ordenados com piv inadequado, pois as parties
sero desiguais , e a funo de ordenao ser chamada n vezes, sendo que em cada uma
dessas s conseguir eliminar um item por chamada, fazendo com que o nmero de
comparaes passe a ser cerca de n2/2. O melhor caso acontece quando o arquivo dividido
em duas partes iguais, este mtodo requer uma pequena pilha, que servir como memria
auxiliar, e ordenar um vetor com n itens, com cerca de nlog n operaes.
4.3.6 MergeSort
O conceito de merging ou fundir complementar ao conceito de
selecionar, visto anteriormente, quando se trata de algoritmos de ordenao. [SEDGEWICK,
1998] trata do termo como combinar dois arquivos [vetores] ordenados para formar um
maior que os anteriores tambm ordenado. Esse conceito faz parte da ideia de dividir e
conquistar, muito utilizado na ordenao de registros.
No caso do merge sort, a diviso feita utilizando recursividade, armazenando os dados do
vetor original na pilha em forma de rvore binria, segundo [Queiroz, 2009]. Aps a diviso,
cada subvetor ordenado recombinado com outro intercalando os elementos, mantendo-se a
ordenao. Esse algoritmo considerado de ordenao externa, pois se utiliza de outro
espao da memria para efetuar a classificao.
[SEDGEWICK, 1998] ainda trata de alguns fatores que tornam o merge sort atrativo. Dentre
eles est o fato de que o tempo de execuo para um vetor de n elementos da ordem de
n*log(n). Outro fator observado pelo autor que o algoritmo estvel, o que significa dizer
que independentemente do tamanho da entrada, a sada ser sempre proporcional a n*log(n).
4.3.7 HeapSort
Utilizando o mesmo princpio do SelectSort, o HeapSort um
algoritmo que utiliza uma estrutura de dados conhecida como Heap binrio para manter o
prximo item a ser selecionado. Criado em 1964 por Robert W. Floyd e J.W.J. Williams, ele
um algoritmo de Ordem de Complexidade O(n log n).
Existem dois tipos de heaps: Os heaps de mximo (max heap), em que
o valor de todos os ns so menores que os de seus respectivos pais; e os heaps de mnimo
(min heap), em que o valor de todos os ns so maiores que os de seus respectivos pais.
Assim, em um heap de mximo, o maior valor do conjunto est na raz da rvore, enquanto
no heap de mnimo a raz armazena o menor valor existente. Os heaps podem ser
representados por arranjos, nesse caso a maior (menor) chave est sempre na posio 1 do
array. Os algoritmos para implementar as operaes sobre o heap operam ao longo de um
dos caminhos da rvore, a partir da raiz at o nvel mais profundo da rvore.
10
n f(n) = O(1)
n f(n) = O(log n)
n f(n) = O(n)
11
n f(n) = O(n2)
n f(n) = O(n3)
n f(n) = O(2n)
n f(n) = O(n!)
12
13
14
15
16
se estes dados esto no caminho para se chegar ao objetivo, que o jeito mais rpido e fcil
de se resolver um problema. Existem vrios tipos de estruturas e nenhuma delas funciona
bem para todos os propsitos, e com isso importante no s conhecer cada uma delas mais
tambm escolher aquela que ir proporcionar um melhor desempenho.
O tipo de estrutura a ser utilizada em um algoritmo est relacionado principalmente
com o tamanho de sua entrada, um exemplo disso o tipo de ordenao que ser
utilizada em uma lista, dependendo do tamanho de itens a serem inseridos na lista a
ordenao poder ser simples, como exemplo o Insertion sort, Selection sort ou
Bubble sort, ou uma ordenao mais complexa como o Quick sort ou Merge sort,
em certos casos os algoritmos de ordenao mais simples tero uma maior eficincia que os
mais complexos, como o Merge sort usa a recursividade em alguns
problemas e est tcnica no muito eficiente devido ao alto consumo de memria e
tempo de execuo, mesmo tendo uma complexidade de tempo menor(Merge sort
(n log2 n)) no significa que ele ser mais eficiente que o Insertion sort que tem a
complexidade de tempo (n2).
Um dos motivos para se preocupar com a melhor estrutura a ser utilizada em um
certo problema que os computadores tm suas limitaes, por mais que os
computadores atuais paream rpidos e sua memria seja absurdamente grande,
certas tarefas levam muito tempo para serem executadas, imagine um computador
que fosse infinitamente rpido, voc no precisaria se preocupar com a estrutura que
escolheu para solucionar seu problema e assim todos os algoritmos capazes de
resolver uma tarefa teriam resultados iguais, assim utilizaramos sempre o mtodo
mais fcil de ser implementado, j que esse computador no existe e nunca vai
existir de extrema importncia criar algoritmos eficientes em termos de tempo e de
espao alocado na memria para assim termos os melhores resultados possveis.
17
No nosso caso, no foi utilizado o primeiro tipo (ordenao externa), e o segundo foi
utilizado paraos mtodos de ordenao MergeSort e QuickSort.
6. Concluso
De forma resumida, podemos concluir que, apesar de alguns algoritmos serem
mais eficientes que outros, em um caso especifico podemos mudar esta percepo, no
melhor caso, o BubbleSort tem um melhor desempenho que o QuickSort ou ShellSort. E o
ShellSort, ao observar o comportamento de tempo de execuo, o ShellSort o mais
eficiente.
A partir da anlise matemtica e emprica possvel analisar para qualquer caso o algoritmo
mais adequado. Aps a concluso deste relatrio, seremos capazes de nos preocupar em
poupar memria, e fazer um algoritmo mais eficiente e cada vez mais profissional.
7. Referncias Bibliogrficas
18