13
 CENTRO UNIVERSITÁRIO DA GRANDE DOURADOS José Jean Gomes  Análise de Algoritmo de Ordenação Dourados 2010

Análise de Algoritmo de Ordenação

Embed Size (px)

DESCRIPTION

Será analisada a eficiência de dois métodos de ordenação Heapsort eQuicksort, o analise aplica em cinco seqüências aleatória de 1 Milhão, 5Milhões, 10 Milhões, 20 Milhões e 30 Milhões, A cada seqüência será geradodez range de elementos aleatórios para ordenação, os algoritmos irão um de cadavez ordenar o mesmo range com a mesma seqüência aleatória, e feita a media detempo, quantidade de troca e comparação entre os algoritmos.

Citation preview

CENTRO UNIVERSITRIO DA GRANDE DOURADOSJos Jean Gomes

Anlise de Algoritmo de Ordenao

Dourados 2010

CENTRO UNIVERSITRIO DA GRANDE DOURADOS

Jos Jean Gomes Rgm: 122.780

Anlise de Algoritmo de Ordenao

Trabalho apresentado na Disciplina de Estrutura de dados do 2010 ano, Curso de Cincia da Computao Faculdade de Dourados MS. Professor(a) Ademir Martinez Sanches

Dourados 2010

Trabalho Estrutura de Dados II

Analise comparativo dos Algoritmos de Ordenao

SumarioMotivao Introduo HeapsortEspecificao Procedimentos do Heapsort

QuicksortEspecificao Procedimentos do Quicksort Calculo de tempo Verificao de Ordenao

GrficosQuantidade de Trocas Quantidade de Comparao Tempo

Concluso Dificuldades Especificao Referencia

MotivaoExistem vrias razes para se ordenar uma seqncia. Uma delas a possibilidade de acessar seus dados de modo mais eficiente.

IntroduoSer analisada a eficincia de dois mtodos de ordenao Heapsort e Quicksort, o analise aplica em cinco seqncias aleatria de 1 Milho, 5 Milhes, 10 Milhes, 20 Milhes e 30 Milhes, A cada seqncia ser gerado dez range de elementos aleatrios para ordenao, os algoritmos iro um de cada vez ordenar o mesmo range com a mesma seqncia aleatria, e feita a media de tempo, quantidade de troca e comparao entre os algoritmos.

HeapsortEspecificaoO algoritmo heapsort um algoritmo de ordenao generalista, e faz parte da famlia de algoritmos de ordenao por seleo. Foi desenvolvido em 1964 por Robert W. Floyd e J.W.J. Williams. Tem um desempenho em tempo de execuo muito bom em conjuntos ordenados aleatoriamente, tem um uso de memria bem comportado e o seu desempenho em pior cenrio praticamente igual ao desempenho em cenrio mdio. Alguns algoritmos de ordenao rpidos tm desempenhos espetacularmente ruins no pior cenrio, quer em tempo de execuo, quer no uso da memria. O Heapsort trabalha no lugar e o tempo de execuo em pior cenrio para ordenar n elementos de O (n lg n). L-se logaritmo (ou log) de "n" na base 2. Para valores de n, razoavelmente grande, o termo lg n quase constante, de modo que o tempo de ordenao quase linear com o nmero de itens a ordenar.

Procedimentos do Heapsort O algoritmo de ordenao HEAPSORT utiliza trs funes.O procedimento MAX-HEAPIFY, executa no tempo O (lg n), e a chave para manter a propriedade de Heap mximo. O procedimento BUIL-MAX-HEAP, executado em tempo linear, produz um heap a partir de um arranjo de entrada no ordenado. O procedimento HEAPSORT, executado no tempo O (n lg n), onde um arranjo localmente.

MAX-HEAPIFY uma sub-rotina importante para manipulao deheap mximos. Suas entradas so um arranjo A e um ndice i para o arranjo. Quando MAX-HEAPIFY chamado, supomos que as rvores binarias com razes em LEFT (i) e RIGHT (i) so heaps mximos, mas que A(i) pode ser menor que seus filhos, violando assim a propriedade de heap mximo. A funo de MAX-HEAPIFY deixar que o valor em A [i] flutue para baixo no heap mximo, de tal forma que a subrvore com raiz no ndice i se torne um heap mximo. MAX-HEAPIFY (A, i) 1 L LEFT (i) 2 r RIGHT (i) 3 If l < tamanho-do-heap [A] e A [l] > A [i] 4 then maior l 5 else maior i 6 if r < tamanho-do-heap [A] e A [maior] 7 then maior r 8 if maior i 9 the trocar A[i] A[maior] 10 MAX-HEAPIFY (A, maior)

A figura abaixo ilustra a ao de HEAPIFY:

BUILD-MAX-HEAP: Podemos usar o procedimento MAXHEAPIFY debaixo para cima, a fim de converter um arranjo A [1..n], onde n = comprimento [A], em um heap mximo. O procedimento BUILD-MAX-HEAP percorre os ns restantes da rvore e executa MAX-HEAPIFY sobre cada um.BUILD-MAX-HEAP (A) 1 Tamanho-do-heap [A] comprimento [A] 2 For i comprimento [A]/2 downto 1 3 do MAX-HEAPIFY (A, i)

