Função de hash simples em C
Publicado por Perfil removido (última atualização em 22/03/2010)
[ Hits: 37.503 ]
Exemplo de função de hash em C.
O tipo de entrada é String e o tamanho da tabela hash pode ser definido pelo usuário.
Mais adiante pretendo enviar uma versão com tratamento de colisão.
#include <stdio.h>
#include <string.h>
int tamanhoTabela = 10;
/*Rotina que transforma uma string em um número
que será usado depois na função hash
*/
int stringParaInt(char *string) {
int tamanho, primeira, segunda; //Inteiros que representam o tamanho,
//o código da primeira letra da string
//e o código da segunda letra.
tamanho = strlen(string); //Mede o tamanho da string
primeira = string[0]; //Obtém o código da primeira letra
segunda = string[1]; //Obtém o código da segunda letra
int resultado = (tamanho * primeira) + segunda; //Função de transformação
return resultado; //Retorna número que representa a string
}
/*A função mais simples de hash;
Para uma tabela com n posições (n == tamanhoTabela)
Toma-se o módulo n do valor inteiro gerado na
função "stringParaInt"
Retornará um número entre 0 e 19.
*/
int hash(int valor) {
return valor % tamanhoTabela;
}
/*Rotina principal
Captura strings quaisquer e gera a chave correspondente para tabela hash.
*/
int main() {
int i;
char dado[50];
printf("\nDefina o tamanho da tabela: ");
scanf("%d", &tamanhoTabela);
for (i=0; i<tamanhoTabela; i++) {
printf("\nDigite uma palavra qualquer: ");
gets(dado);
printf("A chave para a tabela (de 0 a %d) é: %d", tamanhoTabela-1, hash(stringParaInt(dado)));
}
}
Intercalador de vetores em NCURSES com memória dinâmica
gerenciador de historico de comandos
Algoritimo pra Multiplicação de Matrizes
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como impedir exclusão de arquivos por outros usuários no (Linux)
Cirurgia no Linux Mint em HD Externo via USB
Anúncio do meu script de Pós-Instalação do Ubuntu
Formas seguras de instalar Debian Sid (2)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (12)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (5)
Alguém executou um rm e quase mata a Pixar! (3)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (6)









