0% acharam este documento útil (0 voto)
33 visualizações25 páginas

09 TabelasHash

Pdf sobre tabela hash

Enviado por

thalisonramon266
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
33 visualizações25 páginas

09 TabelasHash

Pdf sobre tabela hash

Enviado por

thalisonramon266
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Universidade Federal da Paraíba

Centro de Informática
Departamento de Informática

Estrutura de Dados
Tabelas Hash
(Baseado no material de Michael Main e
Walter Savitch)

 Tiago Maritan
 tiago@[Link]
1
Tabelas Hash (Hash Tables)
 ED que permite realizar busca eficiente em dados
 A partir de uma chave simples, faz uma busca rápida para
obter o valor desejado

 Associa chaves de pesquisa a valores (dados)


Tabelas Hash
 Implementação de arrays associativos
 Conhecidos como maps, dictionaries

 Ex: Array de 701 registros (estruturas)

[0] [1] [2] [3] [4] [5] [ 700]

...

3
Tabelas Hash
 Cada estrutura/registro tem uma chave (campo especial)
 Geralmente são chaves númericas;
 Ex: Número do RG, matrícula;

[0] [1] [2] [3] [4] [5] [ 700]

...

Chave 506643548

4
Inserção em Tabelas Hash
 Na inserção, a chave deve ser convertida para algum
índice inteiro no array.

 A função que faz a conversão é chamada de função hash.


 Índice gerado é chamado de valor hash da chave.
 Representa a posição onde os dados serão inseridos

 Ex: Função hash: h(x) = x % 701

Funções hash geralmente usam


uso de resto da divisão e envolvem o tamanho da tabela
5
Inserção em Tabelas Hash
 Ex: A chave 580625685 seria inserida em que posição?

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 506643548 Number 155778322

h(580625685) = 580625685 % 701


h(580625685) = 3

Chave deve ser inserida na posição 3 do array.


6
Inserção em Tabelas Hash
 Ex: A chave 580625685 seria inserida em que posição?

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 580625685
Number 233667136 Number 506643548 Number 155778322

h(580625685) = 580625685 % 701


h(580625685) = 3

Chave deve ser inserida na posição 3 do array.


7
Colisões
 Ex: Suponha agora que desejamos inserir a chave 701466868?
h(701466868) = 2

 Ocorreu uma colisão! Como resolver?


Chave 701466868

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 155778322

8
Tratamento de Colisões
 Duas estratégias principais:
 Reespalhamento (ou Endereçamento Aberto)
 Encadeamento

9
Reespalhamento
(ou Endereçamento Aberto)
 Aplica uma função de espalhamento secundária sobre a chave.
 Aplicada sucessivamente até uma posição vazia ser encontrada.

 Modelo geral das funções de reespalhamento:


rh(i) =(i + c) % tamanho

constante tamanho
da tabela hash
 Ex: Teste linear
 Coloca o registro na próxima posição vazia disponível.
 Função de reespalhamento: rh(i) =(i+1)%701

10
Reespalhamento
(ou Endereçamento Aberto)
Chave 701466868

Próxima posição está


ocupada, reespalha

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 155778322

11
Reespalhamento
(ou Endereçamento Aberto)
Chave 701466868

Próxima posição
continua ocupada,
reespalha novamente...

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 155778322

12
Reespalhamento
(ou Endereçamento Aberto)
Chave 701466868

Posição vazia! Insere o


registro na posição [5].

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 155778322

13
Reespalhamento
(ou Endereçamento Aberto)
Chave 701466868

Posição vazia! Insere o


registro na posição [5].

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 701466868 Number 155778322

14
Pesquisando Elementos em Tabelas Hash
 Um dos benefícios de uso de Tabelas Hash é que a busca
geralmente é muito eficiente.
 Especialmente quando há poucas colisões.

 Pseudocódigo da Pesquisa:
1. Calcula o valor hash da chave pesquisada;
2. Verifica a posição indicada pelo valor
hash no array;
3. Se não for a chave pesquisada, aplique
função de reespalhamento até encontrar a
chave ou uma posição vazia.

15
Pesquisando Elementos em Tabelas Hash
 Ex: Pesquisar a chave 701466868:
h(701466868) = (701466868 % 701)
h(701466868) = 2

Não é o elemento procurado,


reespalha

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 701466868 Number 155778322

16
Pesquisando Elementos em Tabelas Hash
 Ex: Pesquisar a chave 701466868:
h(701466868) = (701466868 % 701)
h(701466868) = 2
Não é o elemento procurado, e posição
não é vazia então reespalha novamente

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 701466868 Number 155778322

17
Pesquisando Elementos em Tabelas Hash
 Ex: Pesquisar a chave 701466868:
h(701466868) = (701466868 % 701)
h(701466868) = 2
Não é o elemento procurado, e posição
não é vazia então reespalha novamente

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 701466868 Number 155778322

18
Pesquisando Elementos em Tabelas Hash
 Ex: Pesquisar a chave 701466868:
h(701466868) = (701466868 % 701)
h(701466868) = 2
Localizou o elemento procurado,
retorna o registro

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 701466868 Number 155778322

19
Remoção de Elementos em Tabelas Hash
 Difícil eliminar itens em uma Tabela Hash que usa
reespalhamento na busca e inserção.

 Ex: Remoção no elemento [2]


 Pode interferir nos elementos que foram reespalhados;
 Inviabilizaria a localização do elemento [5] (reespalhado).

Valor hash é 2,
mas foi reespelhado
[0] [1] [2] [3] [4] [5] [ 700]
Number 281942902 Number 233667136 Number 580625685 Number 506643548 Number 701466868 Number 155778322

20
Remoção de Elementos em Tabelas Hash
 Solução: Marcar a posição como “Eliminado”.

 Algoritmo de busca deve continuar pesquisando quando


encontrar uma posição “Eliminado”.

 Problemático quando há muitas eliminações


 Desperdiça espaço.

[0] [1] [2] [3] [4] [5] [ 700]


Number 281942902 Number 580625685 Number 506643548 Number 701466868 Number 155778322

Eliminado

21
Encadeamento Separado
 Reespalhamento assume que tamanho da tabela é fixa.

 Se no elementos > tamanho_tabela, saída é:


 Alocar uma tabela maior e recalcular o valor da chave de todos
os registros já inseridos.

 Outro método pra tratar colisões, que não usa tabela de


tamanho fixo, é o encadeamento separado.

22
Encadeamento Separado
 Mantém uma lista encadeada para cada conjunto de
chaves que colidem.

23
Características das Tabelas Hash
 Vantagens:
 Muito eficiente para pesquisa
 Inclusive em dados não ordenados;
 Fácil implementação;

 Desvantagens:
 Demanda mais armazenamento;
 Pode desperdiçar memória
 Demandar mais memória que o necessário;
 Remoção “problemática”;

24
Universidade Federal da Paraíba
Centro de Informática
Departamento de Informática

Estrutura de Dados
Tabelas Hash
(Baseado no material de Michael Main e
Walter Savitch)

 Tiago Maritan
 tiago@[Link]
25

Você também pode gostar