web-dev-qa-db-fra.com

Est-il possible d'accélérer une table de hachage en utilisant des arbres de recherche binaires pour une chaîne séparée?

Je souhaite mettre en place une table de hachage utilisant des arbres de recherche binaires afin de réduire la complexité de la recherche dans le processus de chaînage séparé de O(n) (à l'aide de la liste liée) à O (log n) (en utilisant BST) . Peut-on être fait, et si oui, alors comment? Il serait plus facile de comprendre si la solution est étape par étape, la mise en œuvre de la logique.

Je souhaite réduire le temps de recherche dans la haquetable (construire à l'aide d'une chaîne séparée), mais dans le même temps, je ne veux pas que le temps d'insertion augmente. Pour mon projet, je ne peux pas modifier la fonction de hachage pour réduire les collisions. Mais en raison de l'évolutivité, la collision se produit. J'essaie de trouver un travail autour, de sorte que je puisse travailler avec le meilleur accès et insérer du temps au cas où une collision se produit ... c'est-à-dire de gérer l'état actuel de la chose que de restructurer l'algorithme entier. Si cela ne panne pas, il devrai restructurer. Donc toutes les idées?

11
Aviral

L'utilisation d'un arbre binaire pour la manipulation de collision dans une table de hachage n'est pas tout simplement possible - cela a été fait.

Walter Bright est surtout connu comme l'inventeur du langage de programmation D , mais a également écrit une variante ECMAScript appelée DMDScript . Dans le passé, une prétendue titre de DMDScript (ou éventuellement un ancêtre - je semble vous rappeler que le nom DScript) était que ses hashtables avaient tendance à surperformer ceux-ci dans beaucoup de langues similaires. La raison - Manipulation de collision à l'aide d'arbres binaires.

Je ne me souviens pas exactement d'où cela vient, mais les arbres utilisés étaient des arbres binaires naïfs, sans système de balance partielle (non avl, rouge-noir ou quoi que ce soit), ce qui a du sens comme supposant que la haquetable elle-même soit redimensionnée quand elle devient surchargée et Vous n'êtes pas des taux absurdement improbables de collisions de hasch, les arbres binaires devraient toujours être petits. Fondamentalement, le pire des cas est toujours le même que d'utiliser une liste liée pour la manipulation de collision (sauf que vous payez le prix de deux pointeurs par nœud au lieu d'un), mais le cas moyen réduit la quantité de recherche dans chaque godet de hachage.

7
Steve314