Análise de Algoritmo de Ordenação

  • View
    1.999

  • Download
    0

Embed Size (px)

DESCRIPTION

Principal assunto é analisarmos a eficiência e comparação entre os seguintesalgoritmos de busca: Bubblesort, Selection-Sort, Insertion-Sort, Margesort e Quicksort .O analise aplica em executar 50 vezes cada algoritmo com entrada aleatória de númerosde tamanho K, para cada entra de tamanha K com os respectivos valos para K =100.000, 200.000, 500.000, 1. 000.000, 5.000.000, 10.000.000.

Text of Análise de Algoritmo de Ordenação

E.D

CENTRO UNIVERSITRIO DA GRANDE DOURADOS

Jos Jean Gomes

Anlise de Algoritmo de Ordenao

Dourados 2010

1

E.D

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

2

E.D

Trabalho Estrutura de Dados

Analise comparativo dos Algoritmos de Ordenao

3

E.D

Sumrio1. Introduo................................................. ...............................3 2. Especificao dos Algoritmos2.1.1. 2.1.2. 2.1.3. 2.1.4. 2.1.5. Bubblesor ............................................................................... 4 Selection-sort.......................................................................... 5 Insertion-sort............................................ ...............................6 Margesort................................................. ...............................7 Quicksort.................................................. ...............................9

3. Mtodos Auxiliares3.1.1. 3.1.2. Gerar seqncias de nmeros aleatrio... ..............................11 Verificando a Ordenao........................ ...............................12

4. Analise 4.1.1. Grfico de Comparao.................................................13 4.1.2. Grfico de Troca............................................ ................14 4.1.3. Grfico de Tempo..........................................................15 5. Concluses...............................................................................16 6. Especificaes.................................................... .....................16 7. Referncias..............................................................................1 7

4

E.D

1. IntroduoPrincipal assunto analisarmos a eficincia e comparao entre os seguintes algoritmos de busca: Bubblesort, Selection-Sort, Insertion-Sort, Margesort e Quicksort. O analise aplica em executar 50 vezes cada algoritmo com entrada aleatria de nmeros de tamanho K, para cada entra de tamanha K com os respectivos valos para K = 100.000, 200.000, 500.000, 1. 000.000, 5.000.000, 10.000.000. Para cada conjunto de 50 seqncias de tamanho K ser executado os algoritmo de ordenao, analisando a cada execuo do conjunto de 50 seqncias de tamanho K, nmeros de comparao entre elementos da seqncia, nmero de troca entre a seqncia e tempo de execuo do algoritmo, finalizando o conjunto de 50 seqncias de tamanho K, calcular a media para cada item citados. Com as medias de cada conjunto de tamanho K, ser gerado um grfico comparando cada item citado entre os algoritmos de ordenao. O analise leva em conta: I. Nmeros de comparao entre elementos da seqncia II. Nmero de troca entre a seqncia III. Tempo de execuo do algoritmo Para cada conjunto de 50 seqncia de tamanho K, usaremos algoritmo que gera instancias de nmeros aleatrios. Para cada ordenao de um conjunto de 50 seqncias ser executado um algoritmo de ordenao, provando que as instancias aleatrias foram corretamente ordenadas.

5

E.D

2. Especificao dos algoritmos de ordenao .2.1.1. Bubble SortO bubble sort, ou ordenao por flutuao (literalmente "por bolha"), um algoritmo de ordenao dos mais simples. A idia percorrer o vetor diversas vezes, a cada passagem fazendo flutuar para o topo o maior elemento da seqncia. Essa movimentao lembra a forma como as bolhas em um tanque de gua procuram seu prprio nvel, e disso vem o nome do algoritmo. No melhor caso, o algoritmo executa n2 / 2 operaes relevantes, onde n representa o nmero de elementos do vetor. No pior caso, so feitas2n2 operaes. No caso mdio, so feitas 5n2 / 2 operaes. A complexidade desse algoritmo de Ordem quadrtica. Por isso, ele no recomendado para programas que precisem de velocidade e operem com quantidade elevada de dados.

--------------------------------------------------------------------------------------------------------------//Bubblesort Cdigo C++ void Bubblesort ( int *V, int M ) { int i, j, aux; for (i = M - 1; i > 1; i--) for (j = 0; j < i; j++) if (V[j] > V[j+1]) { aux = V[j]; V[j] = V[j+1]; V[j+1] = aux; } ---------------------------------------------------------------------------------------------------------------

6

E.D

2.1.2. Selection SortO selection sort (do ingls, ordenao por seleo) um algoritmo de ordenao baseado em se passar sempre o menor valor do vetor para a primeira posio (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posio, e assim feito sucessivamente com os (n -1) elementos restantes, at os ltimos dois elementos. O algoritmo possui complexidade O(n2) enquanto que, por exemplo, os algoritmos Heapsort e Mergesort possuem complexidades O(nlogn).

-------------------------------------------------------------- -----------------------------------------------------//Selection sort cdigo C++ void Selection (int x[], int n) { int j,i,k; for (j = n - 1; j > 0; j--) { i = 0; for (k=1; k x[i]) i=k; comparar++; } troca (&x[i], &x[j]); } } --------------------------------------------------------------------------------------------------------------------

7

E.D

2.1.3. Insertion SortInsertion sort, ou ordenao por insero, um simples algoritmo de ordenao, eficiente quando aplicado a um pequeno nmero de elementos. Em termos gerais, ele percorre um vetor de elementos da esquerda para a direita e medida que avana vai deixando os elementos mais esquerda ordenados. O algoritmo de insero funciona da mesma maneira com que muitas pessoas ordenam cartas em um jogo de baralho como o pquer.

Menor nmero de trocas e comparaes entre os algoritmos de ordenao (n) quando o vetor est ordenado.Pior caso O(n)

-------------------------------------------------------------------------------------------------------------------//Insertionsort cdigo C++ void ordenarInsercao(int n, int v[]){ int i, j, x; for (j = 1; j < n; j++){ x = v[j]; for (i = j - 1; i >= 0 && v[i] > x; i--){ v[i + 1] = v[i]; } v[i + 1] = x; } } --------------------------------------------------------------------------------------------- -----------------------

8

E.D

2.1.4. MergesortO merge sort, ou ordenao por mistura, um exemplo de algoritmo de ordenao do tipo dividir-para-conquistar. Sua idia bsica que muito fcil criar uma seqncia ordenada a partir de duas outras tambm ordenadas. Para isso, ele divide a seqncia original em pares de dados, ordena-as; depois as agrupa em seqncia de quatro elementos, e assim por diante, at ter toda a seqncia dividida em apenas duas partes. Os trs passos teis dos algoritmos dividir -para-conquistar, ou divide and conquer, que se aplicam ao merge sort so: Dividir: Dividir os dados em subseqncias pequenas; Conquistar: Classificar as duas metades recursivamente aplicando o merge sort; Combinar: Juntar as duas metades em um nico conjunto j classificado. Complexidade de tempo: (n log 2 n), Complexidade de espao: (n).

9

E.D ------------------------------------------------------------------------------- ------------------------------------//Mergesort cdigo C++ void mergesort (int *v, int inicio, int fim) { int i,j,k,m,*t; if (inicio == fim) return; // ordenacao recursiva das duas metades m = (inicio + fim) / 2; mergesort (v, inicio, m); mergesort (v, m + 1, fim); // intercalacao no vetor temporario t i = inicio; j = m + 1; k = 0; t = (int *) malloc (sizeof (int) * (fim - inicio + 1) ); while (i < m + 1 || j < fim + 1) { if ( i == m + 1 ) { // i passou do final da primeira metade, pe gar v[j] t[k] = v[j]; j++; k++; } else if (j == fim + 1) { // j passou do final da segunda metade, pegar v[i] t[k] = v[i]; i++; k++; } else if (v[i] < v[j]) { // v[i]