A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Prof. Frederico Brito Fernandes Tabelas Hash CONTEÚDO (1) Auto-avaliação (2) Tabelas Hash (3) Tipos de funções hash (4) Colisão (5)

Apresentações semelhantes


Apresentação em tema: "Prof. Frederico Brito Fernandes Tabelas Hash CONTEÚDO (1) Auto-avaliação (2) Tabelas Hash (3) Tipos de funções hash (4) Colisão (5)"— Transcrição da apresentação:

1 Prof. Frederico Brito Fernandes Tabelas Hash CONTEÚDO (1) Auto-avaliação (2) Tabelas Hash (3) Tipos de funções hash (4) Colisão (5) Algoritmo de Cichelli (6) Conclusões

2 Frederico Brito Fernandes 2 Estrutura, Pesquisa e Ordenação de Dados Ordenação/Classificação Antes de prosseguir: –Considerando o vetor de inteiros a seguir, execute os algoritmos vistos na aula passada (quickSort e mergeSort), e escreva as alterações realizadas nesse vetor, em cada iteração realizada (1) Auto-avaliação vetor iteração ª 2ª 3ª 4ª 5ª 6ª...

3 Frederico Brito Fernandes 3 Estrutura, Pesquisa e Ordenação de Dados Tabelas de dispersão/espalhamento (Hash Tables) Motivação: –Desejamos armazenar os dados referentes aos clientes de uma loja. –Cada cliente é individualmente identificado pelo seu nº de CPF (o CPF é a chave de busca). –Podemos então usar o nº de CPF como chave de busca de um cliente cadastrado no sistema. (2) Hash

4 Frederico Brito Fernandes 4 Estrutura, Pesquisa e Ordenação de Dados Exemplo de aplicação Projetamos a tabela hash para que ela armazene entrada na forma (CPF, Nome), onde o CPF é um inteiro de 11 dígitos positivos Nossa tabela hash usa um array de tamanho N = 100 e a função hash é h(k) = os últimos dois dígitos de k, onde k é chave de busca, i.e., o CPF Como seria o cálculo realizado pela função hash? … Maria José João Ana (2) Hash

5 Frederico Brito Fernandes 5 Estrutura, Pesquisa e Ordenação de Dados Exemplo de aplicação Uma função hash h mapeia chaves de um dado tipo para inteiros em um intervalo fixo de [0, N - 1], onde N é o tamanho da tabela Exemplo: h(k) = k mod N é a função hash para chaves inteiras O inteiro retornado pela função h(k) é chamado de valor hash da chave k … Maria José João Ana (2) Hash

6 Frederico Brito Fernandes 6 Estrutura, Pesquisa e Ordenação de Dados Definições Uma tabela hash para uma chave de um dado tipo consiste de –Uma função hash h –Um Array (chamado de tabela) de tamanho N O objetivo é armazenar um registro/objeto/estrutura que possua chave de busca k na posição i = h(k) do array E dispersar as chaves na tabela de forma aparentemente aleatória (2) Hash

7 Frederico Brito Fernandes 7 Estrutura, Pesquisa e Ordenação de Dados Não é apenas um método de pesquisa, mas também um método de organização física de tabelas; o armazenamento de cada entrada da tabela é associado a um endereço calculado pela aplicação de uma função a chave de entrada; a eficiência da pesquisa neste tipo de organização depende fundamentalmente da função de cálculo de endereço; (2) Hash Definições

8 Frederico Brito Fernandes 8 Estrutura, Pesquisa e Ordenação de Dados Divisão Divisão – a função de hashing deve garantir que o nº por ela retornado seja um índice válido para uma entrada da tabela H(c) = C mod 5 –Exemplo com 100 chaves para 5 entradas (3) Tipos de funções hash

