ARQUIVOS INDEXADOS POR CHAVES SECUNDÁRIAS 1 CONCEITO Na maioria das organizações de arquivos, dada uma chave primária, recupera-se um registro. No processamento com chaves múltiplas, procura-se recuperar todos os registros, que possuam uma particular combinação de valores de atributos. Podem ocorrer vários registros com o mesmo valor de atributo (chave secundária). Um índice secundário indica uma lista de registros que possuem um dado valor de chave secundária. Estes índices permitem a consulta combinada utilizando interseção e união de conjuntos de listas. 2 CONCEITO (cont) Índices secundários permitem rápida recuperação de registros com certo valor de atributo. Contudo, índices ocupam espaços e exigem grande esforço de atualização. Deve-se estudar, caso a caso, a conveniência de adoção de índices secundários. 3 Arquivos com Listas Considere-se a associação de um ponteiro a cada chave secundária indexada. O ponteiro indica o próximo registro com o mesmo valor de chave secundária. O arquivo é "atravessado" por um grande número de listas, teias ou costuras. 4 Arquivos com Listas (cont.) O índice para um atributo contém uma entrada para cada valor desse atributo que ocorre no arquivo. Cada entrada do índice funciona como cabeça da lista, apontando um registro com esse valor de atributo 5 Composição de Índices Secundários Índice Secundário Cabeçalho do Índice Listas do Índice 6 Índice Secundário Cabeçalho de Índice Secundário Cabeçalho do Índice Atributos do cabeçalho de Índice Secundário Listas do Valor do atributo chave secundária Índice Comprimento da lista com esse valor de chave secundária Endereço do primeiro registro da lista com esse valor de chave secundária Endereço do último registro da lista com esse valor de chave secundária 7 Cabeçalho de Índice Secundário Registro Departamento 0 1 2 3 Caixa de nós Administrativo Técnico Comercial Comprimento Primeiro Último da lista endereço endereço 9 11 7 31 4 5 6 31 29 30 28 8 Cabeçalho de Índice Secundário Registro 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Departamento Caixa de nós Motorista Programador Secretária Escriturário Diretor Contador Almoxarife Operador Médico Vendedora Engenheiro Desenhista Gerente Publicitário Contínuo Analista Comprimento Primeiro Último da lista endereço endereço 1 1 2 2 2 2 1 1 1 2 3 1 3 2 1 2 44 35 37 40 29 24 20 17 36 34 42 26 23 31 38 22 18 44 35 37 41 30 25 21 17 36 34 43 28 23 33 39 22 19 9 Índice Secundário Listas de Índice Secundário Cabeçalho do Índice Composição dos endereços Listas do Bucket (obrigatório) Índice Slot (desejável) Arquivo (necessário caso o arquivo principal tenha trasbordamento em arquivo separado) 10 Listas de Índice Secundário (cont.) Registro Arquivo Endereço Slot Nome 4 5 6 7 8 1 1 1 1 1 6 0 6 2 5 1 1 2 1 1 Ademar Afonso Iara Edmundo Cristiano Departamento Próx. Anter. Administrativo 7 Técnico 9 Comercial 14 Administrativo 8 Administrativo 10 1 2 3 4 7 11 Listas de Índice Secundário (cont.) Registro 17 18 19 20 21 Arquivo 1 1 1 1 1 Endereço 6 0 6 2 5 Slot Nome 1 1 2 1 1 Ademar Afonso Iara Edmundo Cristiano Profissão Motorista Programador Secretaria Escriturário Diretor Próx. 1 2 34 32 22 Anter. 1 2 3 4 5 12 Exemplo Um arquivo de produtos de "software" contendo os atributos fornecedor, nome do produto, tipo, plataforma de utilização cuja chave primária é nome do produto, deve ser indexado pela chave secundária fornecedor. Solicitase exibir a configuração do arquivo e do respectivo índice. 13 Índice Secundário Exemplo (cont.) Cabeçalho do Índice Índice de fornecedor Microsoft 1 Oracle 2 Novell 4 IBM 5 Lotus 6 Borland 13 Corel 16 Apple 17 Listas do Índice 14 Exemplo (cont.) Arquivo com índices (parte) Registro Fornecedor número Próximo Nome Tipo fornecedor Plataforma original 1 Novell 10 UNIX SO Aberta 2 Microsoft 4 DOS SO PC 3 Oracle 0 Oracle SGBD Aberta 4 Microsoft 7 Foxpro SGBD PC 5 IBM 8 Lan Server LAN PC 6 Lotus 12 Lotus 1-2-3 Planilha eletronica PC 7 Microsoft 9 Word Editor de texto PC 15 Tipos de Arquivos com Índices Secundários Arquivos Multilistas Arquivos Invertidos 16 Arquivos Multilistas 17 Arquivos Multilista Multilistas Nos arquivos com índice secundário a estrutura de índices possui uma entrada para o índice de uma lista no arquivo principal Pode-se considerar uma organização na qual a estrutura de índices contenha uma entrada para cada í-ésimo registro da lista com o mesmo valor de atributo. Diz-se que esta organização é uma organização multilista de tamanho controlado, i, de lista. 18 Arquivos Multilista (cont.) Os arquivos nos quais i = infinito são chamados simplesmente de "multilistas". Arquivos para os quais i = 1 são chamados invertidos. Os arquivos multilistas apresentam como vantagem a extrema simplicidade da estrutura de índices e como desvantagem o processamento lento e a inadequação para a aceitação de consultas complexas. 19 Arquivos Multilista Arquivo Principal Arquivo de índices Cabeçalho do Índice Listas do Índice 20 Listas de Índice Secundário Atributos do registro de Listas de Índice Secundário para Arquivos Multilista Endereço do próximo registro da lista com esse valor de chave secundária (no arquivo principal) Endereço do registro anterior da lista com esse valor de chave secundária (no arquivo principal) 21 Geração de Arquivo Multilista Arquivos multilistas são criados a partir de arquivos seqüenciais em um procedimento de seis passos O algoritmo a ser mostrado é creditado a Lefkowitz e utiliza a seguinte notação : ED = endereço de disco. Numeração dos registros em relação ao início do arquivo CP = chave primária dos registros do arquivo. CA = chave de acesso. Atributo chave secundária que criou o multilista. CL = comprimento de lista. Número de registros com o mesmo valor de chave de acesso. EC = endereço de cabeça. ED do primeiro registro com um dado valor de chave de acesso. INC = itens não chave. Atributos de registro que não influem no processamento de multilista. P = ponteiro para o sucessor na multilista da respectiva chave de acesso 22 Geração de Arquivo Multilista (cont.) Na hipótese de ocorrência de n atributos para os quais se quer multilistas são criados 4*n+1 arquivos temporários de trabalho, n arquivos de índices e um arquivo de saída. A composição de campos do arquivo original é a seguinte, lembrando que os campos sombreados são aqueles pelos quais o arquivo está classificado: 23 Geração de Arquivo Multilista (cont.) composição de campos do arquivo original CP CA1 CA2 .... INC1 INC2 ... composição de campos do arquivo multilista obtido CP CA1 P1 CA2 P2 .... .... INC1 INC2 ... 24 Geração de Arquivo Multilista (cont.) Haverá um arquivo de índices para cada chave de acesso. A composição de campos dos registros de cada um deles é a seguinte CAi ECi CLi 25 Desenvolvimento do algoritmo Arquivo original : Arquivo A1 ( 1 arquivo) CP CA1 CA2 .... INC1 INC2 26 1º passo : Atribuição dos endereços de disco Os itens não chave são descartados e cria-se um atributo endereço de disco que recebe numeração seqüencial. Arquivo resultante : A2 ( 1 arquivo) ED CP CA1 CA2 .... 27 2º passo : Geração das triplas ED, CP, CA O arquivo A2 é decomposto em tantos arquivos quantas são as chaves de acesso. Cada arquivo obtido conterá o endereço de disco, a chave primária e uma chave de acesso. Arquivos resultantes : A3 ( n arquivos) ED CP CAi 28 3º passo : Classificação por chave de acesso Cada um dos arquivos A3 é classificado pela chave de acesso correspondente. Arquivos resultantes : A4 ( n arquivos) ED CP CAi 29 4º passo : Geração dos índices e inserção dos ponteiros Cada um dos arquivos A4 é processado gerando dois arquivos : um arquivo de índices, A5, e um arquivo com endereço de disco, chave primária, chave de acesso e um ponteiro para o sucessor na multilista da respectiva chave de acesso. Arquivos resultantes : A5 ( n arquivos) CAi ECi CLi A6 ( n arquivos) ED CP CAi Pi 30 5º passo : Classificação por chave primária Cada um dos arquivos A6 é classificado pela chave primária. Arquivos resultantes : A7 ( n arquivos) ED CP CAi Pi 31 6º passo : Montagem do arquivo de saída O arquivo de entrada A1 e todos os arquivos A7 sofrem um processo de junção e descarta-se o endereço de disco. Os arquivos de índices são os arquivos A5 gerados no 4 0 passo do algoritmo. Arquivos resultantes : A8 ( 1 arquivo) CP CA1 P1 CA2 P2 .... .... INC1 INC2 ... 32 Exemplo de Multilista Considere-se um arquivo tal como o que se segue, e que se deseja utilizar como entrada para obtenção de um arquivo multilista com chaves de acesso ENDEREÇO e PERÍODO. Pede-se esboçar a aplicação do algoritmo de Lefkowitz, sendo NÚMERO a chave primária 33 Exemplo de Multilista A1 CP INC CA1 CA2 NÚMERO NOME ENDEREÇO PERÍODO 15 João MG 1 18 José SP 3 25 Maria RJ 3 37 Gérson MG 3 41 Sandra SP 1 43 Miguel MG 1 45 Ana SP 1 34 1° passo - Atribuição dos ED A2 CP ED CA1 CA2 NÚMERO *** ENDEREÇO PERÍODO 15 1 MG 1 18 2 SP 3 25 3 RJ 3 37 4 MG 3 41 5 SP 1 43 6 MG 1 45 7 SP 1 35 2° passo - Geração das triplas CA, ED, CP A3 (Atributo ENDEREÇO) CA1 ED CP ENDEREÇO *** NÚMERO MG 1 15 SP 2 18 RJ 3 25 MG 4 37 SP 5 41 MG 6 43 SP 7 45 36 2° passo - Geração das triplas CA, ED, CP (cont.) A3 (Atributo PERÍODO) CA2 ED CP PERÍODO *** NÚMERO 1 1 15 3 2 18 3 3 25 3 4 37 1 5 41 1 6 43 1 7 45 37 3° passo - Classificação pela chave de acesso A4 (Atributo ENDEREÇO) CA1 ED CP ENDEREÇO *** NÚMERO MG 1 15 MG 4 37 MG 6 43 RJ 3 25 SP 2 18 SP 5 41 SP 7 45 38 3° passo - Classificação pela chave de acesso (cont.) A4 (Atributo PERÍODO) CA2 ED PERÍODO CP NÚMERO 1 1 15 1 5 41 1 6 43 1 7 45 3 2 18 3 3 25 3 4 37 39 4° passo - Geração dos índices e dos arquivos A5 (Atributo ENDEREÇO) CA1 EC CL ENDEREÇO *** *** MG 1 3 RJ 3 1 SP 2 3 40 4° passo - Geração dos índices e dos arquivos (cont. índices) A5 (Atributo PERÍODO) CA2 EC CL PERÍODO *** *** 1 1 4 3 2 3 41 4° passo - Geração dos índices e dos arquivos (cont. arquivos) A6 (Atributo ENDEREÇO) CA1 ED CP P1 ENDEREÇO *** NÚMERO *** MG 1 15 4 MG 4 37 6 MG 6 43 0 RJ 3 25 0 SP 2 18 5 SP 5 41 7 SP 7 45 0 42 4° passo - Geração dos índices e dos arquivos (cont. arquivos 2) A6 (Atributo PERÍODO) CA2 ED CP P2 PERÍODO *** NÚMERO *** 1 1 15 5 1 5 41 6 1 6 43 7 1 7 45 0 3 2 18 3 3 3 25 4 3 4 37 0 43 5° passo - Classificação por chave primária A7 (Atributo ENDEREÇO) CA1 ED CP P1 ENDEREÇO *** NÚMERO *** MG 1 15 4 SP 2 18 5 RJ 3 25 0 MG 4 37 6 SP 5 41 7 MG 6 43 0 SP 7 45 0 44 5° passo - Classificação por chave primária (cont.) A7 (Atributo PERÍODO) CA2 ED CP P2 PERÍODO *** NÚMERO *** 1 1 15 5 3 2 18 3 3 3 25 4 3 4 37 0 1 5 41 6 1 6 43 7 1 7 45 0 45 6° passo - Junção de A1 e de todos os A7 A8 CP CA1 CA2 INC P1 P2 NÚMERO ENDEREÇO PERÍODO NOME (p/ ENDEREÇO) (p/ PERÍODO) 15 MG 1 João 4 5 18 SP 3 José 5 3 25 RJ 3 Maria 0 4 37 MG 3 Gérson 6 0 41 SP 1 Sandra 7 6 43 MG 1 Miguel 0 7 45 SP 1 Ana 0 0 46 Arquivos Invertidos 47 Listas de Índice Secundário Atributos do registro de Listas de Índice Secundário para Arquivos Invertidos Endereço do registro da lista com esse valor de chave secundária (no arquivo principal) Valor da chave primária do registro apontado no arquivo principal (par poder classificar a lista) Endereço do próximo registro da lista com esse valor de chave secundária (no arquivo de listas) Endereço do registro anterior da lista com esse valor de chave secundária (no arquivo de listas) 48 Arquivos Invertidos Arquivo Principal Arquivo de índices Cabeçalho do Índice Listas do Índice 49 Arquivos Multilista Arquivo Principal Arquivo de índices Cabeçalho do Índice Listas do Índice 50 Arquivos Invertidos Arquivo Principal Arquivo de índices Cabeçalho do Índice Listas do Índice 51 Arquivos invertidos Arquivos Invertidos A organização invertida é baseada na mudança de papéis entre registro e atributos. Pode-se considerar que o arquivo é uma função que, dado um endereço, retorna os atributos do registro contido naquele endereço. arquivo(endereço) (atributo,valor), (atributo,valor), (atributo,valor), ... Os arquivos de índice representam a inversa dessa função pois, dado um par <atributo, valor do atributo>, recupera-se uma lista de endereços de registros com o valor especificado do atributo, ou arquivo(atributo,valor) endereço, endereço, .... Um arquivo de índices que identifica cada registro com um dado valor de atributo é considerado um arquivo invertido pois funciona como a inversa da função "Arquivo Principal". A cada um dos valores de chave de acesso presente no arquivo é associada uma lista de identificação ou lista invertida. Na organização invertida, a cada valor de chave de acesso está associado não apenas um registro e sim um conjunto de registros que possui aquele valor de chave. 52 Inversões e Listas Invertidas O conjunto de listas invertidas associadas a um determinado atributo é chamado de inversão por aquele atributo. Um arquivo pode ter uma ou mais inversões. O número de listas invertidas em cada inversão é igual ao número de diferentes valores daquele atributo existente no arquivo. O arquivo de índices contém inversões, cada inversão contém diversas listas invertidas, cada lista invertida contém um "header" (que identifica o valor do atributo correspondente a esta lista e o comprimento da lista) e a lista dos endereços de registros que contém este valor de atributo 53 Grau de Inversão Chama-se grau de inversão de um arquivo a porcentagem de atributos indexados por inversão. Um arquivo com todos os atributos indexados tem 100% de grau de inversão. Os sistema de informação comerciais são sistemas de recuperação de referências (ou documentos).As referências são armazenadas junto com palavras chave indicadoras de seu conteúdo. Os usuários solicitam informações sob a forma de expressões "booleanas", do tipo : quais as referências existente sobre "tendinite" and ("teclado" or "terminal"). Praticamente todos esses sistemas utilizam arquivos invertidos. 54 Implementação das inversões As representações das listas invertidas são feitas pelos processos convencionais de representação de listas, ou seja, por contigüidade, por encadeamento e por mapa de bits. 55 Implementação das inversões por contigüidade 56 Implementação das inversões por encadeamento 57 Representação por Mapa de Bits Mapas de bits são arrays bidimensionais nos quais cada linha corresponde a um registro do arquivo principal e cada coluna corresponde a um dos valores do atributo que ocorrem no arquivo principal. Cada mapa de bits corresponde a um atributo, cada bit 1 indica que o registro correspondente pertence à lista de registro com o valor de atributo correspondente à coluna onde se encontra o bit 1. 58 Representação por Mapa de Bits 59 Mais uma maneira de implementar listas : Grafos Pode-se economizar espaço em estruturas encadeadas de índices combinados os elementos da lista que apontam para um mesmo registro do arquivo principal. Cada registro do arquivo principal é representado em uma inversão por um simples nó, que pode pertencer a tantas lista quantos são os atributos indexados, formando-se assim uma estrutura de grafo. Cada nó destes grafos conterá : - um ponteiro para o arquivo principal - para cada atributo indexado : um ponteiro para o nó proprietário da lista um ponteiro para o próximo nó com o mesmo valor de atributo 60 Mais uma maneira de implementar listas : Grafos 61 Mais uma maneira de implementar listas : Grafos Para exemplificar um nó genérico de um grafo que represente listas podese utilizar o exemplo de produtos de "software" do item 7.2. Do arquivo do exemplo são exibidos os nós que correspondem aos registros 1, 3 e 4, como se vê na figura 7.4. 62 Exemplo de Inversões Exemplo de Inversão de Arquivos O Arquivo de dados é exibido abaixo Pede-se apresentar as inversões pelos atributos Departamento e Profissão Registro Numero Nome 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 1000 1050 2400 1850 1440 3150 2000 1900 2430 2600 1075 1400 2200 2700 1100 1800 3100 2500 1300 2450 1600 1480 2950 1970 1350 1950 1700 Ademar Afonso Iara Edmundo Cristiano Tatiana Gerson Ênio Ivan Miguel Angela Claudia Helena Ramon Antônio Edson Sônia Maria Carlos Luiz Diogo Darci Sandra Genaro César Flávio Éber Profissão Departamento Motorista Programador Secretária Escriturário Diretor Diretor Contador Almoxarife Operador Médico Vendedora Engenheiro Engenheiro Desenhista Gerente Escriturário Vendedora Secretária Publicitário Publicitário Contínuo Contador Analista Engenheiro Gerente Gerente Analista Administrativo Técnico Comercial Administrativo Administrativo Técnico Administrativo Administrativo Técnico Administrativo Comercial Técnico Técnico Técnico Técnico Comercial Comercial Técnico Comercial Comercial Administrativo Administrativo Técnico Técnico Comercial Administrativo Técnico Arquivo Endereço Slot 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 0 6 2 5 0 5 3 1 3 4 0 2 5 1 1 6 1 5 0 4 3 3 3 6 4 6 1 1 2 1 1 2 2 1 1 2 1 3 2 3 2 3 3 4 4 4 2 3 4 5 4 3 5 63 Inversão por Departamento usando encadeamento Exemplo de Inversão de Arquivos Inversão por Departamento Registro Arquivo Endereço Slot 0 1 2 3 9 11 7 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 0 6 2 5 0 5 3 1 3 4 0 2 5 1 1 6 1 5 0 4 3 3 3 6 4 6 1 1 2 1 1 2 2 1 1 2 1 3 2 3 2 3 3 4 4 4 2 3 4 5 4 3 5 Nome Ademar Afonso Iara Edmundo Cristiano Tatiana Gerson Ênio Ivan Miguel Angela Claudia Helena Ramon Antônio Edson Sônia Maria Carlos Luiz Diogo Darci Sandra Genaro César Flávio Éber Departamento Próx. Anter. Caixa de nós 31 Administrativo 4 Técnico 5 Comercial 6 31 29 30 28 Administrativo Técnico Comercial Administrativo Administrativo Técnico Administrativo Administrativo Técnico Administrativo Comercial Técnico Técnico Técnico Técnico Comercial Comercial Técnico Comercial Comercial Administrativo Administrativo Técnico Técnico Comercial Administrativo Técnico 1 2 3 4 7 5 8 10 9 11 6 12 15 16 17 14 19 18 20 22 13 24 21 26 23 25 27 7 9 14 8 10 12 11 13 15 24 19 16 17 18 21 20 22 26 23 28 25 29 27 30 3 1 2 64 Exemplo de Inversão de Arquivos Inversão por Profissão Registro Arquivo Endereço Slot Nome Inversão por Profissão usando encadeamento 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 1 2 2 2 2 1 1 1 2 3 1 3 2 1 2 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 0 6 2 5 0 5 3 1 3 4 0 2 5 1 1 6 1 5 0 4 1 1 2 1 1 2 2 1 1 2 1 3 2 3 2 3 3 4 4 4 2 Ademar Afonso Iara Edmundo Cristiano Tatiana Gerson Ênio Ivan Miguel Angela Claudia Helena Ramon Antônio Edson Sônia Maria Carlos Luiz Diogo Profissão Próx. Anter. Caixa de nós Motorista Programador Secretária Escriturário Diretor Contador Almoxarife Operador Médico Vendedora Engenheiro Desenhista Gerente Publicitário Contínuo Analista 44 35 37 40 29 24 20 17 36 34 42 26 23 31 38 22 18 44 35 37 41 30 25 21 17 36 34 43 28 23 33 39 22 19 Motorista Programador Secretaria Escriturário Diretor Diretor Contador Almoxarife Operador Médico Vendedora Engenheiro Engenheiro Desenhista Gerente Escriturário Vendedora Secretária Publicitário Publicitário Contínuo 1 2 34 32 22 5 38 7 8 9 33 29 40 12 41 4 10 3 36 14 15 1 2 3 4 5 21 6 7 8 9 10 11 28 12 13 20 27 19 14 35 15 65 Inversão por Profissão usando Mapas de Bits Exemplo de Inversão de Arquivos Secretária Escriturário Diretor Contador Almoxarife Operador Médico Vendedora Engenheiro Desenhista Gerente Publicitário Contínuo Analista Registro 1 1 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 Programador Motorista Inversão por Profissão usando mapas de bits 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 66 Inversão por Departamento usando Mapas de Bits Exemplo de Inversão de Arquivos Inversão por Departamento usando mapas Registro Administrativo Técnico Comercial 1 1 0 0 2 0 1 0 3 0 0 1 4 1 0 0 5 1 0 0 6 0 1 0 7 1 0 0 8 1 0 0 9 0 1 0 10 1 0 0 11 0 0 1 12 0 1 0 13 0 1 0 14 0 1 0 15 0 1 0 16 0 0 1 17 0 0 1 18 0 1 0 19 0 0 1 20 0 0 1 21 1 0 0 22 1 0 0 23 0 1 0 24 0 1 0 25 0 0 1 26 1 0 0 27 0 1 0 67 Algoritmo de implementação de Listas Invertidas O algoritmo do Livro mostra uma implementação de inversão de arquivos na qual se considera a inversão de um arquivo de acesso direto implementada por encadeamento, com as seguintes hipóteses: O arquivo de acesso direto possui área de transbordamento separada; O número de "buckets" na área primária do arquivo de acesso direto é igual a n_buckets; O número de "slots" de cada "bucket" na área primária é igual a n_slots; O tratamento de transbordamento é feito por encadeamento em área secundária; Os buckets da área secundária só possuem um "slot" cada; O registro a ser inserido na lista invertida está gravado no "slot" de posição slot_corrente do bucket de endereço bucket_corrente; O arquivo de inversões será implementado por listas duplamente encadeadas; O número de registros do arquivo de inversões é igual a n_regs_inversão; O número máximo previsto de distintos valores para a chave secundária é tamanho_header; O algoritmo de alocação de registros do arquivo de inversões utiliza preferencialmente registros reaproveitados de exclusões anteriores (mantidos em uma pilha). Não havendo possibilidade de utilização de registros reaproveitados, são alocados registros ainda não utilizados mantidos em uma fila. 68