Table de brouillage
Dans le de l'informatique, une table de brouillage , ou une carte de gâchis de , est une structure de données qui associe les clefs aux valeurs . L'opération primaire qu'elle soutient est efficacement une consultation de : donné une clef (par exemple le nom d'une personne), trouver la valeur correspondante (par exemple que le numéro du téléphone de la personne). Cela fonctionne à côté de transformer la clef using une fonction de gâchis en gâchis , un nombre de qui est employé pendant qu'un index dans une rangée pour localiser l'endroit désiré (" ; bucket" ;) là où les valeurs devraient être.
Les tables de brouillage soutiennent l'insertion efficace de nouvelles entrées (le O (1) ), et la recherche dépensée par temps les données required est souvent indépendant du nombre d'articles stockés ( O (1) en moyenne.
Complexité de temps et utilisations communes des tables de brouillage
Les tables de brouillage sont employées souvent pour mettre en application les ensembles associatifs des rangées et les cachettes comme des tables de brouillage des rangées fournissent le O (1) consultation de constant-temps de en moyenne, indépendamment du nombre d'articles dans la table. Tandis que théoriquement le temps des cas les pires de consultation peut être aussi mauvais qu'O ( n ), c'est pour des buts pratiques statistiquement impossibles à moins que la fonction de gâchis soit mal conçue ou à moins que l'ensemble de clefs est avec malveillance choisi avec la fonction de gâchis indiquée à l'esprit.Comparé à d'autres structures de données associatives de rangée, les tables de brouillage sont les plus utiles quand un grand nombre de disques doivent être stockés, particulièrement si la taille de l'ensemble de données peut être prévue.
Des tables de brouillage peuvent être employées en tant que structures de données de dans-mémoire. Des tables de brouillage peuvent également être adoptées pour l'usage avec les structures de données à disques d'utilisation d'index de base de données des structures de données persistantes parfois basées sur des tables de brouillage, bien que les arbres équilibrés par soient plus populaires.
Choix d'une bonne fonction de gâchis
voient également :
la fonction de gâchis Une bonne fonction de gâchis est essentielle pour la bonne exécution de table de brouillage. Un choix pauvre d'une fonction de gâchis est susceptible de mener au groupant , dans lequel la probabilité des clefs traçant dans le même seau de gâchis (c. une collision de ) est sensiblement plus grande qu'être prévu d'une fonction aléatoire. Une probabilité différente de zéro de collision est inévitable dans n'importe quelle exécution de gâchis, mais habituellement le nombre d'opérations exigées pour résoudre des balances d'une collision linéairement avec le nombre de clefs traçant dans le même seau, ainsi les collisions excessives dégraderont l'exécution de manière significative. En outre, quelques fonctions de gâchis sont informatique chères, ainsi le nombre de heures (et, dans certains cas, la mémoire) pris pour calculer le gâchis peuvent être onéreux.
Le choix d'une bonne fonction de gâchis est rusé. La littérature est remplie des choix pauvres, du moins une fois mesurée par des normes modernes. Par exemple, le gâchis multiplicatif très populaire préconisé par le Donald Knuth dans le l'art de la programmation par ordinateur (voir la référence ci-dessous) a en particulier le comportement de groupement pauvre. Cependant, puisque le brouillage pauvre dégrade simplement l'exécution de table de brouillage pour des distributions particulières de clef d'entrée, de tels problèmes vont généralement non détectés.
La littérature est pareillement clairsemée sur les critères pour choisir une fonction de gâchis. À la différence de la plupart des autres structures fondamentales d'algorithmes et de données, il n'y a aucun consensus universel sur ce qui fait un " ; good" ; fonction de gâchis. Le reste de cette section est organisé par trois critères : simplicité, vitesse, et force. En outre, il examinera des algorithmes connus pour se comporter bien par ces critères.
La simplicité et la vitesse sont aisément mesurées objectivement (par le nombre de lignes de code et de repères d'unité centrale de traitement, par exemple), mais la force est un concept plus glissant. Évidemment, une fonction de gâchis cryptographique tel que le SHA-1 répondrait aux exigences relativement relâchées de force requises pour des tables de brouillage, mais leur lenteur et complexité les rend désagréables. Cependant, using des fonctions de gâchis cryptographiques peut se protéger contre des attaques de collision quand le module de table de brouillage et ses facteurs peuvent être maintenus secrets de l'attaquant, < ! -- voir la discussion à la page d'entretien ; a besoin juste d'une référence --> ou alternativement, en appliquant un sel secret . Cependant, pour ces cas spécialisés, une fonction de gâchis universelle peut être employée au lieu d'un gâchis statique.
En l'absence d'une mesure standard pour la force de fonction de gâchis, la situation actuelle courante est d'utiliser une batterie des essais statistiques du pour mesurer si la fonction de gâchis peut être aisément distinguée d'une fonction aléatoire. Discutablement l'essai le plus important est de déterminer si la fonction de gâchis montre l'effet d'avalanche de , qui essentiellement les déclarer que n'importe quel changement à bit unique de la clef d'entrée devrait affecter, en moyenne, moitié du peu dans le rendement. Bret Mulvey préconise examiner l'état strict d'avalanche de en particulier, qui déclare que, pour n'importe quel changement à bit unique, chacun du peu de rendement devrait changer avec la probabilité un demi-, indépendant de l'autre peu dans la clef. Les fonctions de gâchis purement additives telles que le centre de détection et de contrôle échouent cette condition plus forte malheureux.
Clairement, une fonction de gâchis forte devrait avoir une distribution uniforme des valeurs de gâchis. Bret Mulvey propose l'utilisation d'un essai de chi-squared pour l'uniformité, basé sur la puissance de de deux tailles de table de brouillage de s'étendant de 21 à 216. Cet essai est considérablement plus sensible que beaucoup d'autres proposé pour des fonctions de gâchis de mesure, et trouve des problèmes dans beaucoup de fonctions de gâchis populaires.
Heureusement, il y a de bonnes fonctions de gâchis qui répondent à tous ces critères. Toute la classe la plus simple consomment un byte de la clef d'entrée par itération de la boucle intérieure. Dans cette classe, la simplicité et la vitesse sont étroitement liées, car les algorithmes rapides simplement n'ont pas le temps pour exécuter des calculs complexes.
Une exécution mathématique de byte-par-byte qui se comporte particulièrement bien est le gâchis d'Un-à-un-temps de Jenkins, adapté ici d'un article par Bob Jenkins, son créateur.
lang=" de pour (I = 0 ; i < key_len ; i++) { clef du gâchis += ; gâchis += (gâchis << 10) ; ^= de gâchis (gâchis >> 6) ; } gâchis += (gâchis << 3) ; ^= de gâchis (gâchis >> 11) ; gâchis += (gâchis << 15) ; gâchis de retour ; }
Le comportement d'avalanche de ce gâchis est montré du côté droit. L'image a été faite using AvalancheTest de Bret Mulvey dans sa panoplie d'outils de Hash.
Chacune des 24 rangées correspond à un à bit unique dans la clef d'entrée de 3 bytes, et chacune des 32 colonnes correspond à un peu dans le gâchis de rendement. Des couleurs sont choisies par à quel point les affects de peu principal d'entrée donnés le gâchis de rendement mordu : une place verte indique bon mélangeant le comportement, un comportement de mélange faible carré jaune, et le rouge n'indiquerait aucun mélange. Seulement quelque peu en dernier byte de la clef d'entrée est faiblement mélangé à une minorité de peu dans le gâchis de rendement, une exécution énormément meilleure qu'un certain nombre de fonctions de gâchis employées couramment.
Beaucoup de fonctions de gâchis utilisées généralement exécutent mal une fois soumises à un tel essai rigoureux d'avalanche. Le gâchis largement favorisé du FNV , par exemple, montre beaucoup de peu sans le mélange du tout, particulièrement pour des clefs courtes. Voir l'évaluation de FNV par Bret Mulvey pour une analyse plus complète.
Si la vitesse est plus importante que la simplicité, alors la classe des fonctions de gâchis qui consomment des morceaux de multibyte par itération peut être d'intérêt. Un des plus sophistiquée est " ; lookup3" ; par Bob Jenkins, qui consomme l'entrée dans 12 morceaux de byte (bit 96). Note, bien que, que n'importe quelle amélioration de vitesse de l'utilisation de ce gâchis est seulement pour être utile pour de grandes clefs, et que la complexité accrue peut également avoir des conséquences de vitesse telles qu'empêcher un compilateur de linéarisation d'inlining la fonction de gâchis. Bret Mulvey a analysé une version antérieure lookup2, et trouvé lui pour avoir l'excellent comportement d'avalanche.
Une propriété souhaitable d'une fonction de gâchis est que la conversion de la valeur de gâchis (en général 32 bits) en index de seau pour une table de brouillage de particulier-taille peut être faite simplement par le masquage, préservant seulement le peu inférieur de k pour une table de la taille 2k (une opération équivalente à calculer le modulo de valeur de gâchis la taille de table). Cette propriété permet la technique du doublement par accroissement de la taille de la table de brouillage - chaque seau dans les vieilles cartes de table seulement à deux dans la nouvelle table. En raison de son utilisation de XOR-se plier, le gâchis de FNV n'a pas cette propriété. Un certain plus vieux hache est encore plus mauvais, exigeant des tailles de table d'être un nombre premier plutôt qu'une puissance de deux, calculant encore l'index de seau comme modulo de valeur de gâchis la taille de table. Généralement une telle condition est un signe d'une fonction fondamentalement faible ; using la table de perfection une taille est un produit de remplacement pauvre pour l'usage d'une fonction plus forte.
Résolution de collision
Si deux clefs hachent au même index, les disques correspondants ne peuvent pas être stockés dans le même endroit. Ainsi, s'il est déjà occupé, nous devons trouver un autre endroit pour stocker le nouveau record, et le faisons de sorte que nous puissions le trouver quand nous le regardons vers le haut plus tard.Pour donner une idée d'importance d'une bonne stratégie de résolution de collision, considérer le résultat suivant, dérivé using le paradoxe de l'anniversaire . Même si nous supposons que notre fonction de gâchis produit le aléatoire d'index uniformément distribué au-dessus de la rangée, et même pour une table de brouillage avec 1 million d'index, il y a une possibilité de 95% au moins d'une collision se produisant avant qu'elle contienne 2500 disques.
Il y a un certain nombre de techniques de résolution de collision, mais les plus populaires sont enchaînant et de adressage ouvert.
Enchaînement séparé
Simplement parfois appelé le enchaînant , cette technique sous sa forme plus simple a une liste chaînée des disques insérés à chaque fente dans les références de rangée. Chaque liste chaînée a chaque élément qui se heurte à la même fente. L'insertion exige trouver la fente correcte, et le rattachement à l'une ou l'autre fin de la liste dans cette fente ; la suppression exige rechercher la liste et le déplacement.
Les tables de brouillage enchaînées ont des avantages par rapport aux tables de brouillage adressées ouvertes parce que l'opération de déplacement est simple et remettre à la côte la table peut être remis à plus tard pendant un temps beaucoup plus long parce que le d'exécution dégrade plus avec élégance même lorsque chaque fente est employée. En effet, beaucoup de tables de brouillage de enchaînement peuvent ne pas exiger remettre à la côte du tout puisque la dégradation d'exécution est linéaire car la table remplit. Par exemple, une table de brouillage de enchaînement contenant deux fois sa capacité recommandée de données serait seulement environ deux fois aussi lente en moyenne comme même table à sa capacité recommandée.
Les tables de brouillage enchaînées héritent des inconvénients des listes chaînées. En stockant de petits disques, les frais généraux de la liste chaînée peuvent être significatifs. Un inconvénient additionnel est cela qui traverse une liste chaînée a l'exécution pauvre de cachette de .
Des structures de données alternatives peuvent être employées pour des chaînes au lieu des listes chaînées. En employant un arbre de individu-équilibrage , par exemple, la période des cas les pires théorique d'une table de brouillage peut être rapportée à O ( n de notation) plutôt qu'O ( n ). Cependant, puisque chaque liste est prévue pour être courte, cette approche est habituellement inefficace à moins que la table de brouillage soit conçue pour fonctionner à la pleine capacité ou il y a des taux de collision exceptionnellement élevés, en tant que force se produisent dans l'entrée conçue pour causer des collisions. Les rangées dynamiques peuvent également être employées pour diminuer des frais généraux de l'espace et pour améliorer l'exécution de cachette quand les disques sont petits.
Quelques réalisations de enchaînement emploient une optimisation où le premier disque de chaque chaîne est stocké dans la table. Le but est d'augmenter l'efficacité de cachette de l'accès de table de brouillage. Afin d'éviter de gaspiller des grands nombres de l'espace, de telles tables de brouillage maintiendraient une densité d'occupation de de 1.
Adressage ouvert
voient également :
adressage ouvert du
Les tables de brouillage de adressage ouvertes stockent les disques directement dans la rangée. Cette approche s'appelle également le de hachage clôturé par . Une collision de gâchis est résolue par le sondant , ou recherchant par des endroits alternatifs dans la rangée (l'ordre de sonde de ) jusqu'ou au disque de cible est trouvé, ou une fente inutilisée de rangée est trouvée, qui indique qu'il n'y a aucune une telle clef dans la table. Les ordres bien connus de sonde incluent :
; probing linéaire : dans ce que l'intervalle entre les sondes est fixe - souvent à 1. ; probing quadratique : dans quel l'intervalle entre les augmentations de sondes proportionnelles à la valeur de gâchis (l'intervalle augmentant de ce fait linéairement et les index sont décrits par une fonction quadratique). ; Double brouillage : dans ce que l'intervalle entre les sondes est calculé par une autre fonction de gâchis.
Adressage ouvert contre l'enchaînement
Les tables de brouillage enchaînées ont les avantages suivants au-dessus de l'adressage ouvert :Elles sont simples pour mettre en application effectivement et pour exiger seulement des structures de données de base.
Du point de vue des fonctions de gâchis appropriées d'écriture, les tables de brouillage enchaînées sont peu sensibles au groupement, exigeant seulement la minimisation des collisions. L'adressage ouvert dépend de meilleures fonctions de gâchis pour éviter le groupement. C'est particulièrement important si les programmeurs de novice peuvent ajouter leurs propres fonctions de gâchis, mais même des programmeurs expérimentés peuvent être attrapés dehors par des effets de groupement inattendus.
Ils dégradent dans l'exécution plus avec élégance. Bien que les chaînes se développent plus longtemps pendant que la table remplit, une table de brouillage enchaînée ne peut pas " ; remplir up" ; et n'exhibe pas les augmentations soudaines en temps de consultation qui se produisent dans une proche-pleine table avec l'adressage ouvert. (le voient droit)
Si la table de brouillage stocke grand enregistre, environ 5 mots ou plus par disque, enchaînant des utilisations moins de mémoire que l'adressage ouvert.
Si la table de brouillage est clairsemée (c'est-à-dire, elle a une grande rangée avec beaucoup de fentes libres de rangée), l'enchaînement emploie moins de mémoire que l'adressage ouvert même pour de petits disques de 2 à 4 mots par disque dû à son stockage externe.
Pour de petites tailles record (quelques mots ou moins) les avantages de l'adressage ouvert sur place comparé à l'enchaînement sont :
Ils peuvent être espace-efficaces qu'enchaînant puisqu'ils n'ont pas besoin de ne stocker aucun indicateur ou de n'assigner aucun espace additionnel en dehors de la table de brouillage. Les listes chaînées simples exigent un mot des frais généraux par élément.
Les insertions évitent les frais généraux de temps de l'attribution de mémoire, et peuvent même être mises en application en l'absence d'un distributeur de mémoire.
Puisqu'il emploie le stockage interne, l'adressage ouvert évite l'adressage indirect supplémentaire exigé pour enchaîner le stockage externe. Il a également une meilleure localité de de la référence , en particulier avec le sondage linéaire. Avec de petites tailles record, ces facteurs peuvent rapporter une meilleure exécution qu'enchaînant, en particulier pour des consultations.
Ils peuvent être plus faciles au fabriquent en série, parce qu'ils n'emploient pas des indicateurs.
D'une part, l'adressage ouvert normal est un choix pauvre pour de grands éléments, depuis la cachette entière de de suffisance de ces éléments raye (niant l'avantage de cachette), et un grand nombre de l'espace est gaspillé sur de grandes fentes vides de table. Si la table d'adressage ouverte stocke seulement des références aux éléments (stockage externe), elle emploie l'espace comparable à l'enchaînement même pour de grands disques mais perd son avantage de vitesse.
D'une façon générale, l'adressage ouvert mieux est employé pour des tables de brouillage avec les petits disques qui peuvent être stockés dans la table (stockage interne) et l'ajustement dans une ligne de cachette. Ils sont particulièrement appropriés aux éléments d'un mot ou moins. Dans les cas où on s'attend à ce que les tables aient des indices de charge élevés, les disques sont grands, ou les données sont variable-sized, les tables de brouillage enchaînées exécutent souvent aussi bien ou améliorent.
Finalement, utilisé raisonnablement n'importe quel genre d'algorithme de table de brouillage est habituellement le rapide assez de ; et le pourcentage d'un calcul dépensé en code de table de brouillage est bas. L'utilisation de mémoire est rarement considérée excessive. Par conséquent, dans la plupart des cas les différences entre ces algorithmes est marginale, et d'autres considérations héritent typiquement le jeu.
Hachage fusionné
voient également : Le a fusionné
du brouillage
Un hybride de l'enchaînement et ouvrent adressant, les chaînes de hachage fusionnées de liens ensemble des noeuds dans la table elle-même.
Remettre à la côte de Tableau
Avec une bonne fonction de gâchis, une table de brouillage peut typiquement contenir au sujet de 70%&ndash ; 80% autant d'éléments comme il ajourne des fentes et se comporte toujours bien. Selon le mécanisme de résolution de collision, l'exécution peut commencer à souffrir ou graduellement ou nettement en tant que plus d'éléments sont ajoutés. Pour traiter ceci, quand la densité d'occupation dépasse un certain seuil, il est nécessaire d'assigner une nouvelle, plus grande table, et ajoute tout le contenu de la table originale à cette nouvelle table. Dans le classe de s HashMap de Java la ', par exemple, le seuil de densité d'occupation de défaut est 0.
Ceci peut être une opération très chère, et la nécessité pour elle est l'un des inconvénients de la table de brouillage. En fait, quelques méthodes naïves pour faire ceci, tel qu'agrandir la table par une chaque fois que vous ajoutez un nouvel élément, réduisent l'exécution tellement rigoureusement quant à rendent la table de brouillage inutile. Cependant, si la table est agrandie par quelques pour cent fixes, tels que 10% ou 100%, il peut montrer using l'analyse amortie par que ces resizings sont si peu fréquents que le temps moyen par insertion demeure constant-temps. Pour voir pourquoi c'est vrai, supposer qu'une table de brouillage using l'enchaînement commence à la taille minimum de 1 et est doublée chaque fois que elle remplit au-dessus de 100%. Si à la fin elle contient des éléments du n , alors le total ajoutent des opérations effectuées pour tous les resizings est :
1 + 2 + 4 + 8 de +… + n = 2 n - 1.
Puisque les coûts des resizings forment une série géométrique , tout le coût est O ( n ). Mais il est nécessaire également d'effectuer des opérations du n pour ajouter les éléments du n en premier lieu, ainsi toute l'heure d'ajouter des éléments du n avec remettre à la côte est O ( n ), un temps amorti d'O (1) par élément.
D'une part, quelques réalisations de table de brouillage, notamment dans les systèmes en temps réel ne peuvent pas payer le prix d'agrandir la table de brouillage d'un seul trait, parce qu'elle peut interrompre des opérations temps-critiques. Une approche simple est au commencement d'assigner la table avec assez d'espace pour le nombre prévu d'éléments et d'interdire l'addition de trop d'éléments. Une autre technique utile mais mémoire-intensive est d'exécuter remettre à la côte graduellement :
Assigner la nouvelle table de brouillage, mais laisser la vieille table de brouillage et vérifier les deux tables pendant les consultations.
Chaque fois que une insertion est effectuée, ajouter qu'élément à la nouvelle table et déplacer également les éléments du k de la vieille table à la nouvelle table.
Quand tous les éléments sont enlevés de la vieille table, la désaffecter. Pour s'assurer que la vieille table sera complètement copiée plus d'avant que la nouvelle table elle-même doive être agrandie, il est nécessaire d'augmenter la taille de la table par un facteur d'au moins ( k + 1) k pendant remettre à la côte.
Le brouillage linéaire est un algorithme de table de brouillage qui permet l'expansion par accroissement de table de brouillage. Il est mis en application using une table de brouillage simple, mais avec deux fonctions possibles de consultation.
Une autre manière de diminuer le coût de la table remettant à la côte est de choisir une fonction de gâchis de telle manière que hache de la plupart des valeurs ne changent pas quand la table est remise à la côte. Cette approche, appelée le au brouillage conformé , est répandue dans à disques et distribué hache, où remettre à la côte est prohibitivement coûteux.
Issue commandée de récupération
Les données de magasin de tables de brouillage des endroits pseudo-aléatoires, ainsi en accédant aux données d'une façon assortie sont une opération très longue. D'autres structures de données telles que le Individu-équilibrant les arbres de recherche binaire fonctionnent généralement plus lentement (puisque leur temps de consultation est O ( n de notation)) et être un peu plus complexe pour mettre en application que des tables de brouillage mais pour maintenir une structure de données assortie à tout moment. Voir le une comparaison des tables de brouillage et des arbres de recherche binaire de individu-équilibrage .
Problèmes avec des tables de brouillage
Bien que les consultations de table de brouillage emploient le temps constant en moyenne, le temps passé peut être significatif. L'évaluation d'une bonne fonction de gâchis peut être une opération lente. En particulier, si l'indexation simple de rangée peut être employée à la place, c'est habituellement plus rapide.
Les tables de brouillage montrent en général la localité pauvre de du &mdash de la référence ; c'est-à-dire, les données à accéder sont distribuées apparemment au hasard dans la mémoire. Puisque les tables de brouillage causent les modèles d'accès qui sautent autour, ceci peut déclencher les coups manqués de la cachette de microprocesseur de qui entraînent de longs retards. Les structures de données compactes telles que des rangées, recherchées avec la recherche linéaire , peuvent être plus rapides si la table est relativement petite et les clefs sont bon marché pour comparer, comme avec des clefs simples de nombre entier. Selon la loi de Moore de , les tailles de cachette se développent exponentiellement et ainsi ce qui est considéré " ; small" ; peut augmenter. Le point d'exécution optimale varie de système/système.
Plus de manière significative, les tables de brouillage sont plus difficiles et sujettes aux erreurs pour écrire et employer. Les tables de brouillage exigent la conception d'une fonction de gâchis efficace pour chaque type principal, qui dans quelques situations est plus difficile et long pour concevoir et corriger que la fonction simple de comparaison exigée pour un Individu-équilibrant l'arbre de recherche binaire . Dans les tables de brouillage ouvrir-adressées il est assez facile de créer une fonction de gâchis pauvre.
En plus, dans quelques applications, un chapeau noir avec la connaissance de la fonction de gâchis peut pouvoir fournir l'information à un gâchis qui crée le comportement des cas les pires en causant des collisions excessives, ayant pour résultat la dégradation des performances très (c., un déni de service de attaque ). Dans des applications critiques, ou le brouillage universel peut être employé ou une structure de données avec de meilleures garanties des cas les pires peut être préférable. Pour des détails, voir que déni de service de de Crosby et de Wallach par l'intermédiaire de complexité algorithmique attaque .
Réalisations
Tandis que beaucoup de langages de programmation fournissent déjà la fonctionnalité de table de brouillage (voir l'appui de langue de pour les rangées associatives ), il y a plusieurs réalisations indépendantes intéressant la mention.Le gâchis clairsemé de Google le projet de Google SparseHash contient plusieurs réalisations de gâchis-carte en service chez Google, avec différentes caractéristiques de fonctionnement, y compris une exécution qui optimise pour l'espace et une qui optimisent pour la vitesse. Mémoire-optimisé est extrêmement mémoire-efficace avec seulement 2 bits/entrée de frais généraux.
SunriseDD une bibliothèque de C de source ouverte pour le stockage de table de brouillage des éléments de données arbitraires avec des consultations serrure-libres, le compte intégré de référence et l'itération garantie d'ordre. La bibliothèque peut participer à la référence externe comptant des systèmes ou employer son propre compte intégré de référence. Elle vient avec une série de fonctions de gâchis et permet l'utilisation des fonctions de gâchis fournies par temps d'exécution par l'intermédiaire du mécanisme de rappel de service. Le code source est bien documenté.
l'uthash ceci est une table de brouillage facile à utiliser pour des structures de C.
Un certain nombre de temps d'exécution de langue et/ou de bibliothèques standard emploient des tables de brouillage pour mettre en application leur soutien des rangées associatives.
Le logiciel écrit pour réduire au minimum l'utilisation de mémoire peut conserver la mémoire en maintenant toutes les cordes assignées dans une table de brouillage. Si une corde déjà existante est trouvée un indicateur à cette corde est retourné ; autrement, une nouvelle corde est assignée et ajoutée à la table de brouillage. (C'est la technique normale utilisée dedans blèsent pour les noms des variables et des fonctions ; voir la documentation pour l'interne et les fonctions interner-douces si vous vous servez de ce langage.) La compression de données réalisée de cette manière est habituellement environ 40%.
Voir également
style=" deFiltre de fleur de
Table de brouillage distribuée par
Fonction de gâchis
Algorithme de la recherche de chaîne de caractères de Rabin-Karp de
Liste de gâchis de
Arbre de gâchis de
Rangée de Judy de
Trie
Brouillage stable
Brouillage sujet à saisie
Suppression paresseuse - une méthode de de suppression d'une table de brouillage using l'adressage ouvert.
.
| Random links: | Gambell, Alaska | Hartland, le Connecticut | Elizabeth Shin | Université de national de Chungnam | Lyla (chanson) | Tabla_de_elección_arbitraria |