Você está na página 1de 15

1 FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAO ESTRUTURA DE DADOS 2 Vieira Lima Junior

Everson Santos Araujo

ALGORITMOS DE ORDENAO: estudo comparativo de diversos algoritmos de ordenao.

Imperatriz (MA) 2003

2 Everson Santos Araujo

ALGORITMOS DE ORDENAO: Estudo comparativo de diversos algoritmos de ordenao.

Trabalho apresentado ao Curso de Sistemas de Informao, destinado obteno de nota na matria de Estrutura de Dados 2.

Orientador: Prof. Vieira Lima Junior

Imperatriz (MA) 2003

Este trabalho dedicado a todos aqueles que deram a vida por um mundo melhor: livre do LAG, NetSplit e que lutaram pela conexo em Banda Larga. Amm.

"A anlise de algoritmos uma disciplina de engenharia. Um engenheiro civil, por exemplo, tem mtodos e tecnologia para prever o comportamento de uma estrutura antes de constru-la. Da mesma forma, um projetista de algoritmos deve ser capaz de prever o comportamento de um algoritmo antes de implement-lo." - Annimo

5 APRESENTAO Este um trabalho de pesquisa e verificao de diversos mtodos de ordenao para sua comparao e apresentao. Neste trabalho no estaremos apresentando solues para problemas de ordenao, estaremos apenas demonstrando quais so os mtodos que podem ser utilizados em determinadas situaes e como melhor saber escolher um destes mtodos para determinada utilizao. Antes de iniciarmos as discusses sobre os vrios mtodos de ordenao devemos ter em mente algumas das variveis que mtodos de ordenao devem levar em conta para serem estudados. Uma ordenao pode ser in-place ou no, a ordenao in-place a ordenao que efetuada com a prpria sequncia sem utilizar sequncias adicionais, este mtodo utilizado em sistemas onde no se pode gastar mmoria adicional. A ordenao tambm pode ser estvel ou no, uma ordenao estvel se tem quando a posio original de ordem de dois valores iguais preservada.

6 SUMRIO

APRESENTAO..................................................................................................................05 1. BOLHA.................................................................................................................................07 2. SELEO............................................................................................................................07 3. INSERO..........................................................................................................................08 4. SHELLSORT.......................................................................................................................08 5. QUICKSORT.......................................................................................................................09 6. MERGESORT.....................................................................................................................09 7. HEAPSORT.........................................................................................................................09 8. COUNTING SORT..............................................................................................................10 9. RADIX SORT......................................................................................................................11 10. BUCKET SORT................................................................................................................11 CONCLUSO..........................................................................................................................13

REFERNCIAS.......................................................................................................................14 APNDICE..............................................................................................................................15 APNDICE A................................................................................................. .............................15 APNDICE B..................................................................................... .........................................15

7 1. Bolha Algoritmo posicional comparativo in-place: Seleciona uma posio, compara a sequncia a partir desta posio, caso a comparao no esteja ordenada, realiza a troca dos elementos. Realiza a mesma operao recursivamente em todas as posies. Este sistema pode ser melhor explicado da seguinte maneira, imaginemos um conjunto de elementos desordenados, este mtodo selecionaria cada uma das posies e verificaria nas posies subsequentes a esta se existe um elemento que deveria estar na posio selecionada. Essa verificao feita atravs da comparao do valor da posio selecionada com o valor da posio que ele est percorrendo, caso o valor do referente posio do percurso esteja desordenado com o valor selecionado, ele realiza a troca dos mesmo. 1.1 Utilizao Este algoritmo desconsiderado em qualquer aplicao de ordenao atual, mas por ser o mtodo mais simples de ser implementado ainda estudado no meio acadmico como aprendizado de ordenao. 2. Seleo Algoritmo incremental comparativo de ordenao in-place: Percorre a sequncia restante em busca do prximo valor, colocando-o na prxima posio. Esta interao realizada at que toda a sequncia tenha sido percorrida. Este sistema de ordenao realiza a busca pelo valor seguinte entre os elementos ainda no verificados, utiliza ento este valor para ser o prximo valor a ser colocado na parte j ordenada da sequncia. 2.1 Utilizao Este um algoritmo muito simples de implementao que realiza poucas trocas, o que lhe garante utilizao em ambientes em que a troca muito custosa. Em contrapartida, realiza muitas comparaes, mdia de n log n. Por ser um mtodo comparativo incremental o fato dos elementos j estarem ordenados no o modifica em nada, pois ele continua realizando n*n comparaes. O seu sistema no estvel, pois ele pode realizar troca de elementos de igual valor.

