Bonsoir à tous les developpeurs ici présentsi,
SVp, est ce quil ya quelqun qui peut m'aider a developper une fonction qui permet de parcourir les liste chainées de chaque element de la table de hachage.*
merci
Bonsoir à tous les developpeurs ici présentsi,
SVp, est ce quil ya quelqun qui peut m'aider a developper une fonction qui permet de parcourir les liste chainées de chaque element de la table de hachage.*
merci
Le jour est le père du labeur et la nuit est la mère des pensées.
Une fois que tu as trouvé la bonne entrée dans ta table de hachage, tu as donc un pointeur sur une liste chainée. Tu la parcours jusqu'à trouver l'elément, comme tu parcourerais n'importe qu'elle autre liste chainée.
Une table de hashage fonctionne avec une fonction de hashage
table de hashage : tableau de listes chainées
fonction de hashage : permet de choisir dans quelle liste on sotck la donnée ou que établie la recherche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 struct table{ unsigned int taille; Liste* table; }; typedef struct table *TableH;
Plutôt que "tableau de listes chaînées", je préfère dire "tableau de conteneurs associatifs", car on peut y mettre autre chose que des listes chaînées.
Y compris des arbres binaires de recherche, ou même d'autres tables de hachage avec une fonction de hachage différente, et qui contiendraient elles-mêmes des tableaux de listes chaînées.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
En effet, mais ceci n'était qu'un exemple.
Juste une remarque, on dit en anglais "hash table", en français "table de hachage", mais ..... pas "table de hashage" !
La remarque de Médinoc est fort judicieuse car il existe plein d'implémentations (dont certaines sont réellement très complexe) et la résolution des collisions peut prendre différentes formes.
Vincent Rogier.
Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog
Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !
OCILIB (C Driver for Oracle)
Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
en recherchant sur internet tu aurais surement trouvé
Moi, lors d'un projet, sur une table de hashage avec liste simplement chaîné :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 unsigned int hachageString(char *chaine,int max){ unsigned int hash = 0, i = 0; while( i < strlen(chaine) ){ hash = ((hash *26) + chaine[i])% max; ++i; } return hash; }
retourne dans quelle case du tableau effectuer la rechercher
Ouh là...
Par construction, une table de hash à N entrées et la fonction de hash va retourner un nombre entre 0 et N-1...
C'est une surjection et impossible d'empêcher les collisions. Dans ce cas, il y aura plusieurs éléments "associés" à l'entrée correspondante qu'on met en général dans une liste simple ou doublement chainée (si on veut les placer dans "l'ordre" de la clé).
Si on ne peut pas empêcher les collisions, on peut essayer de trouver une fonction de hash qui répartissent de façon plus uniforme les éléments.
Ex: Si la clé est toujours une chaine de 10 caractères, utiliser la longueur de la chaine comme fonction de hash 'fonctionne' mais toutes les éléments seront associés à la meme entrée.
- W
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager