200 likes | 285 Views
Hashing Extensível. o espaço de endereços disponíveis não é fixo. utilizado em hashing de arquivos dinâmicos (mudam de tamanho). ideia: combinar técnicas de hashing + árvore de busca de base ( trie ). Exemplo 1:. Trie: (able, abrahms, adams, anderson, andrews, baird). l. able. r. b.
E N D
Hashing Extensível • o espaço de endereços disponíveis não é fixo • utilizado em hashing de arquivos dinâmicos (mudam de tamanho) ideia: combinar técnicas de hashing + árvore de busca de base (trie)
Exemplo 1: Trie: (able, abrahms, adams, anderson, andrews, baird) l able r b abrahms d adams a anderson e n d b r andrews baird 26 letras do alfabeto, a-z máximo fator de subdivisão de um nó = 26 (base 26)
Exemplo: base 10 Trie: (1136, 1153, 1629, 3182, 7263, 7268, 7521) 3 1136 1 5 1153 1629 6 1 3 3182 7263 3 7 6 2 8 7268 5 5 7521
Hashing e tries • Trabalha-se com árvores de base 2 • As chaves nas folhas constituem buckets contendo chaves A 0 Parte do Bucket endereço 01 A 10 B 11 C B 1 0 1 C
Problema: Como representar uma trie de modo a se obter uma busca com complexidade constante O(1) ? Ideia : Considerar um vetor de endereços hashing, com cada elemento apontando para um bucket, e obtido a partir da definição de uma árvore binária completa dos respectivos endereços.
A 0 B 1 0 1 C árvore binária completa 0 A 0 1 B 1 0 1 C
0 A 0 1 B 1 0 1 C vetor de endereços apontador extra para eventual overflow de A 00 A 01 B 10 11 C 2 níveis na árvore binária vetor de tamanho 4
apontador extra para eventual overflow de A 00 A 01 B 10 11 C A 00 overflow de A D 01 B 10 11 C
Exemplo: 0 A 00 0 A 1 01 B 1 0 B 10 11 C C 1 Overflow do bucket B subdividir o ramo da árvore conduzindo ao bucket B; criar a árvore binária completa; definir o vetor de endereços
Subdivisão do ramo da árvore A 0 0 B 1 0 D 1 1 C
Criação da árvore binária completa 0 0 1 A 0 0 1 1 0 1 B 0 D 1 0 1 C 1 3 níveis na árvore binária vetor de tamanho 8
Definição do vetor de endereços 000 001 A 010 011 B 100 101 D 110 C 111
Busca por Casamento Parcial • evita definição de listas invertidas na consulta de registros por • chaves secundárias • baseia-se no conceito de códigos de assinaturas
Exemplo de registro Aluno: RA Nome Cidade CR Renda Familiar (RF) 17 21 1 16 22 26 27 32 bits s1 s2 s3 s4 assinaturas disjuntas (diferentes funções de hashing) • Os bits de cada campo dos registros terão valor 1 de acordo com as respectivas • funções de hashing
Exemplos de assinaturas: (para bits de 1 a 16) (para bits de 17 a 21)
(para bits de 22 a 26) (para bits de 27 a 32)
A busca Exemplo de consulta: RF = 3000,00 AND CR = 8 AND Cidade = Campinas Assinatura da consulta: 17 21 1 16 22 25 26 27 29 32 1 1 1 s1 s2 s3 s4 Extrair todos os registros cuja assinatura contém 1 na posição indicada pela assinatura de consulta; verificar os falsos positivos devido a oclusões da função de hashing Extrair registros que respondem positivamente à pergunta:
Árvores de Assinaturas • Combina as assinaturas de registros numa estrutura multínivel de • árvores, através de um OR de diferentes subconjuntos destas assinaturas • Otimiza o processo de busca secundária por assinaturas de registros
. . assinatura da consulta: 0 0 0 1 0 01 . OR OR 0 0 0 1 0 01 0 0 0 1 0 01 0 0 0 1 0 01 sub-árvore a ser verificada na consulta . . . assinaturas nível 1 (adicionadas aos registros originais) assinaturas nível 3 assinaturas nível 2