Académique Documents
Professionnel Documents
Culture Documents
Programa
Introduo Operaes bsicas sobre arquivos Armazenagem secundria Conceitos bsicos sobre estrutura de arquivo Organizando arquivos para desempenho Indexao Processamento co-seqencial e ordenao B-Tree e outras organizaes em rvores B+Tree e acesso seqencial indexado Hashing Hashing estendido
2
Objetivos
Descrever uma atividade de processamento, frequentemente utilizada, chamada de processamento co-sequencial. Apresentar um modelo genrico para implementar todas as variaes de processamento co-sequencial. Ilustrar o uso do modelo para resolver diferentes problemas de processamento co-sequencial. Apresentar o algoritmo K-way merge (intercalao mltipla). Apresentar o heapsort como uma abordagem para sorting em RAM Mostrar como merging (intercalao) fornece a base para ordenao de arquivos grandes.
Processamento Co-sequencial
Objetivo
Processamento coordenado de duas ou mais listas sequenciais para produzir uma nica lista como sada (procedimento geral para match e merge).
Processamento Co-sequencial
Tipos de listas resultantes:
Interseo (Matching) dos itens das listas.
A lista de sada formada s por itens que ocorrem em todas as listas de entrada. Ex: Indexao (combinao de chaves)
Processamento Co-sequencial
O ALGORITMO deve conter: procedimento de iniciao abertura dos arquivos. varivel de teste de fim dos arquivos. teste de sequncia de chaves para cada arquivo. procedimento de sincronizao dos arquivos. condies de parada. reconhecimento de erro para cada arquivo de entrada: registros duplicados por chave. registros no ordenados por chave.
6
procedure Leia_lista (arq; var reg; var chave); { read (arq, reg); if (eof(arq) ) then existe_registro = false else if reg.chave <= chave then // no ordenado ou duplicao: erro! { print arquivo+arq+ fora de ordem; pare }; Reconhecimento chave = reg.chave de erro. };
abra arq1; abra arq2; crie arqSada; chave1 = valor_minimo; chave2 = valor_minimo; existe_registro:= true; Leia_lista (arq1, reg1, chave1); Leia_lista (arq2, reg2, chave2);
Abre os arquivos/listas.
10
}.
12
procedure Leia_lista (arq; var reg; var chave); Quando terminar uma lista { read (arq, reg); apenas (acabou ainda if (eof(arq)) then false), existe_registro ainda { reg.chave = valor_mximo; ser true. if acabou then existe_registro = false ; acabou = true; } else if reg.chave <= chave then // no ordenado: erro! { print arquivo + arq + fora de ordem; pare }; chave := reg.chave };
Reconhecimento de erro.
13
abra arq1; abra arq2; crie arqSada; chave1 = valor_minimo; chave2 = valor_minimo; existe_registro = true; acabou = false; Leia_lista (arq1, reg1, chave1); Leia_lista (arq2, reg2, chave2);
Abre os arquivos/listas.
14
valor_mximo
o maior valor que o campo de chave poderia assumir.
valor_mnimo e valor_mximo
no ocorrem como valor de chave de nenhum dos registros dos arquivos de entrada.
16
onde
chave parmetro formal. O parmetro real (chave1 ou chave2) iniciado com valor_minimo.
17
Varivel existe_registro:
iniciada com true. Recebe false quando os dois arquivos chegam ao fim.
Encerra o loop (while existe_registro...) Termina a intercalao
19
Exemplo
Livro-Razo: um livro contendo contas s quais dbitos e crditos so lanados a partir de livros originais. PROBLEMA: Desenvolver um programa para o livro-razo (atualizao + listagem), como parte de um sistema de contabilidade.
21
Exemplo
Dois arquivos esto envolvidos neste processo: Arquivo Mestre: arquivo do livro-razo Resumo mensal do balano de cada uma das contas Arquivo de Transao: arquivo do dirio Contm as transaes mensais que so colocadas no livro-razo. Uma vez que o arquivo dirio est completo para um determinado ms, ele deve ser lanado no livro-razo. Esse lanamento envolve associar cada transao sua conta no livrorazo.
22
Exemplo
Amostra do livro-razo:
23
Exemplo
Amostra dos lanamentos no dirio:
24
Exemplo
Exemplo da listagem do livro-razo:
25
Exemplo
Como implementar o processo de lanamento no livro-razo? Usar o nmero da conta como uma chave para relacionar as transaes do dirio aos registros do livro-razo. Ordenar o arquivo dirio pela chave (nro da conta) Processar o livro-razo e o dirio co-sequencialmente (processamos as duas listas sequencialmente em paralelo).
26
Exemplo
Tarefas a serem realizadas:
Atualizar o arquivo livro-razo com o saldo correto para cada conta do ms corrente. Produzir uma listagem como no exemplo (lista as contas com seu saldo atual, e tambm as respectivas transaes do dirio daquele ms).
27
Exemplo
Do ponto de vista das contas do livro-razo: Merging (at mesmo as contas que no match vo para a listagem existem contas no livro sem entrada no dirio) Do ponto de vista das contas do dirio: Matching (contas que no match constituem um erro existem contas no dirio no listadas no livro)
O mtodo de lanamento uma combinao de merging e matching.
28
Exemplo
O Algoritmo:
Item(1) = sempre armazena o reg corrente do arquivo mestre Item(2) = sempre armazena o reg corrente do arquivo transaes - Leia o primeiro registro do arq mestre - Imprima a linha ttulo para a primeira conta - Leia o primeiro registro do arquivo transaes - Enquanto (existirem reg no mestre OU reg no transaes) faa { Se item(1) < item(2) ento { Encerre este registro do mestre - Imprima o balano da conta, atualiza o reg mestre - Leia o prximo registro do arq mestre - Se leitura com sucesso, ento imprima a linha ttulo para a nova conta }
29
Exemplo
O Algoritmo:
Se item(1) = item(2) ento { Transao match o mestre - Adiciona o valor da transao no balano da conta para o novo ms - Imprima a descrio da transao - Leia o prximo reg de transao } Se item(1) > item(2) ento { Transao sem registro no mestre - Imprima uma msg de erro - Leia o prximo reg de transao } }
30
Prxima Aula...
Apresentar o algoritmo K-way merge (intercalao mltipla). Apresentar o heapsort como uma abordagem para sorting em RAM Mostrar como merging (intercalao) fornece a base para ordenao de arquivos grandes.