HEAPORT O algoritmo heapsort (ordenao por monte) comeausando BUILD-MAX-HEAP para construir um heap no arranjo de entrada A[1..n], onde n = comprimento [A]. Tendo em vista que o elemento mximo do arranjo esta armazenado na raiz A[1], ele pode ser colocado em sua posio final correta, trocando-se esse elemento por A[n]. Se agora descartarmos o n n do heap ( diminuindo tamanho-do-heap[A]). Observaremos que A[1..(n-1)] pode ser facilmente transformado em um heap mximo. Os filhos da raiz continuam sendo heaps mximos, mas o novo elemento raiz pode violar a propriedade de heap mximo uma chamada a MAX-HEAPIFY (A, 1), que deixa um heap mximo em A[1..(n 1)]. Ento, o algoritmo heapsort repete esse processo para o heap de tamanho n 1, descendo at um heap de tamanho 2. HEAPSORT (A) 1 BUILD-MAX-HEAP (A) 2 for i comprimento [A] downto 2 3 do troca A [1] A[i] 4 tamanho-do-heap [A] tamanho-do-heap [A] 1 5 MAX-HEAPIFY (A, 1)

Quicksort.

EspecificaoO quicksort (ordenao rpida) um algoritmo de ordenao cujo tempo de execuo do pior caso O (n) sobre um arranjo de entrada de n nmeros. Apesar desse tempo de execuo lento no pior caso, o quicksort com freqncia a melhor opo prtica para ordenao, devido a sua notvel eficincia na mdia: seu tempo de execuo esperado (n lg n), e os fatores constantes ocultos na notao O(n lg n) so bastante pequeno. Ele tambm apresenta a vantagem de ordenao local e funciona bem at mesmo em ambientes de memria virtual.

Procedimentos QuicksortO quicksort, como a ordenao por intercalao, se baseia no paradigma de dividir e conquistar. Aqui est o processo de dividir e conquistar em trs passos para ordenar um subarranjo tpico A[p..r]. Dividir: O arranjo A [p..r] particionado em dois subarranjo A[p..q-1] e A[q+1..r] tais que cada elemento de A[p..q 1] menor que ou igual lado como parte desse procedimento de particionamento. Conquistar: Os dois subarranjo A [p..q-1] e A[q+1..r] so ordenados por chamadas recursivas a quicksort. Combinar: Como os subarranjo so ordenados localmente, no necessrio nenhum trabalho para combin-los: o arranjo A [p..r] inteiro agora est ordenado. O procedimento a seguir implementa o quicksort. QUICKSORT (A, p, r) 1 if p < r 2 then q PARTITION (A, p, r) 3 QUICKSORT (A, p, q 1) 4 QUICKSORT (A, q + 1, r) Para ordenar um arranjo A inteiro, a chamada inicial : QUICKSORT (A, 1, comprimento[A]). Particiona mento do arranjo A chave para o algoritmo o procedimento PARTITION, que reorganiza o subarranjo A [p..r] localmente PARTITION (A, p, r) 1 x A[r] 2ip1 3 for j p to r 1 4 do if A[j] < x 5 then i i + 1 6 troca A[i] A[j] 7 troca A[i + 1] A[r] 8 return i + 1

Calculo de Tempogettimeofday()Para calcular o tempo de ordenao entre os algoritmos o mtodo utilizado foi o getitimeofday, onde consegue calcular com preciso o tempo em micro segundos, no apenas s em segundo e milsimos.

Verificao de OrdenaoVerificar A[x-1] > A[x]Verificando se os elementos esto ordenados aps a utilizao dos algoritmos de ordenao, o mtodo utilizado um algoritmo seqencial onde verifica se um elemento A[x-1] < que o elemento seguinte A[x].

GrficoQuantidade de troca. Heapsort vs Quicksort

No analise de trocas de lementos para ordenao o Quicksort tevc um menor numero de trocas em todas as seguencias.

Quantidade de Compraro. Heapsort vs Quicksort

No analise de comparao de elementos para ordenao o Heapsort teve um menor numero de comparao em todas a seguencias.

Tempo de ordenao, Heapsort vs Quicksort

No analise de tempo de ordenao dos elementos tivemos um auterao de desempenho entre os algorimos, ate 10 milhes de elementos Quicksort manteve na frente com uma diferena pouca de segundos em tempo de ordenao, aparti da o Heapsort comeo ter um desempenho significativa mente melhor que o Quicksort.

ConclusoA analise dos algoritmos de ordenao, chegamos em uma concluso que aproximadamente de 10 a 15 milhes de elementos os algoritmos Heapsort e Quciksort tem o mesmo desempenho em tempo de ordenao, sendo que abaixo desta faxa de 15 milhes Quicksort tem um vantagem pequena em relao ao Heapsort, acima da faxa de 15 Milhes podemos perceber que o Heapsort comea a ter uma vantagem significativa em relao ao Quicksort, com o ao mento de elementos concluimos que o mtodos mais eficiente (rpido) usando o Heapsort.

Dificudade EncontradasNeste analise de algoritmos de ordenao a nica ocorrncia de dificuldade tivemos devido a o tamanho de elementos de troca e comparao entre as ordenaes, assim causando estouro na varivel que armazena os nmeros de troca e comparao, mtodo utilizado para resolver o problema do estouro da varivel inteiro foi fazer a substituio da palavra reservada int pelo int64_t que capaz de armazenar elementos de at 20 dgitos.

EspecificaoO analise dos algoritmos de ordenao foi realizado em um maquina com 1Gb de memria, processador AMD Athlon 64 3000+, sistema operacional Linux Ubunto.

RefernciaHeapsort Algoritmos Teoria e Pratica Cormen, Leiserson. Wikipdia, http://pt.wikipedia.org/wiki/Heapsort Quicksort Algoritmos Teoria e Pratica Cormen, Leiserson. Gettimeofday Trabalhando com tempo real em aplicaes, Carlos A. Piccioni, Cssia Y. Tatibana, Rmulo S. de Oliveira.