Análise de Algoritmo de Ordenação

19
  E.D 1 CENTRO UNIVERSITÁRIO DA GRANDE DOURADOS José Jean Gomes Análise de Algoritmo de Ordenação Dourados 2010

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.

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

Page 1: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 1/19

 E.D

1

CENTRO UNIVERSITÁRIO DA GRANDE DOURADOS

José Jean Gomes

Análise de Algoritmo de Ordenação

Dourados2010

Page 2: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 2/19

 E.D

2

CENTRO UNIVERSITÁRIO DA GRANDE DOURADOS

José Jean Gomes Rgm: 122.780

Análise de Algoritmo de Ordenação

Trabalho apresentado na Disciplina deEstrutura de dados do 2010 ano, Cursode Ciência da Computação Faculdadede Dourados - MS

Professor(a) Ademir Martinez Sanches

Dourados2010

Page 3: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 3/19

 E.D

3

Trabalho Estrutura de Dados

 Analise comparativo dos Algoritmos de Ordenação

Page 4: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 4/19

 E.D

4

Sumário

1. Introdução................................................. ...............................3

2. Especificação dos Algoritmos2.1.1. Bubblesor ............................................................................... 42.1.2. Selection-sort.......................................................................... 5

2.1.3. Insertion-sort...........................................................................62.1.4. Margesort................................................. ...............................72.1.5. Quicksort.................................................. ...............................9

3. Métodos Auxiliares3.1.1. Gerar seqüências de números aleatório... ..............................113.1.2. Verificando a Ordenação.......................................................12

4. Analise4.1.1. Gráfico de Comparação.................................................134.1.2. Gráfico de Troca............................................................14

4.1.3. Gráfico de Tempo..........................................................15

5. Conclusões...............................................................................16

6. Especificações.................................................... .....................16

7. Referências..............................................................................1 7

Page 5: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 5/19

 E.D

5

1. Introdução

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.

Para cada conjunto de 50 seqüências de tamanho K será executado os algoritmode ordenação, analisando a cada execução do conjunto de 50 seqüências de tamanho K ,números de comparação entre elementos da seqüência, número de troca entre aseqüência e tempo de execução do algoritmo, finalizando o conjunto de 50 seqüênciasde tamanho K  , calcular a media para cada item citados. Com as medias de cada conjuntode tamanho K, será gerado um gráfico comparando cada item citado entre os algoritmosde ordenação.

O analise leva em conta:I. Números de comparação entre elementos da seqüência

II. Número de troca entre a seqüênciaIII. Tempo de execução do algoritmo

Para cada conjunto de 50 seqüência de tamanho K, usaremos algoritmo que gerainstancias de números aleatórios.

Para cada ordenação de um conjunto de 50 seqüências será executado umalgoritmo de ordenação, provando que as instancias aleatórias foram corretamenteordenadas.

Page 6: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 6/19

 E.D

6

2. Especificação dos algoritmos de ordenação .

2.1.1. Bubble Sort

O bubble sort, ou ordenação por flutuação (literalmente "por bolha"), éum algoritmo de ordenação dos mais simples. A idéia é percorrer o vetor diversas vezes,

a cada passagem fazendo flutuar para o topo o maior elemento da seqüência. Essamovimentação lembra a forma como as bolhas em um tanque de água procuram seupróprio nível, e disso vem o nome do algoritmo.

No melhor caso, o algoritmo executa n2 / 2 operações relevantes,onde n representa o número de elementos do vetor. No pior caso, sãofeitas2n2 operações. No caso médio, são feitas 5n2 / 2 operações.A complexidade desse algoritmo é de Ordem quadrática. Por isso, ele não érecomendado para programas que precisem de velocidade e operem com quantidadeelevada de dados.

--------------------------------------------------------------------------------------------------------------- //Bubblesort Código 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;}

---------------------------------------------------------------------------------------------------------------

Page 7: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 7/19

 E.D

7

2.1.2. Selection Sort

O selection sort (do inglês, ordenação por seleção) é um algoritmo deordenação baseado em se passar sempre o menor valor do vetor para a primeira posição(ou o maior dependendo da ordem requerida), depois o de segundo menor valor para asegunda posição, 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, osalgoritmos Heapsort e Mergesort possuem complexidades O(nlogn).

