la recherche de la table de hachage de la bibliothèque C
Je n'ai vérifier les questions précédentes sur ce sujet, mais ne pouvais pas trouver une solution qui répond à mon besoin.
Ce dont j'ai besoin:
- Prend en charge les deux chaînes, et les n-uplets d'entiers (int tableaux en C). Si c'est un tableau d'entiers, la longueur est fixée au moment de la compilation.
- Rapide.
- Efficace en terme de mémoire. J'ai besoin de l'utiliser pour traiter les super grands ensembles de données.
- La capacité des tables de hachage se développer de manière dynamique. J'aime la croissance de la taille des tables de hachage pour être traitées par la bibliothèque, au lieu de moi.
- J'ai besoin de créer un grand nombre de tables de hachage. Et ces tables de hachage sera lié comme un arbre, que les valeurs dans une table de hachage point à d'autres tables de hachage.
Mon application est à la fois mémoire et en CPU. -- Comment je suis chanceux! 🙂
Je ne considère pas du tout C++ implémentations pour l'instant, à moins que je n'arrivais pas à trouver la moindre solution en C.
Merci!
Le plus important de la mise en œuvre de choix: avez-vous besoin d'supprime, ou est la table de hachage en magasin seulement? BTW: le redimensionnement automatique peut être un frein, pourrait conduire à Nlog(N) ou même N*N de comportement. La taille idéale est le chemin à parcourir.
Grâce wildplasser pour les suggestions. Il est lié à la mémoire, parce que j'ai besoin de traiter de grands ensembles de données. Il est en CPU, parce que les maths dans l'application est à coût élevé, non pas à cause de la table de hachage.
Il semble que ce soit un doublon: stackoverflow.com/questions/1138742/...
My application is both memory and CPU bound.
: qui est presque impossible, dans mon hash-programmes intensifs (comme Wakkerbot, voir mon profil) le hachage généralement tendance à utiliser uniquement les quelques % de CPU et de peut-être 90% de la mémoire disponible. Et près de 100% de la bande passante de la mémoire, puisque j'aime séparé de chaînage...Grâce wildplasser pour les suggestions. Il est lié à la mémoire, parce que j'ai besoin de traiter de grands ensembles de données. Il est en CPU, parce que les maths dans l'application est à coût élevé, non pas à cause de la table de hachage.
Il semble que ce soit un doublon: stackoverflow.com/questions/1138742/...
OriginalL'auteur Jian Feng | 2013-08-12
Vous devez vous connecter pour publier un commentaire.
Ce sujet uthash - une table de hachage pour les structures C.
uthash n'a pas de restriction contre touches: clés et la structure peut avoir tout type de données.
Il inclut les macros par défaut de hachage commune des types de clés, à savoir entiers et des chaînes de caractères. En outre, il fournit des macros génériques (
HASH_ADD
etHASH_FIND
) à l'appui de tout type de données.Il semble pour être:
Plus de détails ici:
Il est pris en charge out-of-the-box:
uthash
dirait qu'il pourrait en être assez lourd augmentation de code de taille, certaines macros sont beaucoup de code.OriginalL'auteur deltheil
Blender (les graphismes en 3D de l'application) a son propre hachage bibliothèque appelée BLI_ghash, il a quelques fonctionnalités bien utiles.
Tout pas écrit comme une bibliothèque autonome, il n'est pas difficile à extraire, mais il peut être utile comme une référence. (note ses sous licence GPL2).
D'autres ajouts:
La seule chose qu'il ne fait pas tout à fait aussi bien qu'il le pourrait, à partir de votre description est d'allouer beaucoup de cartes, puisque chacun devient son propre pool de mémoire, mais theres pas une grosse limites que vous arrêter de partager un mempool, il n'a tout simplement pas sortir de la boîte.
Code Source:
BLI_ghash.c, BLI_ghash.h
BLI_mempool.c, BLI_mempool.h
Notes,
MEM_mallocN/MEM_freeN
fonctions peuvent être remplacés par desmalloc/free
OriginalL'auteur ideasman42