Your SlideShare is downloading. ×
Aula sobre Tabela Hash
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Aula sobre Tabela Hash

21,082
views

Published on


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

No Downloads
Views
Total Views
21,082
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
470
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Estrutura de Dados TABELAS HASH
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Como representar Tabelas Hash?
  • 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. 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. 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. 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. 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. 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. Hashing Perfeito• Característica: – Para quaisquer chaves x e y diferentes e pertencentes a A, a função utilizada fornece saídas diferentes;
  • 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. 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. 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. 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. Exemplo de Hashing Imperfeito (2/2)
  • 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. 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. 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. 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. 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. 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. 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. Encadeamento (Hashing aberto)• Operações
  • 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. 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. 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. Endereçamento Aberto (Rehash) (ou Hashing Fechado)• Operações
  • 44. Endereçamento Aberto (Rehash) (ou Hashing Fechado)• Operações
  • 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. 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. 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. 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. Referências• Notas de aulas Prof. Thales Castro