11
Métodos de Ordenação: Ordenar corresponde ao processo de rearranjar um conjunto de objetos em ordem ascendente ou descendente. O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto ordenado. ...A atividade de colocar as coisas em ordem está presente na maioria das aplicações em que os objetos armazenados têm de ser pesquisados e recuperados. Um método é dito estável se a ordem relativa dos itens com a mesma chave não se altera durante o processo de ordenação. A Figura 2.1 exemplifica os métodos estáveis e instáveis de ordenação. Os métodos de ordenação são classificados em dois grandes grupos: ordenação interna e externa. 1. Ordenação Interna: São os métodos que não necessitam de uma memória secundária para o processo, a ordenação é feita na memória principal do computador; 2. Ordenação Externa: Quando o arquivo a ser ordenado não cabe na memória principal e, por isso, tem de ser armazenado em fita ou disco.

Métodos de Ordenação

Embed Size (px)

DESCRIPTION

Ordenacao de arquivos.

Citation preview

Mtodos de Ordenao:

Ordenar corresponde ao processo de rearranjar um conjunto de objetos em ordem ascendente ou descendente. O objetivo principal da ordenao facilitar a recuperao posterior de itens do conjunto ordenado. ...A atividade de colocar as coisas em ordem est presente na maioria das aplicaes em que os objetos armazenados tm de ser pesquisados e recuperados.Um mtodo dito estvel se a ordem relativa dos itens com a mesma chave no se altera durante o processo de ordenao. A Figura 2.1 exemplifica os mtodos estveis e instveis de ordenao.

Os mtodos de ordenao so classificados em dois grandes grupos: ordenao interna e externa.

1. Ordenao Interna: So os mtodos que no necessitam de uma memria secundria para o processo, a ordenao feita na memria principal do computador;

2. Ordenao Externa: Quando o arquivo a ser ordenado no cabe na memria principal e, por isso, tem de ser armazenado em fita ou disco.

A principal diferena entre os dois grupos que no mtodo de ordenao interna qualquer registro pode ser acessado diretamente, enquanto no mtodo externo necessrio fazer o acesso em blocos

2.1 Mtodos de Ordenao Interna

Mtodos simples:

1. BubbleSort

2. InsertSort

3. SelectSort

Mtodos e_cientes:

1. ShellSort

2. QuickSort

3. HeapSort

4. MergeSort

2.2 BubbleSort (bolha)

o mtodo mais simples em termos de implementao, porm o menos eficiente. A ideia principal do algoritmo percorrer o vetor n - 1 vezes, a cada passagem fazendo flutuar para o incio o menor elemento da sequncia. Essa movimentao, ilustrada na Figura 2.2, lembra a forma como as bolhas procuram seu prprio nvel, por isso o nome do algoritmo. Seu uso no recomendado para vetores com muitos elementos.

2.2.2 Estudo da Complexidade

A Equao 2.1 demonstra o clculo da funo de complexidade em relao ao

nmero de comparaes. Ela a mesma para o melhor, pior e caso mdio.

Ordem de Complexidade: O(n2)

2.2.3 Anlise do algoritmo

O BubbleSort um mtodo de simples implementao, porm a sua eficincia a menor entre os mtodos de ordenao interna [17]. Admite contudo vrios melhoramentos e tambm uma boa base para a construo de mtodos mais elaborados.

2.3 InsertSort

InsertSort um algoritmo elementar de ordenao. eficiente quando aplicado um vetor com poucos elementos. Em cada passo, a partir de i = 2, o i-simo item da sequncia fonte apanhado e transferido para a sequncia destino, sendo inserido no seu lugar apropriado. O algoritmo assemelha-se com a maneira que os jogadores de cartas ordenam as cartas na mo em um jogo, como o pquer,

por exemplo.

2.3.1 Implementao

A colocao do item no seu lugar correto na sequncia ordenanda, como demonstra

o Programa 2.6, realizada movendo os ndices de maiores valores para direita e ento inserindo o item na posio vazia.