8 3. Insero Algoritmo incremental de ordenao: Insere cada elemento do vetor, na sua posio correta em uma subsequncia ordenada de elementos, de modo a mant-la ordenada. Esta forma de ordenao seleciona cada um dos elementos de uma sequncia e os atribui uma posio relativa a seu valor, de acordo com a comparao com os elementos j ordenados da mesma sequncia. 3.1 Utilizao Este um algoritmo muito interessante quando os elementos j esto ordenados e deseja-se apenas inserir mais um elemento nesse conjunto de dados ordenados, ou quando se tem um conjunto que se imagina estar praticamente ordenado. O seu pior caso de uso quando os elementos esto em ordem inversa. 4. Shellsort Mtodo de ordenao por insero atravs de decrementos, esta uma extenso do mtodo de insero que pode realizar troca entre elementos que esto distantes um do outro sem precisar realizar a troca adjacente de cada um dos elementos entre estes. O mtodo de insero realiza a comparao e a troca adjacente dos elementos at que encontre o ponto de insero do elemento que ele pretende inserir. Caso este elemento esteja do outro lado da sequncia de elementos, ele ir realizar n-1 comparaes e movimentaes. 4.1 Utilizao Por ter uma implementao pequena que requer poucas linhas de cdigos e por ser um mtodo eficiente, pode ser utilizado em sistemas que no dispe de muitos recursos de memria. O seu tempo de execuo sensvel ordem inicial do programa, o que lhe garante um bom uso em sequncias j ordenadas. (herdado do mtodo de insero) O seu sistema no estvel, pois ele pode realizar troca de elementos de igual valor. 5. Quicksort Mtodo de diviso e conquista que concentra o trabalho na diviso e faz a conquista imediata, atravs deste mtodo a sequncia dividida atravs de um de seus valores que

9 considerado mediano, a partir deste valor so ordenados os elementos restantes em seu lado esquerdo, caso menores que este, ou lado direito recursivamente. Este mtodo seleciona um dos valores da sequncia, este numero ento considerado um piv, e comparado com os demais valores da sequncia ainda no ordenados que so alocados em sua esquerda caso sejam menores e a sua direita caso sejam maiores, disto restam duas sequncias uma a direita e outra a esquerda do piv, em cada uma destas realizado o mesmo mtodo at que reste apenas um elemento nas sequncias, neste instante temos a sequncia ordenada. 5.1 Utilizao Este um sistema de ordenao bem eficiente, na prtica ele efetua uma mdia de n log n comparaes. Para termos uma ordenao boa, a escolha do piv a chave, ento a escolha pode ser feita atravs da mediana de trs elementos da sequncia. Por exemplo, de uma sequncia pegamos o primeiro valor, o valor do meio e o ltimo, fazemos uma comparao entre eles e verificamos qual o valor mdio dentre estes trs, a partir disso utilizamos este valor mdio como piv. 6. Mergesort Mtodo de diviso e conquista que concentra o trabalho na conquista, neste modelo de ordenao a sequncia dividida em sequncias menores com metade do tamanho da original que so ordenados recursivamente. Este mtodo divide a sequncia em sequncias com metade de seu tamanho ordenandoas enquanto divide, e realiza sucessivas divises de cada uma das sequncias conseguidas, ao final destas a sequncia se torna ordenada pois foi-se ordenando-a um a um os elementos. 6.1 Utilizao No pior caso de uso, este mtodo mais eficiente que o quicksort, apesar de que na prtica o pior caso no o que acontece em todas as vezes, tornando assim o quicksort mais eficiente na prtica. 7. Heapsort Mtodo que simula uma rvore binria completa, atravs deste mtodo utilizamos uma simulao de uma arvore binria completa e utilizamos certas funes especiais deste tipo de dado para realizar a ordenao.

10 Uma rvore com estrutura heap aquela em que, para toda subrvore, o n raiz um divisor de valores, ou seja, os valores maiores esto sempre de um lado e os menores esto do outro lado. Deste modo o elemento no topo da rvore sempre o elemento de inicio da sequncia (em modo crescente o menor). 7.1 Utilizao Este mtodo tem em seu pior caso de insero de um dado na rvore em razo de log n, o que seria realizado utilizando percorrer a o tamanho da rvore, no a rvore inteira. Este um mtodo bastante eficiente porm requer a construo e ordenao de uma rvore binria, o que o torna mais complexo de ser implementado, e utiliza mais recursos. 8. Counting Sort Mtodo de ordenao linear, este mtodo requer o tamanho mximo de um valor dentro da sequncia para ento utilizar uma sequncia virtual de contagem que tem este tamanho mximo, fazendo com que todos os valores da sequncia original sejam contados e que seja colocado na posio referente a seu valor nesta sequncia virtual a quantidade de valores referentes a cada posio. Ento utiliza outra sequncia auxiliar com o tamanho da sequncia original que ir conter os valores da sequncia original ordenando-os atravs da busca nesta sequncia original na quantidade de vezes que contm cada uma das posies da sequncia virtual de contagem. 8.1 Utilizao Este mtodo s pode ser utilizado com nmeros inteiros, visto que sua forma de ordenao atravs de utilizao de uma sequncia posicional que ir receber a quantidade de vezes que valor referente a tal posio aparece na sequncia. Para garantir estabilidade ele deve varrer os elementos do lado contrrio a sua determinada ordenao, ou seja, para ordenao crescente ele deve varrer do ltimo ao primeiro elemento. Este um mtodo a ser implementado quando a comparao entre os elementos da sequncia um problema, ele utiliza operaes aritmticas e atribuies para realizar seu trabalho. No entanto para uma sequncia em que o valor mximo muito grande ele utiliza muitos recursos sem necessidade.

