Métodos de Ordenação Externa

Slides:



Advertisements
Apresentações semelhantes
Organização e Gerência de Arquivos - OGA
Advertisements

Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Linguagem de Programação IX Métodos de Ordenação
Técnicas para operações E/S
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
Algoritmos para Projeção eliminando Duplicatas
Algoritmos para Projeção e Operações de Conjuntos AULA 22 Profa. Sandra de Amo GBC053 – BCC
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
David Menotti Estruturas de Dados I DECOM – UFOP
Medida do Tempo de Execução de um Programa
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Classificação (Ordenação) de dados
Métodos de Classificação por Seleção: HeapSort
Softwares.
Dividir-e-Conquistar
Robson Godoi / Sandra Siebra
Gerência de Memória.
Insertion Sort.
Paradigmas de programação
Proteção de Memória O sistema operacional deve impedir que um processo tenha acesso ou modifique uma página do sistema sem autorização. Proteção para páginas.
Sistemas Operacionais Gerenciamento de Memória
Algoritmos de ordenação
LISTAS DUPLAMENTE ENCADEADAS
Pesquisa em Memória Primária
Comparação entre os métodos de ordenação
Sistemas Operacionais
Árvore de Pesquisa Memória Secundária Engenharia de Computação - UFG.
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Desenvolvimento de Jogos e Entretenimento Digital
Universidade Católica de Pelotas Mestrado em Ciência da Computação
Mergesort Katia Guimarães.
Estruturas de Dados Aula 9: Listas (parte 1)
Ceça Moraes – Introdução à Programação SI1
Sistemas Operacionais
SISTEMAS OPERACIONAIS I
Sistemas Operacionais
SISTEMAS OPERACIONAIS I
Sistemas Operacionais
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Subsistema de Entrada e Saída do Kernel
DCC 001 Programação de Computadores 2º Semestre de 2011
Métodos de Ordenação.
Algoritmos para o operador de Projeção AULA 19 – Parte II Profa. Sandra de Amo GBC053 – BCC.
Analise de Algoritmos e Notação Assintótica
Gerenciamento de Memória - Capítulo 7 - Sistemas Operacionais Prof. Dr. José Carlos Becceneri Luciana Sêda Cardoso.
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Sistemas de Arquivos Sistemas Operacionais Profa. Priscila Facciolli
Classificação Ordenação de Dados
Sistemas Operacionais IV – Gerenciamento de E/S
Berilhes Borges Garcia Algoritmos Uma ferramenta para resolver um problema de computação bem- especificado (O espírito da computação) Exemplo: ordenação.
Sistemas de Arquivos. Alocação em memória – Problemas Quantidade Limitada de Informações Perda de informações quando o processo é terminado Vários processos.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
Métodos de Pesquisa: Sequencial e Binária
Gerência de Memória. Memória Considerações: Recurso caro e escasso; Programas só executam se estiverem na memória principal; Quanto mais processos residentes.
USP – ICMC – SSC SSC0300 2º Semestre 2015
Ordenação (Sorting) Ordenar é dispor os elementos de um conjunto numa ordem ascendente ou descendente. Problema: Dados n números, arranjá-los em ordem.
Classificação (Ordenação) de dados. Roteiro Contextualização e definições sobre Classificação Métodos de Classificação de Dados.
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
Transcrição da apresentação:

Métodos de Ordenação Externa ESTRUTURA DE DADOS Métodos de Ordenação Externa

Ordenação Externa Ordenação: re-arranjar um conjunto de registros em ordem ascendente ou descendente Os algoritmos sempre trabalham sobre os registros de um arquivo, sendo que apenas parte deste registro (a chave) é usada na ordenação Ordenação externa ou ordenação de arquivos: O número de registros a serem ordenados usa mais memória interna do que a disponível no computador Os métodos de ordenação externa são muito diferentes dos de ordenação interna

Ordenação Interna x Externa Na ordenação externa deve-se levar em conta que os dados estão armazenados em unidades de memória externa, muito mais lentas Memórias externas (discos, fitas, etc) armazenam os dados como um arranjo seqüencial: apenas 1 registro pode ser acessado por vez Compare com o acesso aos elementos de uma estrutura do tipo vetor na memória...

