Ordenação Externa (Merge Sort)

Documentos relacionados
Algoritmos e Estruturas de Dados II. Ordenação Externa II. Ordenação Externa. Ordenação Externa. Ordenação Externa.

Ordenação Externa. Profa. Graça Nunes

Classificação Externa: Geração de Partições Classificadas

Classificação Externa: Geração de Partições Classificadas

Operações Coseqüenciais. Processamento Coseqüencial. Modelo para implementação de processos coseqüenciais

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

ORDENAÇÃO EXTERNA DE ARQUIVOS: GERAÇÃO DE PARTIÇÕES CLASSIFICADAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

ALGORITMOS DE ORDENAÇÃO

Estruturas de Dados 2

INF70 Gerenciamento de Banco de Dados 2 Ordenação Externa. Ilmério Reis da Silva UFU/FACOM/BCC

Memória secundária. Memória secundária

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

BCC202 - Estrutura de Dados I

Memória Secundária e Ordenação externa Algoritmos e Estruturas de Dados III

Intercalação de vários arquivos. Estrutura de Dados II Prof Jairo Francisco de Souza

Classificação por Intercalação

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Classificação por Seleção Direta

Análise empírica de algoritmos de ordenação

Introdução à Ciência da Computação II

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Métodos de Classificação

Análise de Algoritmos Algoritmos de Ordenação

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.

Limite assintótico para a ordenação, Ordenação em tempo linear

Métodos de Ordenação Parte I

Ordenação. Prof. Jonas Potros

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Algoritmos de Ordenação: Tempo Linear

Projeto e Análise de Algoritmos

void subdivide (LISTA_ENC *pl, LISTA_ENC *pl1, LISTA_ENC *pl2) { int cont, k=1; for (cont=tam(*pl)/2;cont;cont--) {

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Melhores momentos AULA 1. Algoritmos p.38/86

Ordenação de Dados (III) HeapSort

Universidade Veiga de Almeida Algoritmos e Linguagem I

Pesquisa em Memória Secundária. Prof. Jonas Potros

INF 1010 Estruturas de Dados Avançadas

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

Computação Eletrônica. Vetores e Matrizes. Prof: Luciano Barbosa. CIn.ufpe.br

Aula 18 Algoritmos básicos de busca e classificação

Ordenação em Memória Primária Estrutura de Dados II

Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet

Algoritmo MergeSort. Estrutura de Dados II Prof Jairo Francisco de Souza

Capítulo 14. Ordenação e pesquisa. Bubblesort. Alguns algoritmos de ordenação e pesquisa Medição do tempo de execução de um programa

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

Análise e Complexidade de Algoritmos

Algoritmos de Ordenação

Sistemas de arquivos

Métodos de Ordenação

Classificação Externa: Intercalação de Partições Classificadas

Aula 21 Ordenação externa

Algoritmos de ordenação em forma paralela.

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Teoria da Computação. Unidade 3 Máquinas Universais. Referência Teoria da Computação (Divério, 2000)

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Transcrição:

Ordenação Externa (Merge Sort) Referências: A.V.Aho, J.E.Hopcroft, J.D.Ullman, Data Structures and Algorithms, Cap. 11. Problema: ordenar dados organizados como arquivos, ou de forma mais geral, ordenar dados armazenados em memória secundária ordenação externa. O Merge sort é capaz de ordenar um arquivo de n registros com O(log n) varreduras pelo arquivo Idéia central do algoritmo: organizamos um arquivo em séries progressivamente maiores, ou seja, seqüências de registros r 1... r k em ordem não decrescente (r i r i+1, 1 i < k). Dizemos que um arquivo está organizado em séries de comprimento k se seus registros formarem blocos onde r 1, r 2,..., r k r k+1, r k+2,..., r 2k... r (i 1)k+1, r (i 1)k+2,..., r ik... r m q+1, r m q+2,..., r m a) Para todo i 0 tal que ik m, r (i 1)k+1 r (i 1)k+2... r ik ; b) Se m não for divisível por k e m = pk + q, onde q < k, então r m q+1 r m q+2... r m. Note que r m q+1, r m q+2... r m (denominada cauda)é uma série de comprimento q. Exemplo: Arquivo com séries de comprimento 3: 7 15 29 8 11 13 16 22 31 5 12 1

