Função HASH em C++
Publicado por José Cleydson Ferreira da Silva (última atualização em 09/03/2010)
[ Hits: 12.343 ]
Homepage: geminivirus.org
Essa é uma simples introdução a estruturação de dados que faz um simples HASH com complexidade O(n) - int h(string nome) -, seu resultado é apurar o número de colisão.
Para compilá-lo basta usar o compilador g++ da seguinte forma:
$ g++ teste-1.cpp -o teste-1.exe
$ ./teste-1.exe
#include <iostream> #include <string> using namespace std; struct Pessoa { string nome; int colisao; }; char alfabeto[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','z','w','y'}; string lerNome() { string nome; cout << "informe o proximo nome: " << endl; cin >> nome; if (nome == "") { cout << "Nome não pode ser vazio: " << endl; return ""; } return nome; } int h(string nome) { char letra; int soma = 0; int somaFim = 0; for(int n=0; n < 15 ; n++) { letra = nome[n]; for (int i=0; i<=40; i++) { if(letra == alfabeto[i]) { soma = i + 43; break; }; }; somaFim += soma; }; somaFim = somaFim * 3; somaFim *= somaFim; return somaFim % 7; } Pessoa* inicializarColisoes() { Pessoa *pessoas = new Pessoa[7]; for (int i=0; i<7; i++) { pessoas[i].nome = ""; pessoas[i].colisao = 0; } return pessoas; } void mostrarColisoes(Pessoa *pessoas) { for (int i = 0; i<7; i++) { // if (pessoas[i].nome == "") // break; cout<<"Posição " << i << endl; cout<<"Colisões " << pessoas[i].colisao << endl << endl; } } int main() { Pessoa *p = new Pessoa[7]; p = inicializarColisoes(); int tam; //define o tamanho da palavra para n�o ser preciso ir at� o final da palavra int somaLetra; string nome; int valorHash; char sair = 'n'; while (sair != 's' ) { nome = lerNome(); if (nome == "") continue; valorHash = h(nome); cout<<"Valor Hash: "<<valorHash<<endl; if (p[valorHash].nome != "") { p[valorHash].colisao++; } p[valorHash].nome = nome; cout << "Deseja sair?" << endl; cin >> sair; } mostrarColisoes(p); return 0; }
Tipos de Dados Abstrato - TDA - Números Complexos
Listando processos via /proc/PID
Tipos de Dados Abstrato - TDA - Vetor
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (5)
Linux Lite Demorando Muito Para Ligar (2)