Vous êtes sur la page 1sur 31

Organizao de Arquivos

Processamento Co-seqencial e Ordenao

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).

As listas de entrada so:


Ordenadas por chave. No possuem itens (registros) duplicados por chave. Processados paralelamente.

A lista de sada fica:


Ordenada por chave. Sem registros duplicados por chave.
4

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)

Unio/Intercalao (Merging) dos itens das listas.


A lista de sada formada por todos os itens das listas de entrada, sem duplicao de chave. Os itens so intercalados por ordem de chave.
5

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

Processamento Co-sequencial Interseo (Matching)


Suponha que desejamos obter as chaves que aparecem em duas listas. Podemos utilizar o seguinte algoritmo: 1. Se a chave da lista 1 menor que a chave da lista 2, lemos a seguinte chave da lista 1. 2. Se a chave da lista 1 maior que a chave da lista 2, lemos a seguinte chave da lista 2. 3. Se as chaves so iguais, colocamos na lista de sada e lemos a chave seguinte de ambas listas de entrada. 4. Repetimos os passos 1 a 3 at chegar no final de uma das listas.
7

Processamento Co-sequencial Interseo (Matching)

Processamento Co-sequencial Interseo (Matching)


Procedimento de leitura e verificao:
Program Interseo type Tchave = ... , Treg = record chave: Tchave, ... end; var reg1, reg2: Treg ; chave1, chave2: Tchave; Para quando encontra o fim da lista 1 ou da lista 2.

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. };

Processamento Co-sequencial Interseo (Matching)


Procedimento de iniciao:
{

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.

Valor_minimo uma constante. o menor valor que a chave poderia assumir.

10

Processamento Co-sequencial Interseo (Matching)


Procedimento de sincronizao dos arquivos:
while existe_registro do // Condio de parada. { if (reg1.chave < reg2.chave) then Leia_lista (arq1, reg1, chave1); // L prximo item da lista 1 else if (reg1.chave > reg2.chave) then Leia_lista (arq2, reg2, chave2); // L prximo item da lista 2 else { escreve (reg1, arqsada); // Grava o elemento comum s listas Leia_lista (arq1, reg1, chave1); Leia_lista (arq2, reg2, chave2); }; }; // Fim do programa Interseo.
11

}.

Processamento Co-sequencial Unio/Intercalao (Merging)

12

Processamento Co-sequencial Unio/Intercalao (Merging)


Program Intercalacao type Tchave = ... ; Treg = record chave: Tchave, ... end; var reg1, reg2: Treg ; chave1, chave2: Tchave;
Garante que o contedo restante da outra lista, ser jogado na lista de sada.

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

Processamento Co-sequencial Unio/Intercalao (Merging)


Procedimento de iniciao:
{

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.

Valor_minimo uma constante. o menor valor que a chave poderia assumir.

14

Processamento Co-sequencial Unio/Intercalao (Merging)


Procedimento de sincronizao dos arquivos:
while existe_registro do lista de sada, e l o { prximo item da lista 1. if (reg1.chave < reg2.chave) then { escreve (arqsaida, reg1) ; Leia_lista (arq1, reg1, chave1) } Grava item da lista 2 na lista de sada, else e l o prximo item da lista 2. if (reg2.chave < reg1.chave) then { escreve (arqsaida, reg2); Leia_lista (arq2, reg2, chave2) }; else Termina execuo { escreve (arqsada, reg1,); quando chegar ao Leia_lista (arq1, reg1, chave1); Leia_lista (arq2, reg2, chave2) fim das duas listas. }; }; }.
Itens iguais. Grava na lista de sada, e l o prximo item da lista 1 e lista 2. 15 Grava item da lista 1 na

Processamento Co-sequencial Unio/Intercalao (Merging)


VALORES CONSTANTES:
valor_mnimo
o menor valor que o campo de chave poderia assumir.

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

Processamento Co-sequencial Unio/Intercalao (Merging)


valor_minimo
O uso de tal constante permite:
executar Leia_lista sem cair na condio de erro:
if reg.chave <= chave then { print arquivo + arq + fora de ordem; pare };

onde
chave parmetro formal. O parmetro real (chave1 ou chave2) iniciado com valor_minimo.

17

Processamento Co-sequencial Unio/Intercalao (Merging)


valor_maximo O uso de tal constante permite: que seja atribudo o valor_mximo a regx.chave do arquivo x que findou. que o algoritmo intercalao leia e transfira os demais registros do arquivo arqy que no findou para o arquivo de sada, x y. if (reg1.chave < reg2.chave) then { escreve (arqsaida, reg1) Leia_lista (arq1, reg1, chave1) } else if (reg2.chave < reg1.chave) then { escreve (arqsaida, reg2); Leia_lista (arq2, reg2, chave2) ; }
18

Processamento Co-sequencial Unio/Intercalao (Merging)


Varivel acabou:
iniciada com false. Recebe true quando um dos arquivos chega ao fim.
A chave do registro desse arquivo fica com valor_mximo (regx.chave = valor_mximo)

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

Processamento Co-sequencial Unio/Intercalao (Merging)


Reduzindo o nmero de comparaes
Podemos escrever um algoritmo similar com menos comparaes sem usar a varivel valor_maximo. O critrio de parada do loop seria:
Quando atingir o final de umas das listas.

Neste caso precisaramos de uma finalizao


while not(eof(arq1)) { escreve (arqsaida, reg1); Leia_lista (arq1, reg1, chave1); } while not(eof(arq2)) { escreve (arqsaida, reg2); Leia_lista (arq2, reg2, chave2); }
20

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.

Vous aimerez peut-être aussi