Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho [email protected].
-
Upload
bruna-faro-fialho -
Category
Documents
-
view
214 -
download
1
Transcript of Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho [email protected].
![Page 1: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/1.jpg)
Estrutura de dadosAula 6 - hashProfessor Luiz José Hoffmann [email protected]
![Page 2: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/2.jpg)
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
![Page 3: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/3.jpg)
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
![Page 4: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/4.jpg)
Contextualização Os métodos de pesquisa tradicionais 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.
Conclusão: os algoritmos mais eficientes de busca demandam esforço computacional O(log n).
Veremos agora, o método de pesquisa conhecido como hashing (tabela de dispersão) 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.
![Page 5: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/5.jpg)
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
![Page 6: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/6.jpg)
Conceitos Básicos
Arranjos utilizam índices para armazenar as informações.
Através do índice as operações sobre arranjos são realizadas no tempo O(1).
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 6José
MariaLeila Artur Jolinda Gisela Alcien
eFamília
Família[1] = “José Maria”Família[3] = “Artur”Família[2] = “Leila”
Em qual posição está “Alciene” ?
![Page 7: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/7.jpg)
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.
![Page 8: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/8.jpg)
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
![Page 9: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/9.jpg)
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.
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.
![Page 10: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/10.jpg)
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.
![Page 11: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/11.jpg)
Definição de Hash (3/3)
Função de Hashing
123.456.781-00143.576.342-23345.365.768-93879.094.345-45
19
19 123.456.781-00; Fausto Silva; Av. Canal. Nº 45.
...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....
375085
999.999.999-99 20
20Tabela Hash
![Page 12: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/12.jpg)
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.
![Page 13: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/13.jpg)
Ilustração de uma Tabela Hash
regi
stro
(cha
ve k
)
chave
1
2
X
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.
?K registro
dados
![Page 14: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/14.jpg)
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.
![Page 15: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/15.jpg)
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.
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.
![Page 16: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/16.jpg)
Ilustração da Função de Hashing
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çoC: espaço de valores da chave (domínio de f)E: espaço de endereçamento (contradomínio de f)
Os valores da chave podem ser numéricos, alfabéticos ou alfa-numéricos. registro (K) E = f (K) K
chave
1
2
X
n-1
n
registro
dados
![Page 17: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/17.jpg)
Funções Hash Método da divisão = (x % n)
h(9) = ( 9 % 3) = 0 H(35) = ( 35 % 3) = 2 H(22) = ( 22 % 3) = 1
Transformação de elementos alfanuméricos h(‘Bia’) = 2; h(‘Thais’) = 1;total = (nome[0] + nome[1]+ …. + nome[m]);h = total % N;
![Page 18: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/18.jpg)
Tabela ASCII
![Page 19: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/19.jpg)
Funções Hash
Tratamento de permutações h(‘ABC’) = 2 h(‘ACB’) = 2 h(‘BAC’) = 2
Um caractere x[i] sempre é transformado no valor ASCII. Na soma com deslocamentos, o valor númeroico de x[i] depende também de sua posição i, sendo dado pela fórmula: ((x[i] << i) mod 8)
![Page 20: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/20.jpg)
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
![Page 21: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/21.jpg)
Hashing Perfeito
Característica:
Para quaisquer chaves x e y diferentes e pertencentes a A, a função utilizada fornece saídas diferentes;
![Page 22: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/22.jpg)
Exemplo de Hashing Perfeito (1/6)
Suponha que queiramos armazenar os dados referentes aos alunos de uma determinada turma que ingressaram em um curso específico.
Cada aluno é identificado unicamente pela sua matrícula. Na Camões, o número de matrícula dos alunos é dado por
uma sequência de 8 dígitos. struct aluno { int mat; // 4 bytes = 4 bytes char nome[81]; // 1 byte * 81 = 81 bytes char email[41]; // 1 byte * 41 = 41 bytes }; Total = 126 bytes typedef struct aluno Aluno;
![Page 23: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/23.jpg)
Exemplo de Hashing Perfeito (2/6)
O número de dígitos efetivos na matrícula são 7, pois o último dígito é o de verificação (ou controle).
Para permitir um acesso a qualquer aluno em ordem constante, podemos usar o número de matrícula do aluno como índice de um vetor.
Um problema é que pagamos um preço alto para ter esse acesso rápido. Porque !?
Resp: Visto que a matrícula é composta de 7 dígitos, então podemos esperar uma matrícula variando de 0000000 a 9999999. Portanto, precisaríamos dimensionar um vetor com DEZ Milhões de elementos.
![Page 24: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/24.jpg)
Exemplo de Hashing Perfeito (3/6)
Como a estrutura de cada aluno ocupa 126 bytes, então seriam necessários reservar 1.260.000.000 bytes, ou seja, acima de 1 GByte de memória.
Como na prática teremos em torno de 50 alunos em uma turma cadastrados no curso, precisaríamos na realidade de 7.300 (=126*50) bytes.
Pergunta: Como amenizar o gasto excessivo de memória!? Resp: Utilizando um vetor de ponteiros, em vez de um vetor de estruturas.
Porque melhor vetor de ponteiros ? Alocação dos alunos cadastrados seria realizada
dinamicamente. Portanto, considerando que cada ponteiro ocupa 4 bytes, o
gasto excedente de memória seria 40.000.000 bytes. (~= 38 MBytes)
![Page 25: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/25.jpg)
Exemplo de Hashing Perfeito (4/6)
Apesar da diminuição do gasto de memória, este gasto é considerável e desnecessário.
A forma de resolver o problema de gasto excessivo de memória, garantindo um acesso rápido, é através de Hashing.
Resp: Identificando as partes significativas da chave.
Pergunta: Como construir a Tabela Hash para armazenar as informações dos alunos de uma determinada turma de um curso específico?
Analisando a chave: Desconsiderando o último dígito (controle), temos outros dígitos com significados especiais:
97 1 12 34 - 4
ano de ingressoperíodo de ingressocódigo do cursochamada do aluno
![Page 26: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/26.jpg)
Exemplo de Hashing Perfeito (5/6)
Portanto, podemos considerar no cálculo de endereço parte do número da matrícula.
Esta parte mostra a dimensão que a Tabela Hash deverá ter.
Por exemplo, dimensionando com apenas 100 elementos, ou seja, Aluno* tabAlunos[100].
Pergunta: Qual a função que aplicada sobre matrículas de alunos da Camões retorna os índices da tabela?
Resp: Depende qual é a turma e o curso específico dos alunos que devem ser armazenados ?
![Page 27: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/27.jpg)
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)]
![Page 28: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/28.jpg)
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
![Page 29: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/29.jpg)
Hashing Imperfeito
Características:
Existe chaves x e y diferentes e pertencentes a A, onde a função Hash utilizada fornece saídas iguais;
![Page 30: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/30.jpg)
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).
![Page 31: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/31.jpg)
Exemplo de Hashing Imperfeito (2/2)
![Page 32: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/32.jpg)
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.
![Page 33: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/33.jpg)
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.
![Page 34: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/34.jpg)
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
![Page 35: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/35.jpg)
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).
![Page 36: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/36.jpg)
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.
![Page 37: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/37.jpg)
Encadeamento
Característica Principal: A informação é armazenada em estruturas encadeadas fora da Tabela Hash.
0
1
2
3
M - 2
M - 1
K1
K2
K3
K4
K5
KM
KM-1
K6
KM-4
![Page 38: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/38.jpg)
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
3
4
5
6
C
H A V
E S
![Page 39: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/39.jpg)
Endereçamento Aberto (Rehash) Característica Principal:
A informação é armazenada na própria Tabela Hash.
Possui quatro estratégias: Rehash Linear; Rehash Incremental; Rehash Quadrática e Rehash Duplo.
http://pt.wikipedia.org/wiki/Tabela_hash
![Page 40: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/40.jpg)
Endereçamento Aberto: Rehash Linear Uma das alternativas mais usadas para
aplicar Endereçamento Aberto é chamada de rehash linear.
A posição na tabela é dada por: rh(k) = (k + i) % M, onde M é a qtd de entradas na
Tabela Hash k é a chave i é o índice de reaplicação
do Hash
![Page 41: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/41.jpg)
Exemplo Rehash Linear (1/3)
Suponha que queiramos inserir, nesta ordem, os caracteres da palavra “CHAVES” utilizando o método de resolução de colisões Rehash Linear.
O número de entradas (M) da Tabela Hash a ser criada é 7.
![Page 42: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/42.jpg)
Exemplo Rehash Linear (2/3)
![Page 43: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/43.jpg)
Exemplo Rehash Linear (3/3)
Resultado final da Tabela Hash
![Page 44: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/44.jpg)
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
![Page 45: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/45.jpg)
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.
![Page 46: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/46.jpg)
Limitações (2/2)
No pior caso a complexidade das operações pode ser O(N). Caso em que todos os elementos inseridos colidirem.
Hash com endereçamento aberto podem necessitar de redimensionamento.
![Page 47: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/47.jpg)
Aplicações de Hashing
Demais áreas de aplicação de Hashing: Integridade de Dados; Criptografia e Compactação de Dados.
![Page 48: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/48.jpg)
Implementando Hash em C
Com declarar um struct de hash em C?
Como crio a lista encadeada? Vamos ver um exemplo no quadro.
struct htype {int chave; // Valor real do elemento a ser
armazenadostruct htype *next; // ponteiro para o próximo valor com
mesmo index} primary[100];
![Page 49: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/49.jpg)
Exercícios
Usando o método da divisão para n=4, esquematize o estado de uma tabela de hash T, inicialmente vazia, após a inserção dos elementos 13, 27, 38, 40, 52, 64, 71, 88 e 90.
Escreva uma função para inserir elementos em uma tabela de hash. Tabela com tamanho igual a 20. E usando a função de hash da divisão.
![Page 50: Estrutura de dados Aula 6 - hash Professor Luiz José Hoffmann Filho ljhfilho@gmail.com.](https://reader036.fdocument.pub/reader036/viewer/2022081520/5706385c1a28abb8238fdb7b/html5/thumbnails/50.jpg)
Exercícios
Escreva uma função para buscar um elemento na estrutura de hash, criada no exercício 2.
Escreva uma função para remover um elemento na estrutura de hash, criada no exercício 2.
Faça os mesmos exercícios anteriores, mas agora utilizando uma string com entrada para a função hash.