Função HASH em C++
Publicado por José Cleydson Ferreira da Silva (última atualização em 09/03/2010)
[ Hits: 12.496 ]
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; }
Busca, inserção e remoção de elementos numa lista
Jogo Super Mario Bros 3 (com gráficos)
Simples Criptografia de Dados em Liguagem de programação C/C++
Cálculo de logaritmo de um número por um terceiro método em C
Nenhum coment�rio foi encontrado.
O que é o THP na configuração de RAM do Linux e quando desabilitá-lo
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Como unir duas coleções de ROMs preservando as versões traduzidas (sem duplicatas)
Como instalar o Telegram Desktop no Ubuntu 24.04
Overclocking Permanente para Drastic no Miyoo Mini Plus
Problemas de chaves (/usr/share/keyrings) no Debian
Converter os repositórios Debian para o novo formato com as chaves
Problema com audio apos upgrade (2)
eu preciso saber uma coisa sobre os games no linux (3)
eu preciso saber uma coisa sobre os games no linux (1)