O passo básico do merge sort em arquivos é começar com dois arquivos, digamos f 1 e f 2, organizados em séries de comprimento k. Assuma que: 1. o número de séries em f 1 e f 2, incluindo a cauda, difere de no máximo 1; 2. no máximo um dentre f 1 e f 2 tem uma cauda; e 3. o arquivo com a cauda tem pelo menos tantas séries quanto o outro. Com as premissas acima, é um processo simples ler uma série de cada arquivo f 1 e f 2, indercalar as séries e concatenar a série resultante (de comprimento 2k) em um dentre dois arquivos g 1 e g 2, os quais estão sendo organizados em séries de comprimento 2k. Alternando entre g 1 e g 2, podemos fazer com que esses arquivos não apenas estejam organizados em séries de comprimento 2k, mas satisfaçam as propriedades (1), (2) e (3) acima. Para ver que (2) e (3) são satisfeitos, observe que a cauda de f 1 ou f 2 se intercala na última série criada (ou talvez seja a própria). Passos do algoritmo: Começamos dividindo todos os n registros em dois arquivos f 1 e f 2 o mais uniformemente possível. Todo arquivo pode ser visto como organizado em séries de comprimento 1. Podemos intercalar então as séries de comprimento 1 e distribuí-las sobre os arquivos g 1 e g 2, organizados em séries de comprimento 2. Esvaziamos f 1 e f 2, e intercalamos g 1 e g 2 sobre f 1 e f 2, que estarão então organizados em séries de comprimento 4. Então intercalamos f 1 e f 2 para criar g 1 e g 2, organizados em séries de comprimento 8, e assim por diante. 2

3

4

5

6

Análise de complexidade: Após i passos, temos dois arquivos consistindo de séries de comprimento 2 i. Se 2 i n, então um dos dois arquivos estará vazio, e o outro conterá uma única série de comprimento n, ou seja, estará ordenado. Como 2 i n i log 2 n, então log 2 n passos são suficientes. Cada passo requer a leitura de dois arquivos e a escrita de dois arquivos, cada um com comprimento aproximado n/2. O número total de blocos de disco lidos ou escritos em um passo é então aproximadamente 2n/b, onde b é o número de registros que cabem em um bloco. Portanto, o número total de leituras e escritas do processo inteiro de ordenação é O((n log 2 n)/b). Agilizando o Merge Sort: Ao invés de iniciar o processo com arquivos organizados em séries de comprimento 1, pode-se começar com um passo que, para algum k apropriado, lê cada grupo de k registros contíguos para a memória principal, ordena-os (via quicksort, por exemplo), e os escreve como uma série de comprimento k. Por exemplo, se tivermos n = 10 6 registros e começarmos com k = 1, precisaremos de 20 passos para o processo de ordenação. Se pudermos armazenar 10 4 registros na memória principal, podemos, em um passo, ler 100 grupos de comprimento 10 4, ordenar cada grupo, e assim iniciar com 100 séries de comprimento 10 4 distribuídos uniformemente entre dois arquivos. Com apenas 7 passos do algoritmo teremos o arquivo ordenado, uma vez que 10 4 2 7 = 1.280.000. 7

Merge Sort de vários caminhos (multiway): O algoritmo apresentado acima pode ser generalizado para m arquivos de leitura e m arquivos de escrita, ao invés de apenas 2. O raciocínio é análogo a 2 arquivos: Dividimos os n registros em m arquivos f 1, f 2,..., f m, organizados em séries de tamanho k, obedecendo às restrições (1), (2), (3). Note que cada série é ordenada em memória principal. Por exemplo considere o arquivo abaixo, supondo m = 3, k = 3: Arquivo original: Arquivos organizados em séries de tamanho 3: Intercalamos então as séries de comprimento k dos arquivos f 1... f m, distribuindo nos arquivos g 1... g m (que estarão organizados em séries de tamanho km. Esvaziamos f 1... f m, e intercalamos g 1... g m sobre f 1... f m, que estarão então organizados em séries de comprimento km 2. Repetimos o passo anterior (intercambiando entre os arquivos f e g para leitura/gravação) para obter m arquivos organizados em séries de tamanhos km 3, km 4, etc. 8

Complexidade do multiway Merge Sort: A intercalação na memória principal pode ser feita em tempo O(log 2 m) por registro, se usarmos um heap ou outra estrutura que permita as operações INSERT e DELETEMIN em tempo logarítmico. Se tivermos n registros, e o comprimento das séries é multiplicado por m a cada passo, então após i passos as séries serão de tamanho km i. Se km i n, ou seja, após i = log m (n/k) passos, o arquivo inteiro estará ordenado. Como log m (n/k) = log 2 (n/k)/ log 2 m, reduzimos por um fator de log 2 m o número de escritas e leituras de cada registro. Além disso, se tivermos m unidades de disco para leitura de arquivos e m unidades para escrita, de tal forma que esses discos possam ser lidos/gravados em paralelo, os dados serão processados m vezes mais rápidos do que se tivéssemos uma unidade de disco para leitura e uma unidade para gravação; ou ainda 2m vezes mais rápido do que se tivéssemos apenas uma unidade de disco para escrita e gravação. O incremento indefinido de m não aumenta a velocidade do processamento por um fator log 2 m: para um numero suficientemente grande de m, o tempo para fazer a intercalação em memória principal (custo O(log 2 m)) irá exceder o tempo de I/O em disco. Exemplo: Tempo aproximado do Merge Sort número de arquivos 9

10