Sei sulla pagina 1di 10

Algoritmos de Ordenao

Juliana de Souza Alves - RA 1001441 - 3 A Engenharia de Produo

Resumo: Neste artigo so apresentados trs dos vrios algoritmos de ordenao que existem: Bubblesort, Shellsort e Quicksort. feita uma descrio do funcionamento de cada uma delas, fazendo referncia a vantagens e desvantagens.

Introduo

Para resolver um problema em um computador necessrio que se encontre uma maneira de descrever estes problemas de forma clara e precisa. de grande relevncia que se encontre a seqncia de passos para que o problema possa ser resolvido. tambm preciso definir como os dados sero processados e armazenados. Est seqncia chamada de Algoritmos. No seu livro Fundamental Algorithms Vol. 1 Donald Knuth apresenta uma verso para a origem desta palavra. Ela seria derivada do nome do famoso matemtico chamado Abu Jafar Maom ibn musa Al-Khowrism (825). Este escreveu um livro chamado Kitab Al Jabr WalMuqabala, que traduzindo significa Regras de Restaurao e reduo. Um algoritmo opera sobre um conjunto de entradas e sadas que sejam teis ao usurio. Existem vrios tipos de algoritmos e um deles o de ordenao: imaginemos procurar algum contato na lista telefnica sem que ela esteja em ordem alfabtica, seria verdadeiramente uma perca de tempo. Em seu livro Algoritmos e estruturas de Dados (1986), Wirth escreve que, a ordenao uma atividade relevante e essencial, sobretudo na rea de processamento de dados. E de grande importncia que se tenha uma reduo de tempo na complexidade dos algoritmos. Os problemas de ordenao so comuns tanto em aplicaes comerciais, quanto cientificas. Entretanto, raro so os problemas que se resumem pura ordenao de seqncias de elementos, normalmente os problemas de ordenao so inseridos em problemas de pesquisa, intercalao e atualizao. Isto torna ainda mais importante o projeto e a construo de algoritmos eficientes e confiveis para tratar o problema. Com isto foram criados diversos algoritmos de ordenao onde em determinado problema possa ocorrer ordenao, mais em um tempo reduzido.
1

Neste texto irei abordar a definio de algoritmo, de algoritmo de ordenao e tambm trs dos vrios algoritmos de ordenao existentes, Bubblesort, Shellsort e Quicksort, descrevendo suas vantagens e desvantagens e um comparativo entre elas.

Definies sobre Algoritmo Muitas definies podem ser dadas palavra algoritmo. Atualmente o associamos computao. Mais este termo no um termo restrito computao. Na verdade este nome se origina do nome do famoso matemtico chamado Abu Jafar Maom ibn musa Al-Khowrism (825). Este escreveu um livro chamado Kitab Al Jabr Wal-Muqabala, que traduzindo significa Regras de Restaurao e reduo. Este termo usado em outras reas como administrao, engenharia, at mesmo na cozinha. Vejamos algumas definies de algoritmos: segundo Dijkastra(1971) um algoritmo corresponde a uma descrio de um padro de comportamento expresso em termos de um conjunto finito de aes. Ao executarmos a operao a+b percebemos um mesmo padro de comportamento mesmo que a operao seja realizada para valores diferentes de a e b. De acordo com o livro Algoritmos e lgicas de Programao (2006) por Furlan, Gomes, Soares e Concilio, o algoritmo representa um conjunto de regras para a soluo de um problema. uma definio geral, podendo ser aplicada a qualquer circunstncia que exija uma descrio da soluo. Para isto so usadas linguagens de programaes. Ests linguagens so utilizadas em computadores. Assim como ns seres humanos temos um tipo de linguagem, os computadores tem a linguagem de programao trabalhando juntamente com as lgicas de programao, os mesmos foram criados com a funo de ajudar o homem no seu dia-a-dia representando solues de qualquer problema mais especificamente em problemas como processamento de dados, criando assim, algo que tivesse uma grande funcionalidade. Para entendermos um pouco melhor do que um a lgica de programao utilizaremos como exemplo uma receita de bolo, onde colocaremos o passo a passo a ser executado: Receita de bolo Misture os ingredientes Unte a forma com manteiga Despeje a mistura na forma Se houver achocolatado Ento despeje sobre a mistura Leve a forma ao forno
2

