Nenhuma animação disponível para revisar!
Hashing com Tratamento de Colisão
INFO:
HUB
1/1
Tamanho do Vetor:
Tamanho da Área de Overflow:
NoHash
{
info : String;
proximo : inteiro;
}
EstruturaHash
{
TabelaHash : vetor de NoHash;
AreaDeOverflow : vetor de NoHash;
DISP : inteiro;
}
TAMANHO_DA_TABELA : inteiro;
indice : inteiro;
indice := Hash(INFO);
Se TabelaHash[indice] == nulo então
INICIO
TabelaHash[indice] := alocar();
TabelaHash[indice].info := INFO;
TabelaHash[indice].proximo := -1;
FIM
Senão se DISP != -1 então
INICIO
Se TabelaHash[indice].proximo == -1 então
TabelaHash[indice].prox := DISP;
Senão
INICIO
leitor : inteiro;
leitor := TabelaHash[indice].proximo;
Enquanto AreaDeOverflow[leitor].prox != -1 faça
leitor := AreaDeOverflow[leitor].prox;
AreaDeOverflow[leitor].proximo := DISP;
FIM
 
aux : inteiro;
aux := AreaDeOverflow[DISP].proximo;
AreaDeOverflow[DISP].info := INFO;
AreaDeOverflow[DISP].proximo := -1;
DISP = aux;
FIM
Senão
TabelaHash[indice].info := INFO;
soma,total : inteiro;
soma := 0;
total := INFO.comprimento;
 
Para i de 0 até total passo 1 faça
soma := soma + (i+1)*INFO.caracter(i);
soma := soma%TAMANHO_DA_TABELA;
Retornar soma;
ind : inteiro;
ind := Hash(INFO);
Se TabelaHash[ind] != nulo então
INICIO
Se TabelaHash[ind].info == INFO então
INICIO
Se TabelaHash[ind].proximo == -1 então
INICIO
Liberar(TabelaHash[ind]);
TabelaHash[ind] := nulo;
FIM
Senão
INICIO
prox : inteiro;
prox := TabelaHash[ind].prox;
TabelaHash[ind].info := AreaDeOverflow[prox].info;
TabelaHash[ind].proximo := AreaDeOverflow[prox].proximo;
AreaDeOverflow[prox].proximo := DISP;
AreaDeOverflow[prox].info := nulo;
DISP := prox;
FIM
FIM
Senão Se TabelaHash[ind].proximo != -1 então
INICIO
leitor, anterior : inteiro;
anterior := -1;
leitor := TabelaHash[ind].prox;
 
Enquanto leitor != -1 e AreaDeOverflow[leitor].info então
INICIO
anteiror := leitor;
leitor := AreaDeOverflow[leitor].proximo;
FIM
 
Se leitor != -1 então
INICIO
Se anterior != -1 então
AreaDeOverflow[anterior].proximo := TabelaHash[leitor].proximo;
Senão
TabelaHash[ind].proximo := AreaDeOverflow[leitor].proximo;
AreaDeOverflow[leitor].proximo := DISP;
AreaDeOverflow[leitor].info := nulo;
DISP := leitor;
FIM
FIM
FIM
soma,total : inteiro;
soma := 0;
total := INFO.comprimento;
 
Para i de 0 até total passo 1 faça
soma := soma + (i+1)*INFO.caracter(i);
soma := soma%TAMANHO_DA_TABELA;
Retornar soma;
indice : inteiro;
leitor : EstruturaLista;
indice := Hash(INFO);
 
Se TabelaHash[indice] != nulo então
INICIO
Se TabelaHash[indice].info == INFO então
Retornar Verdadeiro;
Senão
INICIO
leitor : inteiro;
leitor := TabelaHash[indice].proximo;
Enquanto leitor != -1 faça
INICIO
Se AreaDeOverflow[leitor].info == INFO então
Retornar Verdadeiro;
leitor := AreaDeOverflow[leitor].proximo;
FIM
FIM
FIM
Retornar Falso;
soma,total : inteiro;
soma := 0;
total := INFO.comprimento;
 
Para i de 0 até total passo 1 faça
soma := soma + (i+1)*INFO.caracter(i);
soma := soma%TAMANHO_DA_TABELA;
Retornar soma;
Nenhuma animação disponível para revisar!
Executando animação ...
Aguarde encerrar !
Última animação que foi executada:
| # | Descrição |
|---|
Limpar entrada ao final da animação
Chance de gerar número negativo na entrada aleatória:
Ocultar Ponteiros Nulos
Impedir inserção de valores repetidos
Mostrar Descritores
Usar delimitador em chaves
Contar linhas brancas
Pseudo-código
Informações da Estrutura
Entradas Programadas
Rever Passos
Histórico
Hashing com Tratamento de Colisão