-------------------------------------------------------------- ------------------------------------------------------

 //Selection sort código C++

void Selection (int x[], int n){

int j,i,k;

for ( j = n - 1; j > 0; j--){

i = 0;for (k=1; k<= j; k++){

if(x[k] > x[i])i=k;comparar++;

}troca (&x[i], &x[ j]);

}}--------------------------------------------------------------------------------------------------------------------

Page 8: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 8/19

 E.D

8

2.1.3. Insertion Sort

Insertion sort, ou ordenação por inserção, é um simples algoritmo deordenação, eficiente quando aplicado a um pequeno número de elementos. Em termosgerais, ele percorre um vetor de elementos da esquerda para a direita e à medida queavança vai deixando os elementos mais à esquerda ordenados.

O algoritmo de inserção funciona da mesma maneira com que muitas pessoasordenam cartas em um jogo de baralho como o pôquer.

Menor número de trocas e comparações entre os algoritmos de ordenaçãoΩ (n) quando o vetor está ordenado.Pior caso O(n²)

--------------------------------------------------------------------------------------------------------------------

 //Insertionsort código 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;}

}--------------------------------------------------------------------------------------------- -----------------------

Page 9: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 9/19

 E.D

9

2.1.4. Mergesort

O merge sort, ou ordenação por mistura, é um exemplo de algoritmo deordenação do tipo dividir-para-conquistar.Sua idéia básica é que é muito fácil criar uma seqüência ordenada a partir de duas outrastambém ordenadas. Para isso, ele divide a seqüência original em pares de dados,ordena-as; depois as agrupa em seqüência de quatro elementos, e assim por diante, atéter toda a seqüência dividida em apenas duas partes.

Os três passos úteis dos algoritmos dividir -para-conquistar, ou divide andconquer, que se aplicam ao merge sort são:

Dividir: Dividir os dados em subseqüências pequenas;Conquistar: Classificar as duas metades recursivamente aplicandoo merge sort;Combinar: Juntar as duas metades em um único conjunto jáclassificado.

Complexidade de tempo: Θ (n log2 n), Complexidade de espaço: Θ (n).

Page 10: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 10/19

 E.D

10

------------------------------------------------------------------------------- -------------------------------------

 //Mergesort código 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 ti = 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]<v[j], pegar v[i]t[k] = v[i];i++; k++;

}else { // v[j]<=v[i], pegar v[j]t[k] = v[ j];

j++; k++;}}

 // copia vetor intercalado para o vetor originalfor (i = inicio; i <= fim; i++)v[i] = t[i-inicio];

free(t);}--------------------------------------------------------------------------------------------------------------------

Page 11: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 11/19

 E.D

11

2.1.5. QuickSort

O algoritmo Quicksort é um método de ordenação muito rápido e eficiente,inventado por C.A.R. Hoare em 1960, quando visitou a Universidade de Moscovo comoestudante. Ele criou o ' Quicksort ao tentar traduzir um dicionário de inglês para russo,ordenando as palavras, tendo como objetivo reduzir o problema original emsubproblemas que possam ser resolvidos mais facil e rapidamente. Foi publicado em1962 após uma série de refinamentos.

O Quicksort adota a estratégia de divisão e conquista. Os passos são:Escolha um elemento da lista, denominado pivô;Rearranje a lista de forma que todos os elementos anteriores ao pivôsejam menores que ele, e todos os elementos posteriores ao pivô sejammaiores que ele. Ao fim do processo o pivô estará em sua posição finale haverá duas sublistas não ordenadas. Essa operação édenominada partição;Recursivamente ordene a sublista dos elementos menores e a sublistados elementos maiores;

A base da recursão são as listas de tamanho zero ou um, que estão sempre

ordenadas. O processo é finito, pois a cada iteração pelo menos um elemento é posto emsua posição final e não será mais manipulado na iteração seguinte.

Page 12: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 12/19

 E.D

12

------------------------------------------------------------------------------------------------ --------------------

 //Quicksort código C++

int DeterminarPivot (int V[], int inicio, int fim) //Função para determinar o pivô;{int i, k = inicio; // k = posição do pivot V[inicio];

for (i = inicio + 1; i <= fim; i++){comp ++;if (V[ i ] < V[inicio]){

k++;Trocar (&V[i], &V[k]);}

}Trocar ( &V[inicio], &V[k]);

return (k);

}--------------------------------------------------------------------------------------------------------------------

void OrdenarQuicksort (int V[], int inicio, int fim) //Função qsort de ordenção;{int k; // k = posição do pivot V[inicio];

if (inicio < fim){

k = DeterminarPivot (V, inicio, fim); //chamno a função pra determinar o pivo;OrdenarQuicksort (V, inicio, k-1 );OrdenarQuicksort (V, k + 1, fim);

}}

--------------------------------------------------------------------------------------------------------------------

Page 13: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 13/19

 E.D

13

3. Métodos Auxiliares

O analise dos algoritmos de ordenação aplica em métodos auxiliares, algoritmosque gera seqüências aleatórias de números, al goritmo de verificação comprovando que aordenação foi realizada com sucesso, provando que v[i-1] < v[i] < v[i+1] .

3.1.1. Gerar seqüência de números aleatórios

O método que vamos usada para gerar as seqüências de números aleatórios emnosso analise vem da biblioteca stdlib.h. função srand, rand.Inicializar o gerador de números aleatórios.

O gerador de números pseudo-aleatórios é inicializado usandoo argumento passado como semente.

Para cada valor de propagação diferente usadas em uma chamada para srand, ogerador de números pseudo-aleatórios pode ser esperado gerar uma sucessão deresultados diferentes nas chamadas subseqüentes para rand.

Duas inicializações diferentes com a mesma semente,instruem o gerador pseudo-aleatórios para gerar a mesma sucessão de resultados para aschamadas subseqüentes para rand em ambos os casos.

Se a semente é definida como 1, o gerador é reinicializada paraseu valor inicial e produz os mesmos valores que a ntes qualquer chamada para rand esrand.

Para gerar números aleatórios, é srand geralmente inicializado com um valordistinto, como as relacionado com o tempo de execução. Por exemplo, ovalor devolvido pelo tempo de função (declarados no cabeçalho <ctime>) é diferente acada segundo, o que é distintivo suficiente para a maioria randoming necessidades.

---------------------------------------------------------------------------------------------- -------

 //código para gerar números aleatórios C++

#include <iostream>#include <stdlib.h>

#include <time.h>using namespace std;

int main(){

cout << ”O primeiro numero: ” << rand() % 100 << endl;

srand (time (NULL ));cout << “número aleatório: “ << rand() % 100 << endl;

srand(1);

cout <<“

Novamente o primeiro numero:“

<< rand() % 100 << endl;

return 0;}------------------------------------------------------------------------------------------------- ----

Executando o programa varias vezes podemos comprovar que é gerado onumero aleatório com o comando srand ( time ( NULL ) ) , a cada execução a primeirasaída e a ultima são iguais, a saída do meio é diferente a cada execução.

Page 14: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 14/19

 E.D

14

3.1.2. Verificando a ordenação

Ao finalizar cada algoritmo de ordenação teremos que verificar se o mesmo foicorretamente ordenado, neste analise usaremos um algoritmo seguencial.

O algoritmo percorrera o vetor de 0 a n-1 verificando se o elemento do vetorv[i] <= v[i+1], se o vetor estiver corretamente ordenado ele retornara um stringconfirmando que o mesmo esta ordenado.

Caso o vetor não esteja ordenado ele terminara o processo de verificação eretornara uma string alertando que a mesma não esta ordenado.----------------------------------------------------------------------------------------------------------

 /*Código de verificação C++

Iremos verificar se um vetor esta ordenado.

Retornando uma mensagem de aviso, ok (vetor ordenado),

 Erro ( Vetor não esta ordenado )*/ 

#include <iostream>using namespace std;

int main(){

int i;int v[ ] = {1, 2, 3, 4, 5};int k;string verif ;

k = 0;i = 0;

while (i < 5 - 1 && k == 0){

if (v [ i ] <= v [ i+1 ])verif = "Ok";

else{

verif = "Erro";k = 1;}i++;

}

cout << "Mensagem : " << verif << endl;

return 0;}----------------------------------------------------------------------------------------------------------

Page 15: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 15/19

 E.D

15