Ordem de Complexidade: O(n2)

2.3.3 Anlise do algoritmo

O InsertSort tambm um mtodo de simples implementao, e tem a complexidade igual ao BubbleSort. Pode ser aprimorado com o uso de sentinela e outras tcnicas de algoritmos. o melhor mtodo para se utilizar quando os arquivos j esto quase ordenados.

2.4 SelectSortTem como princpio de funcionamento selecionar o menor item do vetor e a seguir troc-lo pela primeira posio do vetor. Isto ocorre para os n - 1 elementos restantes, depois com os n - 2 itens, at que reste apenas um elemento. A principal diferena deste mtodos em relao aos dois j apresentados que ele realiza apenas uma troca por iterao.

2.4.1 Implementao

A colocao do item no seu lugar correto na sequncia ordenada, como demonstra o Programa 2.7 realizada trocando o item de menor valor pela primeira posio do vetor.

Ordem de Complexidade: O(n2)2.4.3 Anlise do algoritmo

O SelectSort um mtodo muito simples. Alm disso, o algoritmo de seleo apesenta um comportamento espetacular quanto ao nmero de movimentos de registros, cujo tempo de execuo linear, esta particularidade dificilmente encontrada em outros algoritmos de ordenao. o algoritmo ideal para arquivos com registros muito grandes. o algoritmo ideal para arquivos com registros muito grandes.

2.5 ShellSortEste algoritmo uma extenso do mtodo InsertShort proposto por DonaldShell em 1959. O algoritmo de insero troca itens adjacentes quando est procurando o ponto de insero na sequncia destino. Se o menor item estiver na posio mais direita no vetor, ento o nmero de comparaes e movimentaes igual a n - 1 para encontra o seu ponto de insero. O ShellSort contorna este problema, permitindo trocas de registros distantes um do outro. De maneira geral ele passa vrias vezes no vetor dividindo-o em vetores menores, e nestes so aplicados o algoritmo de ordenao por insero tradicional.

Dentre os programas de ordenao interna que tem ordem de complexidade quadrtica, o ShellSort o mais eficiente.2.5.1 Implementao

O diferencial do ShellSort a diviso em h intervalos que ele realiza para posteriormente aplicar o mtodo de insero. Vrias sequncias para h tm sido experimentadas. Knuth(1973) mostrou experimentalmente que a escolha do incremento para h, mostrada a seguir na Equao 2.7 difcil de ser batida em mais de 20% dos casos em eficincia no tempo de execuo.

2.5.2 Estudo da Complexidade

O estudo da complexidade deste algoritmo contm alguns problemas matemticos muito difceis, a comear pela prpria sequencia de incrementos para h. De acordo com testes empricos utilizando a Formula 2.7 para o calculo dos incrementos, a ordem de complexidade do ShellSort de aproximadamente O(n1; 25) ou O(n(log n)2).

2.5.3 Anlise do algoritmo

O ShellSort uma tima opo para arquivos de tamanho moderado, mesmo porque sua implementao simples e requer uma quantidade de cdigo pequena.

2.6 QuickSort

o algoritmo mais rpido que se conhece entre os de ordenao interna para uma ampla variedade de situaes. Foi escrito em 1960 e publicado em 1962 por C. A. R. Hoare aps vrios refinamentos. Porm em raras instncias especiais ele lento. Adotando a estratgia Dividir para conquistar o funcionamento resume-se a dividir o problema de ordenar um vetor de n posies em dois outros menores.

O QuickSort provavelmente o mais utilizado, porm a sua implementao demanda um pouco mais de pacincia e cautela.

2.6.1 ImplementaoA parte crucial do algoritmo o mtodo Partition quem tem a funo de rearranjar o vetor por meio da escolha de um piv, de tal forma que ao final o vetor estar particionado em uma parte esquerda com chaves menores ou iguais ao piv e outra maiores ou iguais.

2.6.2 Estudo da Complexidade