11 9. Radix Sort Mtodo de ordenao linear que ordena valores inteiros com um nmero contante de dgitos. Este mtodo utiliza-se do sistema de ordenao digito a digito, iniciando-se a partir do digito menos significativo (ou mais a direita), ele cria subconjuntos que contm todos os valores que possuem o digito verificado igual. A estabilidade da ordenao toma por base a induo de que se um nmero for ordenado pelo seu i-simo dgito sucessivamente at seu primeiro dgito, ele ir ordena-los de forma a permitir que suas posies sejam mantidas. Pois para dois nmeros com i-simos dgitos distintos, o de menor valor no dgito estar antes do de maior valor, e se ambos possuem o isimo digito igual, ento tambm estaro ordenados pois seus dgitos menos significativos j foram ordenados anteriormente. 9.1 Utilizao Se voc possui uma sequncia com valores fixos de quantidade de dgitos dos elementos ento este mtodo possui uma complexidade em funo apenas deste valor fixo, porm se utilizarmos a quantidade de dgitos variveis este mtodo pode precisar de sistemas adicionais de verificao da quantidade destes dgitos. A melhor utilizao deste mtodo depende da quantidade de dgitos mximos que possui o valor a ser ordenado, pra uma quantidade pequena de dgitos este infinitamente o melhor sistema de ordenao. Para facilitar esta escolha, verifique se a quantidade de dgitos menor que log n (sendo n a quantidade de valores na sequncia). A sua vantagem fica evidente quando interpretamos dgitos de forma mais geral que simplesmente 0 a 9, pois este algoritmo pode ser utilizado tambm para ordenao de literais ou qualquer outro tipo de dado que possa ser visto como uma d-upla ordenada de tens comparveis. 10. Bucket Sort Mtodo de ordenao linear que supe que os elementos a serem ordenados possuem uma natureza peculiar. Para discutirmos este mtodo utilizaremos um exemplo em que os elementos esto uniformemente distribudos em um intervalo semi-aberto, a idia dividir este intervalo em n segmentos de mesmo tamanho (buckets) e distribuir os n elementos nos seus respectivos segmentos. Como os elementos esto distribudos uniformemente, espera-se que o nmero de elementos seja aproximadamente o mesmo em todos os segmentos.

12 Em seguida, os elementos de cada segmento so ordenados por um mtodo qualquer e ento os segmentos ordenados so concatenados em ordem. 10.1 Utilizao Este mtodo pode ser utilizado em conjunto com outros mtodos para realizar a separao de um problema grande em vrios problemas pequenos, sendo mais simples de ordenar pelos mtodos anteriormente descritos.

13 CONCLUSO Atravs da realizao deste trabalho podemos concluir que a utilizao de um mtodo de ordenao seja ele qual for deve levar em considerao muitas variveis para que se possa ter um modelo de ordenao nico que atenda a todas as necessidades da melhor maneira possvel. Ento o que podemos concluir que no existe um sistema de ordenao que seja melhor ou mais rpido que outro sistema, existem sistemas que analisando um caso nico podem ser mais rpidos que outros. O que se deve perceber ento que a definio do uso da ferramenta e o primeiro passo para a escolha de uma soluo.

14 REFERNCIAS

HOROWITZ, E. SAHNI, S. 1987. Fundamentos de Estruturas de Dados. Ed. Campus. SWAIT, J.D. 1991. Fundamentos Computacionais: Algoritmos e Estrutura de Dados. Makron Books.

NETO, Peter T. Ordenao de vetores [online] disponvel em, <http://www.ulbra.tche.br/ ~danielnm/ed/trab991/g1/t2/peter/ordenacao.htm> capturado no dia 05/11/2003.

FEODFILO, Paulo. Anlise de algoritmos [online] disponvel em, <http://www.ime.usp.br/ ~pf/mac338-1999/> capturado no dia 07/11/2003. BRUMMUND, Peter. The complete collection of Algorithm Animations [online] disponvel em, <http://www.cs.hope.edu/~alganim/ccaa/> capturado no dia 15/11/2003.

15 APNDICE Apndice A:

Apndice B:

Você também pode gostar