Algoritmos e Estruturas de Dados II Profa. Debora Medeiros Ordeação e Busca em Arquivos Idexação de Arquivos I: Ídices Simples Ordeação e busca em arquivos É relativamete fácil buscar elemetos em cojutos ordeados Adaptado dos Origiais de: Ricardo Campello Thiago Pardo Leadro C. Citra Maria Cristia F. de Oliveira A ordeação pode ajudar a dimiuir o úmero de acessos a disco 2 Busca em arquivos Já vimos busca seqüecial O() Muito ruim para acesso a disco! Busca biária Dificuldade:? E a busca biária? Modo de fucioameto? Complexidade de tempo? 3 4 Busca biária Dificuldade: ordear os dados Necessário para a busca biária Busca biária Dificuldade: ordear os dados Necessário para a busca biária Alterativa? Alterativa: ordear os dados em RAM Aida é ecessário: ler todo o arquivo e ter memória itera dispoível 5 6
Busca biária Registros de tamaho fixo Requer mais do que 1 ou 2 acessos Por exemplo, em um arquivo com 1.000 registros, são ecessários aproximadamete 10 acessos em média aida é ruim! Busca biária Mater um arquivo ordeado é muito caro Reordeação sempre que houver uma adição Lista de registros ovos Merge Ídices, hashig 7 8 Busca biária Mater um arquivo ordeado é muito caro Reordeação sempre que houver uma adição Lista de registros ovos Merge Ídices, hashig Estruturas de dados que permitam rápida reorgaização do arquivo Estruturas de árvore Árvores-B Ordeação Alterativa para carregar registros a RAM e ordeá-los? Tem como fazer melhor? O que é ecessário para ordear? 9 10 Ordeação Alterativa para carregar registros a RAM e ordeá-los? Carregar somete as chaves para ordeação Pois elas são esseciais para a ordeação, ão o registro todo Possibilidade de ordear arquivos maiores. Keysortig Keysortig Método 1. Cria-se a memória itera um vetor, em que cada posição tem uma chave do arquivo e um poteiro para o respectivo registro o arquivo (RRN ou byte iicial) 2. Ordea-se o vetor a memória itera 3. Cria-se um ovo arquivo com os registros a ordem em que aparecem o vetor ordeado a memória pricipal 11 13
Keysortig Exemplo Carregado dados a RAM Keysortig Exemplo Ordeado dados em RAM 14 15 Keysortig Iicialmete, é ecessário ler as chaves de todos os registros o arquivo Depois, para se criar o ovo arquivo, devem-se fazer vários seeks o arquivo para cada posição idicada o vetor ordeado Mais uma leitura completa do arquivo Não é uma leitura seqüecial Altera-se leitura o arquivo atigo e escrita o arquivo ovo 16 Keysortig Questões Por que criar um ovo arquivo? Não vale a pea usar o vetor ordeado como um ídice? Nesse caso, em um outro arquivo 17 Questão delicada O que fazer com os espaços vazios origiados de registros elimiados? Pied records Referêcia física Não pode ser movido Dificulta ordeação Utilização de ídices Ídice Mecaismo para localizar iformações via chave mapeameto chave localização da iformação por exemplo, ídice de um livro No caso de arquivos: permite localizar registros rapidamete evita ter que reorgaizar o arquivo de dados coforme este for modificado faça uma aalogia com um texto... 18 19
Arquivo de Ídice Arquivo de Ídice Um Arquivo de Ídice: Impõe ordem a um arquivo de dados sem precisar rearrajar o arquivo em si Permite acesso a registros via chave sem precisar varrer o arquivo de dados Estrutura de dados liear Permite várias visões diferetes de um mesmo arquivo de dados Estudaremos iicialmete arquivos com Ídices Simples: acesso por múltiplas chaves lista de pares (chave, localização) Posteriormete o curso veremos ídices com EDs mais sofisticadas Por exemplo, árvores 20 21 Arquivo de Ídice Arquivo de Ídice Exemplo Prático (Arquivo de Músicas) Registros de tamaho variável com: ID Number: Número de idetificação Title: Título Composer: Compositor(es) Artist: Artista(s) Label: Rótulo (código da gravadora) Chave primária: Combiação de Label e ID Number 22 23 Arquivo de Ídice Arquivo de Ídice Cada par (chave, localização) é um registro implemetação eficiete usa registros de tamaho fixo chave e localização (byte offset) como campos de tamaho fixo pode evetualmete coter outros campos Em geral, matido ordeado Meor e mais simples que o arquivo de dados origial 2 24 p. ex. tamaho do registro o arquivo de dados com registros de tamaho fixo, permite busca biária (BB) muitas vezes cabe todo em memória primária! 25
Arquivo de Ídice O Arquivo de Dados, em cotraste... em geral, muito maior que o arquivo de ídices em geral, possui registros de tamaho variável em geral, orgaizado segudo a ordem de etrada dos registros etry sequeced file Arquivos de Ídice Moderados A mauteção e busca de registros o arquivo de dados será muito mais eficiete se o arquivo de ídice puder ser carregado e maipulado em RAM Isso é possível em muitos casos, quado o arquivo de ídice possui tamaho moderado 26 27 Arquivos de Ídice Moderados Exemplo: Arquivo de dados com 10 6 registros de ~1Kb em média deve ser idexado até byte offset ~ 10 6 1000 = 1 Bilhão 4 bytes são mais que suficietes para represetar esse offset Arquivo de ídice com registros de 24 bytes 4 bytes para o byte offset + 20 bytes para a chave Para arquivos de ídice que cabem em RAM: Carrega-se todo o ídice em um vetor Quais? CPF, por exemplo, requer apeas 11 bytes a maior represetação Com 10 6 registros, arquivo de ídice ocupa 24 10 6 = 24Mb 28 29 Para arquivos de ídice que cabem em RAM: Carrega-se todo o ídice em um vetor Busca Depois de carregado o ídice, qualquer registro é localizado e recuperado em RAM com O(1) acessos exteros qq. cosulta será O(1), ao preço fixo dos acessos para ler todo o ídice Em RAM, localização da chave o ídice é muito rápida Se ídice ão estiver ordeado, busca é seqüecial Mas ormalmete matém-se o ídice ordeado, para permitir BB Para arquivos de ídice que cabem em RAM: Carrega-se todo o ídice em um vetor Iserção ovo registro é iserido o fial do arquivo de dados ou segudo uma política do tipo first-fit ou worst-fit um registro associado é também iserido o ídice cotém a chave e o byte offset do ovo registro o arquivo de dados se ídice está em vetor ordeado, iserção demada deslocametos mas em RAM, isso ão demada qualquer acesso 30 31
Para arquivos de ídice que cabem em RAM: Carrega-se todo o ídice em um vetor Remoção registro é removido do arquivo de dados segudo alguma política de marcação de registros removidos (p. ex. first-fit) Para arquivos de ídice que cabem em RAM: Carrega-se todo o ídice em um vetor Atualização o registro associado deve também ser removido do ídice deslocametos ou marcação da célula correspodete do vetor ão demada qualquer acesso 32 33 Para arquivos de ídice que cabem em RAM: Carrega-se todo o ídice em um vetor Atualização Altera-se o registro o arquivo de dados Se atualização mudou o valor da chave (remoção + iserção): altera-se o registro o vetor de ídices em RAM chave e, evetualmete, byte offset (porquê???) reordea-se o vetor de ídices Se atualização ão mudou o valor da chave: se tamaho do registro ão aumeta, ada muda o ídice caso cotrário, muda-se apeas o byte offset o ídice 34 Para arquivos de ídice que cabem em RAM: Ao fial de uma seção de operações deve-se atualizar o arquivo de ídice o disco caso sua cópia em memória teha sido alterada É imperativo que o programa se proteja cotra ídices desatualizados queda de eergia crashs do sistema (software ou do hardware) Idéias? 35 Preveção de Ídices Desatualizados Bibliografia Deve haver um mecaismo que permita saber se o ídice está atualizado em relação ao arquivo de dados Possibilidade: Um flag de status é setado o arquivo ídice matido em disco assim que a sua cópia a memória é alterada Esse flag pode ser matido o registro cabeçalho do arquivo ídice, e atualizado sempre que o ídice é reescrito o disco Se um programa detecta que o ídice está desatualizado, uma fução é ativada que recostrói o ídice a partir do arquivo de dados M. J. Folk ad B. Zoellick, File Structures: A Coceptual Toolkit, Addiso Wesley, 1987. 36 41