Buscar

Analise Experimental e Assintotica de Algoritmos de Ordenacao

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 10 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 10 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 10 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

Universidade Estadual Ju´lio de Mesquita Filho
FCT-UNESP
Projeto e Ana´lise de Algoritmos
Ana´lise experimental e assinto´tica de algoritmos de ordenac¸a˜o
Gabriel de Oliveira Almeida
Gustavo Lopes Santana
Joa˜o Victor Silva Menezes
Presidente Prudente - SP
Suma´rio
1 Introduc¸a˜o 3
2 Ana´lise dos Algoritmos de Ordenac¸a˜o 3
2.1 Bubble Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Bubble Sort Melhorado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Quick Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3.1 QuickSort (Pivoˆ Primeiro Elemento da Lista) . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3.2 Quick Sort (Pivoˆ Elemento Central da Lista) . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 Insertion Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5 Shell Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.6 Selection Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.7 Heap Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.8 Merge Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Comparac¸o˜es e Discusso˜es 8
31 Introduc¸a˜o
As operac¸o˜es de ordenac¸a˜o de dados sa˜o de suma importaˆncia para sistemas computacionais, a escolha do
me´todo mais eficiente tem grande impacto no desempenho de uma determinada aplicac¸a˜o, ja´ que, cada algoritmo
apresenta uma vantagem particular sobre o outro.
Ordenar corresponde ao processo de rearranjar um conjunto de objetos em um ordem ascendente ou decrescente.
O objeto principal da ordenac¸a˜o e´ facilitar a recuperac¸a˜o posterior de itens do conjunto ordenado.
A escolha do tipo para a chave e´ arbitra´ria. Qualquer tipo sobre o qual exista uma regra de ordenac¸a˜o bem-
definida pode ser utilizado. As ordens nume´rica e alfabe´tica sa˜o as usuais.
Este trabalho tem como pauta demonstrar testes para comparac¸a˜o entre algoritmos de ordenac¸a˜o de valores
em ordem crescente, decrescente e aleato´ria, analisando a performance sobre cada uma delas, que sera´ realizado
obtendo o tempo de execuc¸a˜o que desse modo, tambe´m implica na apresentac¸a˜o da ana´lise assinto´tica, explicitando
o rendimento de cada algoritmo.
Observaremos o rendimento dado as situac¸o˜es possı´veis para execuc¸a˜o, descritas como: Melhor caso: vetor
disposto de forma a reduzir o numero de comparac¸o˜es efetuadas pelo algoritmo. Pior caso: vetor disposto de
formar executar comparac¸o˜es e permutar em todas as ocasio˜es possı´veis. Caso me´dio: disposic¸a˜o do vetor de
forma a evitar o melhor caso e pior caso, sendo considerado a possı´vel forma de execuc¸a˜o para mais de 90% dos
testes.
A quantidade de posic¸o˜es do vetor bem como os valores nume´ricos das chaves sa˜o os mesmos para todos os
algoritmos. Tais vetores sa˜o gerados aleatoriamente pela func¸a˜o rand(), ordenado em ordem crescente com valor
inicial de 1 ate´ o tamanho do vetor (1000, 5000, 10000, 15000, 20000, 25000), e tambe´m em ordem decrescente
com valores iniciais do tamanho do vetor ate´ 1. Cada algoritmo sera´ executado mais de uma vez, ficara´ dentro de
um lac¸o de repetic¸a˜o, e sera´ obtido o tempo (milisegundos) capturado pela func¸a˜o clock() do total de execuc¸a˜o do
algoritmo (30 vezes). Os testes sera˜o realizados no mesmo computador, Intel i5-5200U, 8GB RAM, placa de vı´deo
integrada, garantindo assim que as condic¸o˜es sejam as mesmas para todos os algoritmos, desse modo, permite que
resultados obtidos sejam confia´veis.
Os algoritmos utilizados sera˜o: BubbleSort, BubbleSort Melhorado, QuickSort (com pivoˆ sendo o valor inicial
e central do vetor), InsertionSort, ShellSort, SelectionSort, HeapSort e MergeSort, implementado em linguagem
C.
2 Ana´lise dos Algoritmos de Ordenac¸a˜o
2.1 Bubble Sort
O me´todo Bubble Sort requer comparac¸o˜es com a posic¸o˜es adjacente e se for necessa´rio, a maior chave que
estiver fora de posic¸a˜o, havera´ a permutac¸a˜o entre suas posic¸o˜es, por isso, pode-se garantir que que o maior item
tera´ sido deslocado para u´ltima posic¸a˜o do vetor. Para se obter o vetor ordenado, tera´ que repetir esse processo.
Apesar da facilidade de implementac¸a˜o e estabilidade, e mesmo assim, com qualquer vetor de entrada, orde-
nado, aleato´rio, inversamente ordenado, O algoritmo faz todas as verificac¸o˜es possı´veis.
Analise de Desempenho
1. Melhor Caso: O(n2)
2. Caso Me´dio: O(n2)
3. Pior Caso: O(n2)
Figura 1. Grafico de Desempenho: Bubble Sort
2.2 Bubble Sort Melhorado
o Algoritmo segue a ideˆntico ao Bubble Sort, pore´m sua versa˜o melhorada, ha´ verificac¸a˜o se o vetor ja´ estiver
ordenado ocorre a interrupc¸a˜o do algoritmo instantaneamente.
Analise de Desempenho
1. Melhor Caso: O(n)
2. Caso Me´dio: O(n2)
3. Pior Caso: O(n2)
Figura 2. Grafico de Desempenho: Bubble Sort Melhorado
2.3 Quick Sort
Algoritmo Quick Sort e´ ordenar um conjunto com n itens em dois problemas menores (particionamento). A
seguir os problemas menores sa˜o ordenados independente e depois os resultados sa˜o combinados para produzir a
soluc¸a˜o do problema maior.
Utilizando o paradigma de divisa˜o (pivoˆ) e conquista (recursivamente divide em partes para divisa˜o), a escolha
do pivoˆ - elemento que sera´ utilizado, para troca do conjunto, ha´ troca caso os elementos forem maiores que ele -
influencia demasiadamente na eficieˆncia, pode ser executado, se balanceado, assintoticamente rapido.
Por isso, esse processo e´ realizado em treˆs passos: dividir, conquistar e combinar.
2.3.1 QuickSort (Pivoˆ Primeiro Elemento da Lista)
Leva ao seu pior caso, pois as partic¸o˜es sera˜o desiguais, a chamada para ordenando um por cada chamada
recursiva.
2.3.2 Quick Sort (Pivoˆ Elemento Central da Lista)
Obte´m melhora significativa quando dividido em duas partes iguais, ja´ que consegue alcanc¸ar os melhores casos
Analise de Desempenho
O pior caso e´ quando pivoˆ e´ o maior/menor elemento da partic¸a˜o, enquanto o melhor caso e´ quando o pivoˆ
divide a lista em duas partic¸o˜es iguais.
1. Melhor Caso: O(n log n)
2. Caso Me´dio: O(n log n)
3. Pior Caso: O(n2)
Figura 3. Quick Sort com Pivoˆ Primeiro Elemento
Figura 4. Quick Sort com Pivoˆ Central
2.4 Insertion Sort
O algoritmo Insertion Sort, em cada passo, a partir da posic¸a˜o i do vetor, para i=2, o i-e´simo item da sequeˆncia
fonte e´ selecionado e transferido para a sequeˆncia destino, sendo inserido no seu lugar o apropriado.
O nu´mero mı´nimo de comparac¸o˜es e movimentos ocorre quando os itens esta˜o originalmente em ordem, e o
nu´mero ma´ximo ocorre quando os itens esta˜o originalmente na ordem reversa, o que indica um comportamento
natural para o algoritmo. Para arquivos ja´ ordenados o algoritmo descobre a um custo 0(n) que cada item ja´ esta´
no seu lugar. Logo, o me´todo da inserc¸a˜o e´ o me´todo a ser utilizado quando o arquivo esta´ ”quase”ordenado. E
tambe´m um bom me´todo quando se deseja adicionar uns poucos itens a um arquivo ja´ ordenado e depois obter um
outro arquivo ordenado: neste caso o custo e´ linear. Ale´m disso, o me´todo de ordenac¸a˜o por inserc¸a˜o e´ esta´vel,
pois ele deixa os registros com chaves iguais na mesma posic¸a˜o relativa.
Analise de Desempenho
1. Melhor Caso: O(n)
2. Caso Me´dio: O(n2)
3. Pior Caso: O(n2)
Figura 5. Insertion Sort
2.5 Shell Sort
O me´todo ShellSort pode ser considerado o refinamento do me´todo Insertion Sort. O que diferencia pelo fato
de no lugar de considerar o vetor ordenado, como u´nico segmento, considera va´rios segmentos sendo aplicado o
algoritmo de Insertion Sort emcada um desses segmentos.
O ShellSort permite trocas de registros que esta˜o distantes um do outro.
O tempo de execuc¸a˜o do algoritmo e´ sensı´vel a` ordem inicial do arquivo.
Analise de Desempenho
1. Melhor Caso: . . .
2. Caso Me´dio: . . .
3. Pior Caso: . . .
A complexidade depende do tamanho do salto escolhido. Existem teorema que mostram algumas complexida-
des para o Shellsort.
Teorema 1 1. Para saltos de 1, 3, 7, . . . , 2k − 1, o algoritmo tem complexidade O(n√n).
Teorema 1 2. Para saltos de 1, 2, 3, 4, 6, . . . , 2p3q , o algoritmo tem complexidade O(n(log n)2).
Figura 6. Shell Sort
2.6 Selection Sort
Selection Sort tem como sua lo´gica, selecionar um elemento e coloca-lo na sua posic¸a˜o correta. O Algoritmo
seleciona o menor elemento da sequencia, deste modo, sa˜o comparados n − 1 elemento, e em seguida n − 2, e
assim por diante, para ser colocado em seu devido lugar, e assim organizando-o a entrada.
Analise de Desempenho
1. Melhor Caso: O(n2)
2. Caso Me´dio: O(n2)
3. Pior Caso: O(n2)
Figura 7. Selection Sort
2.7 Heap Sort
O algoritmo Heap Sort tem o mesmo principio do Selection Sort, pore´m utiliza o heap para realizar a ordenac¸a˜o.
Analise de Desempenho
1. Melhor Caso: O(n log n2)
2. Caso Me´dio: O(n log n2)
3. Pior Caso: O(n log n2)
Figura 8. Heap Sort
2.8 Merge Sort
O algoritmo Merge Sort utiliza tambe´m o paradigma Divisa˜o e Conquista, por meio da divisa˜o, intercalac¸a˜o
e unia˜o dos n elementos existentes. Em outras palavras, a estrutura a ser reordenada sera´, de forma recursiva,
subdividida em estruturas menores ate´ que na˜o seja mais possı´vel fazeˆ-lo. Em seguida, os elementos sera˜o organi-
zados de modo que cada subestrutura ficara´ ordenada. Feito isso, as subestruturas menores (agora ordenadas) sera˜o
unidas, sendo seus elementos ordenados por meio de intercalac¸a˜o. O mesmo processo repete-se ate´ que todos os
elementos estejam unidos em uma u´nica estrutura organizada.
Analise de Desempenho
1. Melhor Caso: O(n log n2)
2. Caso Me´dio: O(n log n2)
3. Pior Caso: O(n log n2)
Figura 9. Merge Sort
3 Comparac¸o˜es e Discusso˜es
Comparando esses gra´ficos e´ possı´vel notar que os algoritmos testados realmente possui um comportamento
que segue de acordo com suas complexidades ditas anteriormente e sua eficieˆncia varia conforme o tamanho do
vetor utilizado e sua ordem inserida
1. Para os vetores aleato´rio temos que o bubble sort (normal e melhorado), selection e insertion gastam um
tempo maior enquanto os demais possui um tempo pouco significativo comparado com estes. [ver figura 10]
2. Para os vetores ordenado bubble, quick(pivoˆ inicial) e selection, tiveram o pior desempenho em comparac¸a˜o
com os outros.[ver figura 11]
3. Para os vetores inverso bubble(normal e melhorado), insertion, quick(inicial) e selection apresentam os
piores tempos.[ver figura 12]
Figura 10. Todos os algoritmos Aleato´rios
Figura 11. Todos os algoritmos Ordenados
Figura 12. Todos os algoritmos Inversos
Refereˆncias
[1] J. da Silva Nascimento, P. M. Mozzaquatro, and R. L. Antoniazzi. Ana´lise e comparac¸a˜o de algoritmos implementados em
java. Simpo´sio de Pesquisa e Desenvolvimento em Computac¸a˜o, 1(1), 2016.
[2] M. A. Guerine. Algoritmos de ordenac¸a˜o.
[3] J. E. Souza, J. V. G. Ricarte, and N. C. de Almeida Lima. Algoritmos de ordenac¸a˜o: Um estudo comparativo. Anais do
Encontro de Computac¸a˜o do Oeste Potiguar ECOP/UFERSA, 1, 2017.
[4] N. Ziviani et al. Projeto de algoritmos: com implementac¸o˜es em Pascal e C, volume 2. Thomson, 2004.
	Introdução
	Análise dos Algoritmos de Ordenação
	Bubble Sort
	Bubble Sort Melhorado
	Quick Sort
	QuickSort (Pivô Primeiro Elemento da Lista)
	Quick Sort (Pivô Elemento Central da Lista)
	Insertion Sort
	Shell Sort
	Selection Sort
	Heap Sort
	Merge Sort
	Comparações e Discussões

Outros materiais