Problemas na Ordenação Externa Custo de acesso dos itens é muito superior ao custo de processamento na memória interna: Transferência de dados entre memória externa e interna é a parte principal do custo Acesso aos dados: Fita só permite acesso aos itens de forma seqüencial Discos podem acessar itens diretamente, mas com custo maior do que seqüencialmente, inviabilizando o acesso direto Métodos dependem da tecnologia: Como boa parte do custo para a ordenação é dependente do tempo de acesso à memória externa, os métodos podem se tornar dependentes de parâmetros tecnológicos

Ordenação Externa Eficiente Buscar a minimização do número de vezes que cada item é transferido entre memória interna e externa Método mais importante: FUSÃO (“merge”) Fundir: combinar duas ou mais seqüências ordenadas para formar uma única seqüência ordenada através da aplicação de repetidas seleções entre os componentes acessíveis em cada ocasião A operação de fusão é muito mais simples que a de ordenação e é empregada como uma operação auxiliar no processo mais complexo de ordenação externa

Passos a seguir na Ordenação por Fusão ou Intercalação Realizar uma leitura do arquivo e quebrar o arquivo em blocos de tamanho da memória interna disponível; ordenar em seguida cada bloco na memória interna. Fundir/intercalar os blocos ordenados após várias passadas sobre o arquivo; a cada passada blocos ordenados maiores são criados até que todo o arquivo esteja ordenado Eficiência: Redução do número de leituras do arquivo Redução do número de vezes em que um item é escrito ou lido na memória auxiliar

Fusão Direta [Wirth] Dividir a seqüência a em duas metades, chamadas b e c Fundir b e c por meio da combinação de elementos isolados para formarem pares ordenados Denominar a a seqüência assim obtida e repetir os passos 1 e 2, desta vez efetuando a fusão de pares ordenados em quádruplas ordenadas Iterar os passos anteriores, executando a fusão das quádruplas em óctuplas, e assim prosseguir duplicando o comprimento das subseqüências envolvidas no processo de fusão a cada vez, até que toda a seqüência esteja ordenada

Ordenação por Fusão (Merge) Princípio: Dividir o vetor (arquivo) em duas partes Intercalar os vetores ordenados de maneira independente Vantagens: Pior caso: O(n log n) Exige apenas acesso seqüencial aos dados Trabalha bem com dados em lista encadeada Desvantagens: Exige espaço extra: O(n)

Exemplo (Wirth, Cap 2) Seja a seqüência inicial: 44 55 12 42 94 18 06 67 No passo 1, o particionamento produz as seqüências 44 55 12 42 94 18 06 67 A fusão dos componentes isolados (que são seqüências ordenadas de comprimento 1) em pares ordenados resulta em: 44 94 18 55 06 12 42 67 Divindo-se novamente a seqüência ao meio e efetuando-se a fusão: 06 12 44 94 18 42 55 67 Uma outra divisão seguida de fusão produz finalmente o resultado esperado: 06 12 18 42 44 55 67 94

Um pouco mais sobre a Fusão Direta Cada operação que trata de uma só vez todo o conjunto de dados é denominada fase O menor subprocesso que implementa o processo de ordenação propriamente dito através de repeti-ções sucessivas é chamado passo O exemplo anterior produz uma seqüência ordena-da em 3 passos, cada qual consistindo de 1 fase de partição e de 1 fase de fusão Note que para que a ordenação seja efetuada, são necessárias 3 fitas (séries de dados)

Melhorando a Fusão Direta O método pode ser melhorado pela combinação das fases de particionamento e fusão: Ao invés de se efetuar uma fusão para produzir uma seqüência única, o resultado do processo de fusão é imediatamente redistribuído em duas fitas as quais vão se tornar as fontes de dados que alimentarão o próximo passo... Este método é chamado Fusão de Fase Única ou Fusão Balanceada O método tem desempenho superior ao anterior, mas o preço a pagar é o uso de uma quarta fita...