4. Analise

4.1.1. Gráfico de Tempo

*Análise de tempo entre todos

*Análise de Tempo entre Merge sort e Quicksort 

As medias de tempos entre os algoritmos de ordenação teve um grande aumentoa cadê tamanho de vetor, com 50 mil o tempo de ordenação foi irrelevante,quaisquer algoritmo analisado tem uma media de tempos praticamente iguai s,com o aumento do vetor podemos perceber nitidamente a diferença entre ostempos, dois métodos de ordenação manteve uma regularidade de tempo sendo

extremantes rápidos, analisando os dois métodos de ordenação separadospodemos perceber que existe uma diferença de milésimos de segundo entre eles.

Page 16: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 16/19

 E.D

16

4.1.2. Gráfico de Troca

*Análise de troca entre todo.

*Análise de troca entre Selection, Marge sort, Quicksort 

Na comparação de troca o Bubblesort manteve sendo o que vez mais trocas, oInsertion sort que teve um tempo mais baixo de ordenação que o Selection sortna comparação de troca ele realizo uma quantidade de troca maior. Merge sortee Quicksort mantiveram uma media razoável de troca com o Merge sorte temum numero maior que o Quicksorte em todas as verificações, O Selection sortetendo seu tempo sendo menor apenas que o do Bubble sort o seu numero detroca é considerado extremamente baixo a os outros algoritmos de troca.

Page 17: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 17/19

 E.D

17

4.1.3. Gráfico de Comparação

*Análise de Comparação de todos

*Análise de Comparação entre Merge sort e Quicksort 

Por mais que o Selection sort teve um numero de troca extremamente baixo oseu numero de comparação é extremamente alto, o mesmo numero decomparação do Bubble sort, Insertion sort manteve instável no de correr doanalise com o aumente dos vetores, um análise mais detalhado entre umadisputa entre dois algoritmos de ordenação Merge sort e Quicksort vemos que oQuicksort levo vantagem em todas as comparação.

Page 18: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 18/19

 E.D

18

5. Conclusão

Na análise dos algoritmos podemos perceber que alguns algoritmos têm uma certevantagem perante outros, O Merge sorte e Quick sorte foram os que tiveram um media baixaperante os outros com um superioridade do Quicksor em cima do Merge sorte. Selection sortseu analise de troca teve uma media baixa superando a do Merge sort e Quick sort mesmo

superando os dois algoritmos mais rápidos em troca sua comparação é a mesma do algoritmomais lento fazendo o seu tempo não ser considerado rápido para um numero grande deordenação. Insertion sort no analise manteve certa regularidade entre troca e comparação, tendoseu tempo mais baixo que o Selection sort. Bubble como os outro algoritmo de ordenação emquantidade pequena de ordenação pode ser utilizado tranquilamente, com o aumento daquantidade de números para ordenação pode perceber que é um mento não considerável em seutilizar levando muito tempo para realizar a ordenação.

6. Especificações

O Análise realizado teve um tempo de 25h30min em um computador Celeron * M 430com 512 MB-DDR2, sistema operacional Linux-Ubuntu.

Page 19: Análise de Algoritmo de Ordenação

5/16/2018 An lise de Algoritmo de Ordena o - slidepdf.com

http://slidepdf.com/reader/full/analise-de-algoritmo-de-ordenacao 19/19

 E.D

19

7. Referência

bubblesorthttp://pt.wikipedia.org/wiki/Bubble_sortimagem: http://www.brpreiss.com/books/opus5/html/img2035.gif 

Selection sorthttp://pt.wikipedia.org/wiki/Selection_sortimagem: http://www.brpreiss.com/books/opus5/html/img2084.gif 

Insertion sorthttp://pt.wikipedia.org/wiki/Insertion_sortimagem: http://www.brpreiss.com/books/opus5/html/img2017.gif 

Mergesorthttp://pt.wikipedia.org/wiki/Merge_sortimagem: http://www.brpreiss.com/books/opus5/html/img2101.gif 

Quicksorthttp://pt.wikipedia.org/wiki/Quick_sortimagem: http://www.brpreiss.com/books/opus5/html/img2046.gif 

Numeros aleatoriohttp://www.cplusplus.com/reference/clibrary/cstdlib/srand/