Assim como ShellSort a anlise da complexidade deste algoritmo di_cil devido a calculos matemticos complexos. O pior caso deste algoritmo quando o arquivo j est ordenado e a escolha do piv inadequada. Nesse caso as parties sero extremamente desiguais, e o mtodo MethodQuick ser chamado n vezes, eliminando apenas um item em cada chamada. Essa situao desastrosa, pois o nmero de comparaes passa a cerca de n/2, e o tamanho da pilha necessria para as chamadas recursivas cerca de n. Entretanto o pior caso pode ser evitado empregando-se modificaes na escolha do piv [10, 19, 18]. A melhor situao possvel ocorre quando cada partio divide o arquivo em duas partes iguais. Logo, a Equao 2.8 demonstra o calculo da funo de complexidade em relao ao nmero de comparaes.

No caso mdio o nmero de compaes apresentado na Equao 2.9, significando assim que a sua ordem de complexidade O(n log n).

2.6.3 Anlise do algoritmo

O QuickSort considerado o mtodo mais eficiente e altamente recomendvel para arquivos grandes. Quanto mais o vetor estiver desordenado, maior ser sua vantagem em relao aos outros mtodos. A escolha correta do piv essencial para a garantia de eficincia do algoritmo.

2.7 HeapSort

Utilizando o mesmo princpio do SelectSort, o HeapSort um algoritmo que utiliza uma estrutura de dados conhecida como Heap binrio para manter o prximo item a ser selecionado. Criado em 1964 por Robert W. Floyd e J.W.J. Williams, ele um algoritmo de Ordem de Complexidade O(n log n). Existem dois tipos de heaps: Os heaps de mximo (max heap), em que o valor de todos os ns so menores que os de seus respectivos pais; e os heaps de mnimo (min heap), em que o valor de todos os ns so maiores que os de seus respectivos pais. Assim, em um heap de mximo, o maior valor do conjunto est na raz da rvore, enquanto no heap de mnimo a raz armazena o menor valor existente. Os heaps podem ser representados por arranjos, nesse caso a maior(menor) chave est sempre na posio 1 do vetor.

Os algoritmos para implementar as operaes sobre o heap operam ao longo de um dos caminhos da rvore, a partir da raiz at o nvel mais profundo da rvore. Para o HeapSort so necessria apenas duas operaes com o heap: Remake, que refaz a estrutura e Build que a constri.2.7.2 Estudo da Complexidade

A anlise de complexidade deste algoritmo tambm complexa como os dois mtodos apresentados anteriormente. Porm, ser apresentado resultados de testes empricos.

2.7.3 Anlise do algoritmo

primeira vista, o algoritmo no parece eficiente, pois as chaves so movimentadas vrias vezes. Entretanto, ele gasta um tempo de execuo proporcional a n log n no pior caso. Ele no recomendado para vetores com poucos elementos por causa do tempo gasto na construo do heap, sendo recomendado para aplicaes que no podem tolerar eventualmente um caso desfavorvel.

2.8 MergeSort outro algoritmo de ordenao do tipo dividir para conquistar. Sua idia bsica criar uma sequncia ordenada a partir de duas outras tambm ordenadas. Para isso, ele divide a sequncia original em pares de dados, ordena-as; depois as agrupa em sequncias de quatro elementos, e assim por diante, at ter toda a sequncia dividida em apenas duas partes, como ilustrado na Figura 2.14 [15].

Os trs passos teis dos algoritmos dividir para conquistar, ou divide and comquer, que se aplicam ao MergeSort so:

1. Dividir: Dividir os dados em subsequncias pequenas;

2. Conquistar: Classicar as duas metades recursivamente aplicando o mergesort;

3. Combinar: Juntar as duas metades em um nico conjunto j classificado.

2.8.2 Estudo da Complexidade

O clculo da anlise de complexidade no ser apresentada, mas de acordo com [9] a ordem de complexidade do algoritmo recursivo deste mtodo O(n log n) .

2.8.3 Anlise do algoritmo