Enquanto no corar Deixe a forma no forno Retire do forno Deixe esfriar Assim como est receita o algoritmo segue uma lgica de programao.

Algoritmos de Ordenao A tcnica de ordenao ilustra claramente como um dado problema pode ser resolvido por meio de diferentes algoritmos, cada qual apresentando vantagens e desvantagens, as quais devem ser consideradas sob o ngulo da particular aplicao a que se destinam. Segundo o autor Niklaus Wirth, escreveu um livro chamado Algoritmos e Estruturas de Dados (1986), onde diz que em geral entende-se a atividade de ordenao como sendo o processo de rearranjo de certo conjunto de objetos de acordo com um critrio (ordem) especifico. O objetivo da ordenao facilitar a localizao dos membros de um conjunto de dados. Assim sendo, uma atividade fundamental e universalmente utilizada para a elaborao de algoritmos mais complexos. Portanto a ordenao uma atividade relevante e essencial, sobre tudo na rea de processamento de dados. Contudo, o interesse principal pelo estudo da ordenao est associado a tcnicas ainda mais bsicas, utilizadas na construo de algoritmos. So raras as tcnicas que no utilizem, de alguma forma, algoritmos que empreguem funes de ordenao. De modo particular, a ordenao um assunto ideal para se demonstrar a grande diversidade de algoritmos que podem ser construdos de maneiras extremamente variadas, porm todos com o mesmo propsito, muitos dos quais funcionando de modo perfeito sob determinadas circunstncias, e a maioria dos quais apresentando vantagens e desvantagens sobre os demais. A dependncia da escolha de um algoritmo quanto estrutura de dados a ser processada to forte no caso da ordenao que os mtodos utilizados so, em geral, classificados em duas categorias, ordenao de vetores e ordenao de arquivos (seqenciais). As duas classes so freqentemente chamadas de ordenao interna e externa porque os vetores so armazenados nas memrias internas dos computadores, de acesso aleatrio e rpido, que apresentam uma velocidade muito alta, enquanto os arquivos so armazenados em memrias externas, de
3

acesso lento, porm com alta capacidade de armazenamento, baseados em dispositivos mecnicos (discos e fitas). Existem diversos de Algoritmos de ordenao: Bubblesort, Megasort, Quicksort, Shellsort, Insertsort, entre outros. Irei explicar trs tipos: Bubblesort, Shellsort e Quicksort. Onde, nesta mesma ordem classificam-se como: lento, intermedirio e rpido.

Bubblesort

Raramente, possvel efetuar de maneira totalmente clara a classificao de um mtodo de ordenao. Ser apresentado um mtodo em que a permutao entre dos elementos a principal caracterstica do processo. O algoritmo subseqente de permutao direta baseado na comparao e permutao de pares de elementos adjacentes at que todos eles tenham sido ordenados. Como nos mtodos de seleo direta, efetuam-se varreduras repetidas sobre o vetor, deslocando-se, a cada passo, para a sua extremidade esquerda, o menor dos elementos do conjunto que restou. Se, para uma troca, o vetor for visualizado na posio vertical ao invs de na horizontal e com o auxilio da imaginao, os elementos forem bolhas em um tanque de gua, com densidades proporcionais ao valor das respectivas chaves, ento cada varredura efetuada sobre o vetor resultaria na ascenso de uma bolha parar o seu nvel apropriado, de acordo com sua densidade (tabela 1.1). Este mtodo conhecido como Bubblesort (ordenao por bolhas). Sua forma simples mostrada no Programa 1.2. Este algoritmo sugere por si prprio alguns aperfeioamentos. No exemplo na tabela 1.1, pode observar que os trs ltimos passos do algoritmo no afetaram a ordem dos elementos do vetor, pois estes j se encontravam ordenados. Uma tcnica para melhorar este algoritmo consiste em manter uma indicao informando se houve ou no a ocorrncia de uma permutao, para determinar precocemente o trmino do algoritmo. Mesmo est melhoria pode ser por sua vez aperfeioada, guardando-se no a simples informao da ocorrncia de uma permutao, mas a posio do vetor em que ocorreu a ultima permutao realizada.

Tabela 1.1 Um exemplo de Bubblesort

