Aula sobre Tabela Hash

27,274 views

Published on

0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
27,274
On SlideShare
0
From Embeds
0
Number of Embeds
192
Actions
Shares
0
Downloads
621
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Aula sobre Tabela Hash

  1. 1. Estrutura de Dados TABELAS HASH
  2. 2. Roteiro• Contextualização• Conceitos Básicos• Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito• Colisões – Métodos de Tratamento de Colisões• Limitações e demais aplicações
  3. 3. Roteiro• Contextualização• Conceitos Básicos• Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito• Colisões – Métodos de Tratamento de Colisões• Limitações e demais aplicações
  4. 4. Contextualização• Dado um conjunto de pares (chave,valor) – determinar se uma chave está no conjunto e o valor associado – inserir um novo par no conjunto – remover um par do conjunto• Estruturas que podem ser usadas – Tabelas simples (vetores ou listas) – Árvores de busca – Tabelas de espalhamento (hash)
  5. 5. Contextualização• Os métodos de pesquisa vistos até agora buscam informações armazenadas com base na comparação de suas chaves.• Para obtermos algoritmos eficientes, armazenamos os elementos ordenados e tiramos proveito dessa ordenação.
  6. 6. Contextualização• Conclusão: os algoritmos mais eficientes de busca mostrados até o momento demandam esforço computacional O(n), quando usamos uma tabela hash, esta pode realizar tais operações em tempo esperado O(1).• Veremos agora, o método de pesquisa conhecido como hashing (tabela de dispersão, espalhamento, indexação, escrutínio ou método de cálculo de endereço). Na média dos casos, é possível encontrar a chave com apenas UMA OPERAÇÃO de LEITURA.
  7. 7. Contextualização• Em algumas aplicações, é necessário obter o valor com poucas comparações, logo, é preciso saber a posição em que o elemento se encontra, sem precisar varrer todas as chaves.• A estrutura com tal propriedade é chamada de tabela hash. 20 mod 8 = 4 45 mod 8 = 5 0 1 2 3 4 5 6 7 20 ? 64 11 20 7 45 ? 11 ? 11 mod 8 = 3
  8. 8. Contextualização• A utilização de hashing envolve – Computar a função de transformação – Tratar colisões.• Uma função hash (h) deve: – Mapear chaves em inteiros entre 0 e N-1, onde N é o tamanho da tabela. – Ser de computação simples – Gerar entradas para a tabela com igual probabilidade
  9. 9. Roteiro• Contextualização• Conceitos Básicos• Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito• Colisões – Métodos de Tratamento de Colisões• Limitações e demais aplicações’
  10. 10. Conceitos Básicos • Arranjos utilizam índices para armazenar as informações. • Arranjos não fornecem mecanismos para calcular o índice a partir de uma informação armazenada. A pesquisa não é O(1). 1 2 3 4 5 6Família José Maria Leila Artur Jolinda Gisela Alciene Família[1] = “José Maria” Família[3] = “Artur” Em qual posição está “Alciene” ? Família[2] = “Leila”
  11. 11. Conceitos Básicos• Ideal: Parte da informação poderia ser utilizada para recuperar diretamente a informação.  Que informação poderia ser utilizada !? Problema: Esta estratégia exigiria um arranjo muito grande e a maioria das posições seriam desperdiçadas.
  12. 12. Roteiro• Contextualização• Conceitos Básicos• Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito• Colisões – Métodos de Tratamento de Colisões• Limitações e demais aplicações’
  13. 13. Definição de Hash (1/3)• Hash é uma generalização da noção mais simples de um arranjo comum, sendo uma estrutura de dados do tipo dicionário.• Dicionários são estruturas especializadas em prover as operações de inserir, pesquisar e remover e que não admitem repetições.• A idéia central do Hash é utilizar uma função, aplicada sobre parte da informação (chave), para retornar o índice onde a informação deve ou deveria estar armazenada.
  14. 14. Definição de Hash (2/3)• Esta função que mapeia a chave para um índice de um arranjo é chamada de Função de Hashing.• A estrutura de dados Hash é comumente chamada de Tabela Hash.
  15. 15. Definição de Hash (3/3) 123.456.781-00 19 37 143.576.342-23 Função de 50 345.365.768-93 879.094.345-45 Hashing 85 999.999.999-99 20Tabela Hash 19 123.456.781-00; Fausto Silva; Av. Canal. Nº 45. 20 ... 37 143.576.342-23; Carla Perez; Rua Celso Oliva. Nº 27. ... 50 345.365.768-93; Gugu Liberato; Av. Atlântica. S/N. ... 85 879.094.345-45 ; Hebe Camargo; Rua B. Nº 100. ...
  16. 16. Tabela Hash• Em Computação a Tabela Hash é uma estrutura de dados especial, que armazena as informações desejadas associando chaves de pesquisa a estas informações.• Objetivo: a partir de uma chave, fazer uma busca rápida e obter o valor desejado.• A idéia central por trás da construção de uma Tabela Hash é identificar, na chave de busca, quais as partes que são significativas.
  17. 17. Ilustração de uma Tabela Hash chave dados 1 2 ? registro (chave k) X K registro n- 1 n Como o registro (com chave K) foi armazenado na posição X na Tabela Hash ao lado? Resp: Através de uma Função de Hashing.
  18. 18. Como representar Tabelas Hash?• Vetor: cada posição do vetor guarda uma informação. Se a função de hashing aplicada a um conjunto de elementos determinar as informações I1, I2, ..., In, então o vetor V[1... N] é usado para representar a tabela hash.• Vetor + Lista Encadeada: o vetor contém ponteiros para as listas que representam as informações.
  19. 19. Como representar Tabelas Hash?
  20. 20. Função de Hashing A Função de Hashing é a responsável por gerar um índice a partir de uma determinada chave. O ideal é que a função forneça índices únicos para o conjunto das chaves de entrada possíveis.
  21. 21. Função de Hashing Características desejáveis: eficiência e bom espalhamento. A função de Hashing é extremamente importante, pois ela é responsável por distribuir as informações pela Tabela Hash. A implementação da função de Hashing tem influência direta na eficiência das operações sobre o Hash.
  22. 22. Função de Hashing Método mais usado  Usa o resto da divisão por M  H(K)=K mod M  Onde K é um inteiro correspondente à chave. As chaves não numéricas devem ser transformadas em números. n é o número de caracteres da chave Chave[i] corresponde à representação ASCII do i-ésimo caracter da chave p[i] é um inteiro de um conjunto de pesos gerado randomicamente.
  23. 23. Função de Hashing Uma boa função hash (ou de hashing) deve apresentar duas propriedades básicas:  seu cálculo deve ser rápido;  deve gerar poucas colisões. Escolha de funções h apropriadas tentam minimizar a probabilidade de ocorrência de colisões.
  24. 24. Ilustração da Função de Hashing chave dados 1  Os valores da chave podem 2 ser numéricos, alfabéticos ou alfa-numéricos.registro (K) E = f (K) X K registro n-1 n  Executam a transformação do valor de uma chave em um endereço, pela aplicação de operações aritméticas e/ou lógicas f: C  E f: função de cálculo de endereço C: espaço de valores da chave (domínio de f) E: espaço de endereçamento (contradomínio de f)
  25. 25. Roteiro• Contextualização• Conceitos Básicos• Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito• Colisões – Métodos de Tratamento de Colisões• Limitações e demais aplicações
  26. 26. Hashing Perfeito• Característica: – Para quaisquer chaves x e y diferentes e pertencentes a A, a função utilizada fornece saídas diferentes;
  27. 27. Exemplo de Hashing Perfeito (6/6)• Supondo que a turma seja do 2º semestre de 2005 (código 052) e do curso de Sistemas de Informação (código 35). Qual seria a função de hashing perfeito !? int funcao_hash(int matricula) { int valor = matricula – 0523500; if((valor >= 0) & (valor <=99)) then return valor; else return -1; } Acesso: dada mat  tabAlunos[funcao_hash(mat)]
  28. 28. Roteiro• Contextualização• Conceitos Básicos• Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito• Colisões – Métodos de Tratamento de Colisões• Limitações e demais aplicações
  29. 29. Hashing Imperfeito• Características: – Existe chaves x e y diferentes e pertencentes a A, onde a função Hash utilizada fornece saídas iguais;
  30. 30. Exemplo de Hashing Imperfeito (1/2)• Suponha que queiramos armazenar as seguintes chaves: C, H, A, V, E e S em um vetor de P = 7 posições (0..6) conforme a seguinte função f(k) = k(código ASCII) % P.• Tabela ASCII: C (67); H (72); A (65); V (86); E (69) e S (83).
  31. 31. Exemplo de Hashing Imperfeito (2/2)
  32. 32. Considerações sobre Funções de Hashing (1/2)• Na prática funções de hashing perfeitas ou quase perfeitas: – são encontradas apenas onde a colisão não é tolerável (nas funções de hashing na criptografia); – Quando conhecemos previamente o conteúdo a ser armazenado na tabela.• Nas Tabelas Hash comuns a colisão é apenas indesejável, diminuindo o desempenho do sistema.
  33. 33. Considerações sobre Funções de Hashing (2/2)• Por causa das colisões, muitas Tabelas Hash são aliadas com algumas outras estruturas de dados para solucionar os problemas de colisão, são elas: – Listas Encadeadas; – Árvores Balanceadas e – dentro da própria tabela.
  34. 34. Roteiro• Contextualização• Conceitos Básicos• Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito• Colisões – Métodos de Tratamento de Colisões• Demais Aplicações
  35. 35. Colisões• Quando duas ou mais chaves geram o mesmo endereço da Tabela Hash, dizemos que houve uma colisão.• É comum ocorrer colisões.• Principais causas: – em geral o número N de chaves possíveis é muito maior que o número de entradas disponíveis na tabela. – não se pode garantir que as funções de hashing possuam um bom potencial de distribuição (espalhamento).
  36. 36. Tratamento de Colisões• Um bom método de resolução de colisões é essencial, não importando a qualidade da função de hashing.• Há diversas técnicas de resolução de colisão.• As técnicas mais comuns podem ser enquadradas em duas categorias: – Endereçamento Aberto (Rehash); – Encadeamento.
  37. 37. Encadeamento (Hashing aberto)Característica Principal: A informação é armazenada emestruturas encadeadas fora da Tabela Hash. Ou seja manternuma lista ligada as chaves que levam a um mesmo índice natabela de hashing. 0 KM-1 K4 1 K5 K6 2 K1 3 KM-4 KM K3M-2 K2M-1
  38. 38. Exemplo de Encadeamento• Suponha que queiramos armazenar os caracteres que compõem a palavra CHAVES em um vetor de P = 7 posições (0..6) conforme a seguinte função f(k) = k(código ASCII) % P. 0 1 2 H A V 3 4 C 5 6 E S
  39. 39. Encadeamento (Hashing aberto)• Operações
  40. 40. Endereçamento Aberto (Rehash) (ou Hashing Fechado)• Característica Principal: – A estratégia é utilizar o próprio espaço da tabela que ainda não foi ocupado para armazenar a chave que gerou a colisão. – Quando o número de registros a serem armazenados na tabela puder ser previamente estimado, então não haverá necessidade de usar apontadores para armazenar os registros
  41. 41. Endereçamento Aberto (Rehash) (ou Hashing Fechado)• Quando a função hash gera para uma chave uma posição que já está ocupada, o procedimento de armazenamento verifica se a posição seguinte também está ocupada; se estiver ocupada, verifica a posição seguinte e assim por diante, até encontrar uma posição livre.
  42. 42. Endereçamento Aberto (Rehash) (ou Hashing Fechado)• Nesse tipo de tratamento, considera-se a tabela como uma estrutura circular, onde a primeira posição sucede a última posição.) A entrada é então armazenada nessa posição.• Se a busca termina na posição inicialmente determinada pela função hash, então a capacidade da tabela está esgotada e uma
  43. 43. Endereçamento Aberto (Rehash) (ou Hashing Fechado)• Operações
  44. 44. Endereçamento Aberto (Rehash) (ou Hashing Fechado)• Operações
  45. 45. Roteiro• Contextualização• Conceitos Básicos• Hashing (método de pesquisa) – Hashing Perfeito – Hashing Imperfeito• Colisões – Métodos de Tratamento de Colisões• Limitações e demais aplicações
  46. 46. Limitações (1/2)• O Hash é uma estrutura de dados do tipo dicionário: – Não permite armazenar elementos repetidos. – Não permite recuperar elementos sequencialmente (ordenado).• Para otimizar a função Hash é necessário conhecer a natureza e domínio da chave a ser utilizada.• No pior caso a complexidade das operações pode ser O(N). Caso em que todos os elementos inseridos colidirem.
  47. 47. Vantagens e Desvantagens• Vantagens – Algoritmos simples e eficientes para inserção, retirada e busca. – Alta eficiência no custo de pesquisa, que é O(1) para o caso médio.• Desvantagens – nenhuma garantia de balanceamento – espaço sub-utilizado nas tabelas – o grau de espalhamento é sensível à função de hashing utilizada e ao tipo de informação usada como chave.
  48. 48. Aplicações de Hashing• Algumas áreas de aplicação de Hashing: – Integridade de Dados – Criptografia – Compactação de Dados – Tabelas de transposição em jogos de xadrez para computador – Serviços de DHCP – Thesaurus • no que tange à computação, um tesauro representa uma base de dados contendo tópicos semanticamente ortogonais, comumente utilizada em tarefas de busca.
  49. 49. Referências• Notas de aulas Prof. Thales Castro

×