estrutura de dados [teste suave] - estrutura da tabela hash

1. O que é uma tabela hash?

Tabela Hash (Tabela Hash) é uma estrutura de dados
Tabela Hash (Tabela Hash) é uma estrutura de dados comumente usada, que pode realizar pesquisa rápida e armazenamento dinâmico.
As tabelas hash são amplamente utilizadas em aplicações práticas, como mecanismos de pesquisa, bancos de dados e caches.

Em segundo lugar, as vantagens e desvantagens da tabela hash

2.1 Principais características/vantagens das tabelas hash

2.1.1 Armazenamento de valor-chave

Os pares chave-valor são armazenados na tabela hash, ou seja, o valor correspondente pode ser encontrado rapidamente através da chave.

2.1.2 Localização e inserção rápida

A chave é mapeada para a posição do índice do array por meio da função hash, e a busca pode ser realizada diretamente nesta posição, e a complexidade de tempo é O(1).
Tanto a pesquisa quanto a inserção têm baixa complexidade de tempo, geralmente O(1).

2.1.3 Armazenamento dinâmico

As tabelas hash podem executar dinamicamente operações de inserção, exclusão e pesquisa.

2.1.4 Tratamento de conflitos

Como pode haver conflitos no cálculo do valor do hash, ou seja, chaves diferentes calculam o mesmo valor do hash, então o problema do conflito de hash precisa ser resolvido.

2.2 Desvantagens das tabelas hash

  • É necessário espaço adicional para armazenar a tabela hash e possível resolução de conflitos.

Terceiro, o princípio básico da tabela hash

Para uma determinada chave, um índice de array é calculado por uma função hash e o par chave-valor é armazenado na posição do índice.
Na busca, o índice correspondente à chave também é calculado através da função hash, e a busca é realizada diretamente nesta posição, reduzindo bastante a complexidade do tempo da busca.

Quarto, a realização da tabela hash

A implementação de uma tabela hash geralmente inclui as seguintes etapas:
(1) Definir uma função hash que mapeia uma chave para um número inteiro para determinar a posição da chave na tabela hash.
(2) Crie um array para armazenar os elementos na tabela hash.
(3) Use a função hash para mapear a chave para a posição correspondente na matriz e armazenar o valor correspondente.
(4) Na pesquisa, use a mesma função hash para mapear a chave para um local na matriz e verificar se o valor nesse local corresponde ao valor desejado.

A implementação da tabela hash pode ser baseada em diferentes estruturas de dados, como arrays, listas vinculadas, árvores rubro-negras, etc.
Funções hash comuns incluem módulo hash, multiplicação hash, divisão hash, etc.

5. Tabela hash e função hash

As tabelas hash usam uma função hash para mapear chaves para locais para tornar as pesquisas mais eficientes.

Uma tabela hash mapeia chaves para valores.
Uma tabela hash mapeia uma chave (chave) para uma associação de valor (valor).
O desempenho da tabela hash depende da escolha da função hash e do fator de carga da tabela hash.
Uma boa função hash deve mapear chaves para posições na matriz da maneira mais uniforme possível para reduzir colisões e tempos de pesquisa.
Ao mesmo tempo, um fator de carga apropriado pode garantir a eficiência e a utilização do espaço da tabela hash.

A tabela hash calcula o valor hash da chave e armazena o par chave-valor em uma posição específica da matriz, realizando assim operações rápidas de pesquisa, inserção e exclusão.

6. Construção de funções

7. Tratamento de conflitos de hash

7.1 O que é uma colisão hash?

Uma colisão de hash ocorre quando duas chaves diferentes são mapeadas para o mesmo valor em uma tabela hash.
Em aplicações práticas, um método apropriado para resolver colisões de hash é geralmente selecionado de acordo com os requisitos de desempenho da tabela hash e a probabilidade de colisões de hash.

7.2 Como resolver colisões de hash?

Para resolver conflitos de hash, os seguintes métodos são geralmente usados: incluindo método de endereçamento aberto, método de endereço em cadeia, estabelecimento de tabela hash multinível, etc.

7.2.1 Método de endereço aberto

O endereçamento aberto é um método de resolver colisões de hash movendo os elementos em colisão para o próximo local disponível.

Os métodos comuns de endereço aberto incluem sondagem linear, sondagem quadrática e hashing duplo.

7.2.1.1 Sondagem linear

A sondagem linear é o método de endereço aberto mais simples

Ele move o elemento em colisão para a próxima posição até encontrar um slot vazio ou atingir um número predeterminado de vezes.
No entanto, a sondagem linear pode fazer com que a tabela hash fique sobrecarregada, reduzindo a eficiência da pesquisa.

7.2.1.2 Método de detecção dupla

O método de detecção dupla é um método de endereço aberto aprimorado

Ele usa uma função quadrática para escolher a próxima posição.
Este método pode reduzir a taxa de preenchimento da tabela hash, mas pode causar distribuição desigual da tabela hash.

7.2.1.3 Hash duplo

Hash duplo é um método de endereçamento aberto baseado em duas funções hash.
Ele mapeia chaves para dois locais diferentes e insere elementos em um deles.
Este método pode reduzir a probabilidade de colisões de hash, mas requer espaço de armazenamento adicional.

7.2.2 Método de endereço de cadeia

O método de endereço em cadeia é um método para resolver colisões de hash,
que armazena os elementos conflitantes em uma lista vinculada. Ao pesquisar, é necessário percorrer toda a lista vinculada para encontrar o elemento correspondente.
O método de endereço em cadeia pode resolver o conflito de hash, mas aumentará a complexidade do tempo da pesquisa.

7.2.3 Construindo uma tabela hash multinível

Uma tabela hash multinível é um método para resolver colisões de hash.
Ela divide a tabela hash em várias subtabelas e usa diferentes funções hash para mapear chaves para diferentes subtabelas.
Este método pode reduzir a probabilidade de colisões de hash, mas requer espaço de armazenamento adicional e o design de funções hash.

Oito, clique em pesquisar

Acho que você gosta

Origin blog.csdn.net/wstever/article/details/129977985
Recomendado
Clasificación