Programa 1.2 Cdigo Fonte do Bubblesort

Vantagens -Simplicidade do algoritmo. -Algoritmo estvel. Desvantagens -Mtodo lento para grande quantidade de dados recomendvel ser utilizado para pequena quantidade de dados, pois utiliza pouca memria e fcil de ser implementado.

ShellSort Um refinamento do mtodo de ordenao por insero direta foi proposto por D.L Shell em 1959, no qual chamado de Shellsort. Este processo chamado ordenao de distncia. Para explicar ser utilizado o exemplo de oito elementos (vide tabela 1.3). Primeiramente todos os elementos que estiverem a intervalos de quatro posies entre si na seqncia corrente so agrupados e ordenados separadamente. Neste exemplo os oitos elementos cada grupo contem exatamente dois elementos. Aps o primeiro passo, os elementos so reagrupados em grupos com elementos cujo intervalo de duas posies, sendo ordenados novamente. Finalmente, em um terceiro passo, todos os elementos so ordenados atravs de uma ordenao simples ou a distancia. Analisando este algoritmo identificam-se alguns problemas matemticos bastante difceis, muitos dos quais ainda no foram resolvidos at agora. Em particular, no se sabe qual a escolha de incrementos que dever fornecer os melhores resultados. Um fato surpreendente que eles no podem ser mltiplos uns dos outros. Isto evitar que em cada passo de ordenao combina duas cadeias entre as quais anteriormente no havia nenhuma interao.

Tabela 1.3 Ordenao por insero com incrementos decrescentes Vantagens - tima opo para arquivos de tamanho moderado; - Sua implementao simples e requer uma quantidade de cdigo pequena; Desvantagens - O tempo de execuo do algoritmo sensvel a ordem inicial a do arquivo; - O mtodo no estvel;

QuickSort Inventado por C.A.R. Hoare, significa ordenao rpida. O algoritmo Quicksort baseado no fato de que as permutaes devem ser preferencialmente empregadas para pares de elementos que guardem entre si distancias grande, com a finalidade de se conseguir uma maior eficincia. admitido que sejam fornecidos n elementos na ordem inversa de suas chaves. possvel orden-los com n/2 permutaes tomando-se primeiramente os elementos das extremidades direita e esquerda e indo gradualmente para o centro, pelos dois lados (Figura 1.4.). Estes algoritmos so bastante diretos e eficientes porque os principais elementos participantes das comparaes podem ser mantidos em registradores de rpido acesso durante todo o decorrer da varredura. Analisando o desempenho do algoritmo Quicksort, necessrio primeiramente que seja verificado o comportamento do processo de particionamento. Depois de selecionado um limite x, executado uma varredura completa do vetor. Sendo realizadas exatamente n comparaes.

Figura 1.4 Ordenao por Quicksort


7

Vantagens - Extremamente eficiente; - Necessita apenas de uma pequena pilha como memria extra; Desvantagens - Implementao difcil; - Algoritmo no estvel.

Comparando os algoritmos de ordenao temos que se n mostrar o nmero de elementos a serem ordenados, C e M representaro, o numero necessrio de comparaes de chaves e o nmero de movimentos dos elementos. Frmulas analticas fechadas podem ser deduzidas para os trs mtodos de ordenao. Eles esto relacionados na tabela 1.5. As colunas denominadas por Mim, Md. e Max especificam os valores mnimos, mximos e mdios em relao a todos as permutaes possveis de n elementos.

Insero Direta Seleo Direta Permutao Direta

C= M= C= M= C= M=

Mn n-1 2(n - 1) (n - n)/2 3(n - 1) (n - n)/2 0

Md (n + n - 2)/4 (n - 9n - 10)/4 (n - n)/2 n* (ln n + 0,57) (n - n)/2 (n - n)*0,75

Mx (n - n)/2 - 1 (n - 3n - 4)/2 (n - n)/2 n/4 + 3(n - 1) (n - n)/2 (n - n)*1,5

