int hazmat::hashStr(char const * const str)
{
int count = 0;
for (unsigned i = 0; i < strlen(str); i++)
{
count += str[i]; // get the ascii sum.
}
return count % maxSize;
}
Répondre
Vous comprenez mal comment fonctionnent les tables de hachage. Vous devez allouer un tableau de longueur fixe (dans le cas le plus simple), puis chaque entrée doit avoir une liste chaînée pour pouvoir résoudre les doublons. Autrement dit, deux chaînes peuvent aboutir à la même valeur de hachage et vous devrez parcourir la liste chaînée et comparer les clés. Et oui, comme l'autre affiche l'a dit, ajouter des caractères est une approche terrible. Pensez-y - "abc" et "cba" donneront la même valeur de hachage.
Merci M. André – user40120
-1 pour le "must" sur l'implémentation de hachage chaîné.Le sondage linéaire comme suggéré dans le PO est bien, et souvent plus facile. –
Puis-je suggérer que vous fournissiez une meilleure réponse la prochaine fois et aller de l'avant en recueillant plus de votes au lieu de tirer d'autres réponses. – Andre
La somme ASCII n'est pas une bonne fonction de hachage. Voici quelques-unes des explications:
Pourquoi quelqu'un a-t-il déprécié cette réponse? J'ai voté. – user172818
Merci - se demandait ce qui se passait avec ça. –
Je ne sais pas quel est votre objectif avec cette question. Si votre objectif est de trouver une bonne table de hachage C++, utilisez std :: tr1 :: unordered_map si votre compilateur le supporte, sinon par exemple Google sparse-hash.
Si votre objectif est d'en savoir plus sur les tables de hachage, lisez la suite.
En réponse à this SO question, je mis en place une table de hachage très simple en Java dans my answer:
D'abord, vous devez comprendre une quelle fonction de hachage est. Une fonction de hachage est une fonction qui prend une clé (par exemple, une chaîne de longueur arbitraire) et renvoie un nombre aussi unique que possible. La même clé doit toujours retourner le même hachage. Une fonction de hachage chaîne très simple en Java pourrait ressembler
public int stringHash(String s) {
int h = s.length();
for(char c : s.toCharArray()) {
h ^= c;
}
return h;
}
Vous pouvez étudier une bonne fonction de hachage à http://www.azillionmonkeys.com/qed/hash.html
Maintenant, la carte de hachage utilise cette valeur de hachage pour placer la valeur dans un tableau. méthode Simplistic java:
public void put(String key, Object val) {
int hash = stringHash(s) % array.length;
if(array[hash] == null) {
array[hash] = new LinkedList<Entry<String, Object> >();
}
for(Entry e : array[hash]) {
if(e.key.equals(key)){
e.value = val;
return;
}
}
e.add(new Entry<String, Object>(key, val));
}
(Cette carte applique des clés uniques Toutes les cartes ne..)
Il est possible pour deux clés différentes de hachage à la même valeur, ou deux différents hachages pour cartographier la même indice de tableau. Il existe de nombreuses techniques pour gérer cela. Le plus simple est d'utiliser une liste chaînée (ou un arbre binaire) pour chaque index de tableau. Si la fonction de hachage est suffisante, vous n'aurez jamais besoin d'une recherche linéaire.
Maintenant, pour rechercher une clé:
public Object get(String key) {
int hash = stringHash(key) % array.length;
if(array[hash] != null) {
for(Entry e : array[hash]) {
if(e.key.equals(key))
return e.value;
}
}
return null;
}
- 1. Suppression d'un HashTable C++
- 2. C# Hashtable ne conserve pas les valeurs
- 3. Empêcher double Entrée en Hashtable C++
- 4. Différences entre .NET Hashtable, Java Hashtable et HashMap
- 5. C#: implémentation de SkipLast
- 6. Implémentation de l'interface C#
- 7. Créer personnalisé Hashtable
- 8. Hashtable vs Dictionnaire
- 9. Créer des propriétés dynamiques et lier hashtable dans C#
- 10. C# Accès Hashtable des tableaux à deux dimensions
- 11. WPF Listview lié avec Hashtable
- 12. Différence entre le dictionnaire et Hashtable
- 13. Les objets Hashtable sont-ils toujours utiles?
- 14. Carte une référence d'objet avec Hashtable
- 15. Implémentation de PBKDF2 en C# avec Rfc2898DeriveBytes
- 16. Implémentation radix/mtrie open-source en C?
- 17. Implémentation de règles au format C#
- 18. Implémentation de IProvideClassInfo sur l'objet C# COM
- 19. Implémentation du modèle atomique C++ 0x
- 20. Implémentation de getResponseCode Java() dans C?
- 21. Implémentation des filtres Photoshop en C#
- 22. Implémentation de délégué anonyme dans Objective-C?
- 23. Implémentation d'une bibliothèque de threads C++ en C++
- 24. C++/CLI: Implémentation IList et IList <T> (implémentation explicite d'un indexeur par défaut)
- 25. Trouver la taille de .net hashtable
- 26. Quelle quantité de mémoire utilise une Hashtable?
- 27. copie n paires k/v de Hashtable
- 28. Valider chaque colonne de dataTable utilisant Hashtable
- 29. Méthode pour trouver Key dans HashTable
- 30. Comment itérer sur Hashtable dans JSP
Tous ce code et le fond, et votre meilleure question est « est-il quelque chose que je peux faire mieux? »? Ce n'est pas vraiment une question là-bas, abat-jour. – abelenky
Im toujours beaucoup d'un débutant. Je ne comprends pas comment faire ceci ... J'ai lu sur le sondage linéaire. Ai-je besoin de tester l'adresse? Chaque fois que les références sont les mêmes. – user40120
Ne faites jamais cela [i