Algoritmos/Estruturas de dados/Tabela Hash: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 21:
== Colisões ==
As colisões em uma Tabela Hash ocorrem quando duas chaves diferentes possuem o mesmo valor da função hash e, portanto, elas são levadas à mesma posição da tabela hash. Porém, mesmo quando isso ocorre é necessário que as duas chaves sejam armazenadas na tabela e que as duas possam ser encontradas se a busca for realizada. Para resolver esse problema é necessário que uma medida seja tomada, utilizando assim alguma forma de tratamento as colisões.
[[Ficheiro:Hash table 4 1 1 0 0 1 0 LL.svg|miniaturadaimagem|293x293px|Exemplo de colisão de chaves.]]
 
Existem várias formas de se realizar um tratamento de colisões, entre elas temos o encadeamento interno.  
 
=== '''Encadeamento Interno''' ===
O encadeamento interno utiliza outras posições vazias dentro da própria tabela hash por meio de buscas padronizadas para armazenar a chave chave que obteve colisão. Existem alguns métodos para resolver isso, como:
 
==== Sondagem linear ====
As próximas posições são sondadas até que uma posição livre éseja encontrada, utilizando uma procura linear até encontrar um registro vazio.
 
====Sondagem quadrática ====
Linha 36:
 
====Duplo Hash ====
A distância até a próxima posição a ser somada é determinada por uma segunda função hash, que também pode ser denominada por rehash. O que acontece, nesse caso, é que o vetor da tabela é formado por uma sequencia de funções de espalhamento auxiliares, na qual a chave de entrada será o valor gerado pela função anterior.<br/><br/>
<br/><br/>
=== Encadeamento Externo ===
O encadeamento externo utiliza uma área extra, além da tabela hash. Alguns exemplos utilizados são:
[[Ficheiro:Lista_Encadeada.gif|miniaturadaimagem|288x288px|Exemplo de lista encadeada.]]
 
====Área de Extensão ====
Os registros colididascolididos serão armazenadasarmazenados em uma área de extensão, que é uma área adicional à tabela hash reservada para guardar os registros que obtiveram colisões na função hash.
 
====Lista encadeada ====
Todos os registros são armazenados em uma lista encadeada fora da tabela hash. A inserção na tabela requer uma busca e inserção dentro da lista encadeada, o que pode resultar em um alto custo de execução.
 
Uma alternativa para resolver esse problema seria utilizar outras estruturas de dados alternativas como, por exemplo, uma árvore AVL, que poderia melhorar o tempo médio de acesso da tabela hash para O(log n) em vez de O(n) se utilizassemos a lista encadeada.
 
== Buckets ==