Tabela 1.5 Comparaes de mtodos de ordenao direta As principais constataes indicam que os clculos computacionais necessrios podem ser calculados como c*n no caso do Shellsort e como c*n*log n no caso do Quicksort, onde os coeficientes c so constantes apropriados a cada caso. Estas frmulas oferecem apenas uma medida grosseira de desempenho, na forma de funes n, permitindo a classificao dos algoritmos de ordenao em mtodos diretos e primitivos e em mtodos logartmicos, mais elaborados. Para finalidades prticas, bastante til ter disposio alguns dados experimentais de onde possam se extrados algumas informaes sobre o coeficientes x que iro distinguir os mtodos. Exemplos de dados obtidos experimentalmente so, sem duvida alguma, bastante informativos. Wirth (1986) faz em seu livro uma comparao entre os algoritmos de ordenao. A tabela 1.6 mostra est comparao, os tempos m segundos consumidos pelos mtodos de ordenao discutidos anteriormente. As
8

trs colunas representam os tempos utilizados para ordenar uns vetores j ordenados, outro, cujo elemento se apresenta em uma permutao e um vetor cujo elemento est ordenado segundo a ordem inversa.
Ordenado n=256 0.02 0.12 0.94 1.26 0.02 0.10 0.20 0.08 0.08 0.18 n=2048 0.22 1.16 58.18 80.18 0.16 0.80 2.32 0.72 0.72 1.98 Aleatrio 0.82 0.70 0.96 2.04 1.66 0.24 0.20 0.12 0.12 0.18 Inverso 1.64 1.30 1.18 2.80 2.92 0.28 0.20 0.08 0.08 0.18

InseroDireta InseroBinria SeleoDireta BubbleSort ShakerSort ShellSort HeapSort QuickSort QuicksortNoRecursivo FusoDireta

InseroDireta InseroBinria SeleoDireta BubbleSort ShakerSort ShellSort HeapSort QuickSort QuicksortNoRecursivo FusoDireta

50.74 37.66 58.34 128.84 104.44 7.08 2.22 1.22 1.32 2.06

103.80 76.06 73.46 178.66 187.36 12.34 2.12 0.76 0.80 1.98

Tabela 1.6 Tempos de Execuo dos programas de ordenao.

Os dados separam os mtodos n dos mtodos n*log(n). Veja a seguir alguns pontos a serem notados: O mtodo Bubblesort , definitivamente, o pior dos mtodos de ordenao, entre todos aqui apresentados. O mtodo Shellsort no estvel, pois ele nem sempre deixa registros com chaves iguais na mesma posio relativa, o seu tempo de execuo sensvel ordem inicial do arquivo O Mtodo Quicksort efetua a ordenao de um vetor inversamente ordenado com a velocidade praticamente idntica da ordenao de um vetor j ordenado.
9

Concluso

Concluindo este artigo vemos que com o grande desenvolvimento das tecnologias foi necessrio ao homem criar os chamados algoritmos para facilitar em seu dia-a-dia. E como tudo que nos cerca, precisa de vrias tcnicas, foram feitas algoritmos diversos como o de ordenao, onde o mesmo permite apresentar um conjunto de algoritmos para resolver o mesmo problema, cada qual com suas vantagens e desvantagens.

Em comparao aos trs algoritmos ordenao, como queremos sempre ganhar tempo, vemos que o Bubblesort definitivamente o pior caso do mtodo de ordenao, pois muito lento e sua capacidade de armazenar dados muito pequena. No Shellsort vemos que o tempo de execuo do algoritmo sensvel a ordem inicial a do arquivo. E no Quicksort extremante eficiente e o seu tempo de execuo idntico a um vetor j ordenado. Resumindo o melhor mtodo o Quicksort.

Referncias

De Souza, A. J. Algoritmos. Disponvel em: http://www.cefetrn.br/~ajdsouza/algo/PDF/aula1.pdf. ltimo acesso: 14/05/ 2006

Oliveira Cruz, A.J. Ncleo de Computao Eletrnica UFRJ. Disponvel em: http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm. ltimo acesso: 28/06/2007

Niklaus Wirth , Algoritmos e estruturas de dados.Disponvel em: livro Titulo Original em ingls: Algorithms and Data Structures EditoraPHB, Inc. Ano da Publicao: 1986.

Ziviani, N. Projetos de Algoritmos Com Implementaes em Pascal e C 4ed.. Disponvel em: Livro Editora Pioneira. ltimo acesso: 1999 10

Potrebbero piacerti anche