Exemplo de Fusão Balanceada (Ziviani) Seja um arquivo composto pelos registros com as seguintes chaves armazenado numa fita: A S O R T I N G A N D M E R G I N G E X A M P L E Os registros devem ser ordenados de acordo com as chaves e re-inseridos na fita Os registros são lidos um após outro (como numa fita magnética, por ex) Suponha ainda que a memória do computador só tem espaço para 3 registros, e o número de unidades de fita é 6.

Primeira Parte Na 1a. Parte, o arquivo é lido de 3 em 3 registros Cada bloco de 3 registros é ordenado e escrito em uma das fitas de saída Para o exemplo são lidos os registros A S O e escrito o bloco A O S na fita 1 Em seguida, são lidos os registros R T I e escrito o bloco I R T na fita 2, e assim sucessivamente... 3 fitas são usadas em uma fusão de 3 caminhos... Assim, a repetição dos passos 1 e 2 produz: fita 1: AOS DMN AEX fita 2: I RT EGR LMP fita 3: AGN GIN E

Segunda Parte Na 2a. Parte, os blocos devem ser fusionados O 1o. registro de cada uma das três fitas é lido para a memória interna, ocupando-a totalmente O registro contendo a menor chave é retirado e o próximo registro da mesma fita é lido para a memória interna O processo é repetido até a leitura de todos os registros

Segunda Parte Quando o terceiro registro de uma fita é lido, aquela fita fica “inativa” até que todas as outras fitas sejam lidas e escritas na fita de saída, formando um bloco com 9 registros ordenados Em seguida, o 2o. bloco de 3 registros de cada fita é lido para formar outro bloco ordenado de 9 registros, que é escrito em outra fita Por fim, 3 novos blocos ordenados são obtidos: fita 4: A A G I N O R S T fita 5: D E G G I M N N R fita 6: A E E L M P X Após mais uma fusão das fitas 4, 5 e 6 para as fitas 1, 2 e 3 finaliza a ordenação

MergeSort Externo Executa em 2 etapas Etapa 1 – Sort Quebra-se o conjunto em partições tamanho da partição depende da disponibilidade de buffers em memória (nbuf = no de buffers disponíveis) gera um arquivo temporário ordenado para cada partição Etapa 2 – Merge de “n” iterações ordena um conjunto de temporários a cada iteração gera um novo temporário resultante da ordenação ordenação termina quando existir somente um temporário que mantém a relação inteira ordenada

Algoritmo do Mergesort Mergesort(A,Esq,Dir); if Esq < Dir then m:= |(Esq+Dir) div 2| Mergesort(A,Esq,m); Mergesort(A,m+1,Dir); Merge(A,Esq,m+1,Dir); Nbuf = 1 Exemplo: A = [O R D E N A R A] [O] [R] [D] [E] [N] [A] [R] [A] [O R] [D E] [A N] [A R] [D E O R] [A A N R] [A A D E N O R R]

procedure Mergesort(var A:vetor; Esq,Dir: integer); var i, j, k, m: integer; begin if Esq < Dir then begin m:= (Esq+Dir) div 2; Mergesort(A,Esq,m); Mergesort(A,m+1,Dir); for i:=m donwto Esq do A[i]:=B[j]; for j:=m+1 to Dir do B[Dir+m+1-j]:=A[j]; for k:=Esq to Dir do begin if B[i] < B[j] then begin A[k]:=B[i]; i:=i+1; end else begin A[k]:=B[j]; j:=j-1; end;

Ordenação por Mergesort 1 2 3 4 5 6 7 8 Vetor A O R D E N A R A i = 1 O R D E i = 2 D E O R i = 3 A N i = 4 A R i = 5 A A N R i = 6 i = 7 A A D E N O R R

Outros métodos Capítulo 2 do Wirth traz todos os métodos, com análises aprofundadas. Capítulo 4 de Ziviani traz alguns métodos com boas explicações

Referências do Curso Transparências disponibilizadas pelo Prof. Ziviani, a partir do Livro Projeto de Algoritmos com Implementação em Pascal e C, M. A. da Silva Bigonha e Nívio Ziviani, Campus Algoritmos e Estruturas de Dados, N. Wirth, Prentice-Hall