Comment voulez-vous mettre en œuvre une table de hachage dans le langage x?
Le point de cette question est de recueillir une liste d'exemples de la table de hachage des implémentations à l'aide de tableaux dans les différentes langues. Il serait bien aussi si quelqu'un pouvait jeter dans un joli aperçu détaillé de la façon dont ils fonctionnent, et ce qui se passe avec chaque exemple.
Edit:
Pourquoi ne pas simplement utiliser le construit dans les fonctions de hachage dans votre langue spécifique?
Parce que nous devons savoir comment les tables de hachage de travail et être capable de les mettre en œuvre. Cela peut ne pas sembler un super sujet important, mais de savoir comment l'un des plus utilisés structures de données des œuvres semble assez important pour moi. Si c'est pour devenir le wikipedia de programmation, puis ceux-ci sont quelques-uns des types de questions que je vais venir ici pour. Je ne suis pas à la recherche d'un CS livre écrit ici. Je pourrais aller traction introduction aux Algorithmes de l'étagère et de lire le chapitre sur les tables de hachage et d'obtenir ce type d'information. Plus précisément ce que je suis à la recherche pour sont exemples de code. Pas seulement pour moi en particulier, mais aussi pour d'autres qui auraient peut-être un jour être à la recherche d'informations similaires et de tomber sur cette page.
Pour être plus précis: Si vous avait pour les mettre en œuvre, et ne pouvait pas utiliser les fonctions intégrées, comment le feriez-vous?
Vous n'avez pas besoin de mettre le code ici. Mettre dans pastebin et juste un lien.
- L'idée est DONC de organiquement devenir le Wikipedia de programmation. Ne le forcez pas à des questions; ça sent le karma de l'agriculture.
Vous devez vous connecter pour publier un commentaire.
Une table de hachage une structure de données qui permet la recherche d'éléments dans les temps constant. Il fonctionne par une valeur de hachage et la conversion de cette valeur à un décalage dans un tableau. Le concept d'une table de hachage est assez facile à comprendre, mais la mise en œuvre est évidemment plus difficile. Je ne suis pas le collage de l'ensemble de la table de hachage ici, mais en voici quelques extraits d'une table de hachage, j'ai fait en C il y a quelques semaines...
L'une des bases de la création d'une table de hachage est d'avoir une bonne fonction de hachage. J'ai utilisé le djb2 fonction de hachage dans ma table de hachage:
Puis vient le code lui-même pour créer et gérer les seaux dans le tableau
AppendLinkedNode trouve le dernier nœud de la liste, et ajoute un nouveau nœud à elle.
Le code pourra être utilisé comme ceci:
Trouver un nœud est aussi simple que:
Et est utilisée comme suit:
char* value = FindNode("10");
depuisFindNode
retourneHashTable*
. Si vous être à la recherche à quelque chose le long des lignes de:char* value = FindNode("10")->value;
Une implémentation de Java dans < 60 LoC
list.add(new KeyValuePair(key, value));
est en train de faire à la fin de laadd
fonction?values
variable membre.Une table de hachage est vraiment un concept simple: c'est un tableau dans lequel les paires clé-valeur sont placés dans des, (comme un tableau associatif) par le schéma suivant:
Une fonction de hachage hachages la clé d'une (on l'espère) inutilisé de l'indice dans le tableau. la valeur est ensuite placé dans le tableau à l'index.
La récupération de données est facile, comme l'index dans le tableau peut être calculée à l'aide de la fonction de hachage, donc l'air est ~ O(1).
Un problème survient lorsqu'une fonction de hachage cartes de 2 clés différentes pour le même indice...il y a beaucoup de façons de traiter ce qui je ne détaillerai pas ici...
Les tables de hachage sont un moyen fondamental de stockage et de récupération des données rapidement, et est "intégrée" dans presque l'ensemble de la programmation des bibliothèques de langue.
J'étais à la recherche d'un portable C table de hachage de la mise en œuvre et s'est intéressé à la façon de mettre en œuvre un moi-même. Après avoir cherché un peu j'ai trouvé:
Julienne Walker est L'Art de Hachage qui a quelques bons tutoriels sur le hachage et les tables de hachage. Leur mise en œuvre est un peu plus complexe que ce que je pensais, mais ça a été une excellente lecture.
Voici mon code pour une Table de Hachage, mise en œuvre en Java. Souffre d'un problème mineur - la clé des champs de valeur et ne sont pas les mêmes. Peut le modifier dans l'avenir.
Je pense que vous devez être un peu plus précis. Il existe plusieurs variantes sur les tables de hashage en ce qui concerne les options suivantes
La liste peut continuer encore et encore. Chacune de ces contraintes pourrait conduire à de multiples implémentations dans n'importe quelle langue.
Personnellement, je voudrais juste utiliser le microphone de table de hachage qui est disponible dans ma langue de son choix. La seule raison pour laquelle je pourrait même envisager de mettre mon propre serait dû à des problèmes de performance, et même alors, il est difficile de battre la plupart des implémentations existantes.
Pour ceux qui peuvent utiliser le code ci-dessus, note la fuite de mémoire:
Et à compléter le code:
Minimale de mise en œuvre en F# comme une fonction qui crée une table de hachage à partir d'une séquence de paires clé-valeur et retourne une fonction qui recherche dans la table de hachage pour la valeur associée à la clé donnée:
k.GetHashCode()
peut retourner un nombre négatif (par exemple,"Key with negative hashcode".GetHashCode()
retourne -648767821), qui, à son tour, permettra de rendre le Système.IndexOutOfRangeException lors du calcul d'un seau, pour clés tels par la fonction f.Je suis allé lire quelques de Wikipedia-page sur le hachage: http://en.wikipedia.org/wiki/Hash_table. Il ressemble à beaucoup de travail, de mettre en place un code pour une table de hachage ici, surtout depuis que la plupart des langues que j'utilise déjà les avoir intégrés. Pourquoi voudriez-vous implémentations ici? Cette substance appartient vraiment dans une des langues de la bibliothèque.
Veuillez élaborer sur ce que vos solutions attendus devrait inclure:
Également état de ce que le but de la collecte est ici. Une sérieuse mise en œuvre sera facilement être tout à fait un mouthfull = cela conduira à de très longues réponses (peut-être quelques pages chaque). Vous pourriez également être attirez les gens de copier le code à partir d'une bibliothèque...