9 Frederico Brito Fernandes 9 Estrutura, Pesquisa e Ordenação de Dados Enlaçamento – a chave é dividida em diversas partes. As partes são combinadas ( somadas por exemplo) para gerar o endereço alvo Ex.: CPF= –H(cpf) = = 274 (total de endereços = 5 x 99 = = 504 –H(cpf) = = 1390 H(cpf) = cpf mod 1000 Enlaçamento (3) Tipos de funções hash

10 Frederico Brito Fernandes 10 Estrutura, Pesquisa e Ordenação de Dados Função meio-quadrado – a chave é elevada ao quadrado e parte dela é usada como endereço (os bits do centro) H(16) = = = 16 H(12) = = = entradas – 10 bits Meio Quadrado (3) Tipos de funções hash

11 Frederico Brito Fernandes 11 Estrutura, Pesquisa e Ordenação de Dados Extração – apenas uma parte da chave é usada para gerar o endereço Ex.: matrícula: período área ano –H(mat) = 0256 Extração (3) Tipos de funções hash

12 Frederico Brito Fernandes 12 Estrutura, Pesquisa e Ordenação de Dados Nem tudo é perfeito... Voltando ao exemplo da motivação inicial, o problema que surge é que provavelmente existirão dois ou mais clientes da loja que apresentarão os últimos dois dígitos no nº de CPF iguais. Dizemos que há uma colisão, pois registros/objetos/estruturas diferentes são mapeados para a mesma posição na tabela. Vale salientar que não há como eliminar completamente a ocorrência de colisões em tabelas hash. (4) Colisão

13 Frederico Brito Fernandes 13 Estrutura, Pesquisa e Ordenação de Dados Tratamento de colisão Devemos minimizar as colisões e usar um método que, mesmo com colisões, saibamos identificar cada elemento da tabela individualmente. Vale lembrar que uma tabela de dispersão nunca terá todos os elementos preenchidos Uma ocupação acima de 75% eleva o número de colisões, descaracterizando a idéia central desta estrutura de dados Portanto, podemos garantir que sempre existirá uma posição livre na tabela (4) Colisão

14 Frederico Brito Fernandes 14 Estrutura, Pesquisa e Ordenação de Dados Tratamento de colisão Encadeamento Separado: cada célula na tabela aponta para uma lista encadeada de registros/objetos/estruturas Encadeamento Separado é simples, mas requer memória adicional fora da tabela Ana Zé Bia (4) Colisão

15 Frederico Brito Fernandes 15 Estrutura, Pesquisa e Ordenação de Dados Tratamento de colisão Sondagem Linear: cada célula na tabela possui um ponteiro para o registro/objeto/estrutura que representa a informação armazenada na tabela de dispersão Procuramos o próximo índice livre da tabela (usando incremento circular) para armazenar o novo elemento. Os índices da tabela que não têm elementos associados são preenchidos com o valor NULL. (4) Colisão

16 Frederico Brito Fernandes 16 Estrutura, Pesquisa e Ordenação de Dados Sondagem Linear O item que está colidindo é colocado em uma célula diferente da tabela A sondagem linear lida com colisões colocando o item que colidiu na próxima célula disponível (circularmente) Exemplo: –N = 13 –H(k) = k mod N –Insira as chaves 18, 41, 22, 44, 59, 32, 31, 73, nesta ordem –Na colisão, h(k)=(h(k) +1) mod N (4) Colisão

17 Frederico Brito Fernandes 17 Estrutura, Pesquisa e Ordenação de Dados Busca com Sondagem Linear get(k) –Sondamos posições consecutivas até que Um item com chave k é encontrado, ou Uma célula vazia é encontrada, ou N células foram sondadas sem sucesso –Cada índice da tabela que tem um elemento associados é preenchido com o endereço do nó que contém o elemento Algorithm get(k) i k mod N p 0 do c A[i] if c return null else if c->key k return c->element else i (i 1) mod N p p 1 while p ! N return null (4) Colisão

18 Frederico Brito Fernandes 18 Estrutura, Pesquisa e Ordenação de Dados Atualizações com Sondagem Linear Para lidar com deleções, nós usamos ponteiros para null remove(k) –Buscamos um item com chave k –Se este item for encontrado, substitua o ponteiro para o nó que continha o item por null e retorne o item –Caso contrário, retorne null Inserções ou atualizações put(k, object/struct/record) –Iniciamos na célula i = k mod N –Sondamos células consecutivas até que Uma célula i encontrada esteja vazia (null) Amazenamos o item (object/struct/record) na célula Retorne true –Se N células foram sondadas sem sucesso então retorne false (4) Colisão

19 Frederico Brito Fernandes 19 Estrutura, Pesquisa e Ordenação de Dados Função hash perfeita Desenvolvido por Richard J. Cichelli para criação de funções hash perfeitas considerando um pequeno número de palavras: h(palavra) = ( comprimento(palavra) + g(primeiraLetra(palavra)) + g(ultimaLetra(palavra)) ) mod N onde: a função g() deverá ser encontrada de forma exaustiva (5) Cichelli

20 Frederico Brito Fernandes 20 Estrutura, Pesquisa e Ordenação de Dados Função hash perfeita O algoritmo possui 3 etapas: 1.Frequência: Cálculo de ocorrências da primeira e última letra; 2.Ordenação: As palavras são ordenadas de forma decrescente; 3.Busca: Tentativa de encontrar a função g() por meio de tentativas, colocando-se o valor de 0..MAX para cada letra; Os valores mapeados de h() são armazenados; Se para 0..MAX a colisão persiste, o algoritmo retrocede para a palavra anterior; Nem sempre a busca vai ser realizada com sucesso, ou seja, o algoritmo não garante que não haja colisões; (5) Cichelli

21 Frederico Brito Fernandes 21 Estrutura, Pesquisa e Ordenação de Dados Função hash perfeita Ex: N=9, MAX=4 Calliope, Clio, Erato, Euterpe, Melpomene, Polyhymnia, Terpsichore, Thalia e Urânia Frequência: (5) Cichelli 1 LETRANº de OCORRÊNCIAS A3 C2 E6 M1 O2 P1 T2 U1

22 Frederico Brito Fernandes 22 Estrutura, Pesquisa e Ordenação de Dados Função hash perfeita Ex: N=9, MAX=4 Calliope, Clio, Erato, Euterpe, Melpomene, Polyhymnia, Terpsichore, Thalia e Urânia Ordenação: PALAVRAPrimeira + Última Calliope2+6=8 Clio2+2=4 Erato6+2=8 Euterpe6+6=12 Melpomene1+6=7 Polyhymnia1+3=4 Terpsichore2+6=8 Thalia2+3=5 Urânia1+3=4 (5) Cichelli 2 DECRESCENTE Euterpe Calliope Erato Terpsichore Melpomene Thalia Clio Polyhymnia Urânia

23 Frederico Brito Fernandes 23 Estrutura, Pesquisa e Ordenação de Dados Função hash perfeita Busca: (5) Cichelli 3 PALAVRAg()h()h() reservados EuterpeE=07[7] CalliopeC=08[7, 8] EratoO=05[5, 7, 8] TerpsichoreT=02[2, 5, 7, 8] MelpomeneM=00[0, 2, 5, 7, 8] ThaliaA=06[0, 2, 5, 6, 7, 8] Clio4[0, 2, 4, 5, 6, 7, 8] PolyhymniaP=01[0, 1, 2, 4, 5, 6, 7, 8] UrâniaU=06 (*) COLISÃO: (1)Tentar U de 1..4; (2)Permanecendo, retroceder para palavra anterior

24 Frederico Brito Fernandes 24 Estrutura, Pesquisa e Ordenação de Dados Função hash perfeita Busca: (5) Cichelli 3 PALAVRAg()h()h() reservados PolyhymniaP=01[0, 1, 2, 4, 5, 6, 7, 8] UrâniaU=06 (*) U=17 (*) U=28 (*) U=30 (*) U=41 (*) PolyhymniaP=12 (*) P=23[0, 2, 3, 4, 5, 6, 7, 8] UrâniaU=06 (*) U=17 (*) U=28 (*) U=30 (*) U=41[0, 1, 2, 3, 4, 5, 6, 7, 8] continuação

25 Frederico Brito Fernandes 25 Estrutura, Pesquisa e Ordenação de Dados Eficiência da busca O pior caso ocorre quando todas as chaves inseridas colidirem Neste caso, buscas, inserções e remoções tem tempo execução O(n) Buscas, inserções e remoções em uma tabela hash bem projetada tem tempo de execução constante, i.e., O(1) Aplicações práticas: –Bancos de dados pequenos –compiladores –Caches de browser (navegadores) (6) Conclusões


Carregar ppt "Prof. Frederico Brito Fernandes Tabelas Hash CONTEÚDO (1) Auto-avaliação (2) Tabelas Hash (3) Tipos de funções hash (4) Colisão (5)"

Apresentações semelhantes


Anúncios Google