IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Création Table de Hachage


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de SweetLeaf
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 151
    Par défaut Création Table de Hachage
    Bonjour tout le monde !!

    J'ai un projet a faire dans le cadre de mes études et pour que ce dernier soit performant j'ai besoin d'une table de hachage.
    Je doit créer un Scrabble en C, avec recherche de mots, suivant les 7 lettres en main et les lettres déjà placées sur la grille.

    J'ai déjà regarder un peu partout sur le net dans tous les forums (ou presque) pour me renseigner sur cette structure de données.

    Le problème est le suivant, je n'ai toujours pas réussi à trouver une doc qui m'explique comment ca fonctionne !
    Je n'ai envie que l'on me donne une table de hachage ca ne me serai pas bénéfique, mais si quelqu'un connait une bonne documentation avec laquelle je pourrai créer et implémenter une table de hachage ça me serai d'une grande utilité !

    Merci d'avance et bonne journée à tous !

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Un truc à ne pas oublier, c'est qu'une table de hachage fait une recherche "tout-ou-rien". C'est donc bien pour tester si un mot est dans un dictionnaire, mais pas pour en chercher plusieurs à la fois ou rechercher le plus long possible (pour ce dernier cas, un arbre serait mieux).

    La table de hachage, en fait, tu peux la voir comme un truc qui sépare une collection en sous-collections de taille supposée minimale. Le cas habituel introduit dans les écoles suppose que ces sous-collections sont des listes chaînées; la table de hachage est donc, en fait, un tableau de listes chaînées.

    L'autre partie importante, c'est la fonction de hachage. C'est elle qui va convertir la clé (par exemple, une chaîne de caractères) en un index dans la table. Si la fonction de hachage retourne la même valeur pour deux clés différentes, on appelle ça une collision. Les collisions sont inévitables s'il existe plus de clés différentes que de valeur de hachage (principe des tiroirs: Si tu as plus de chaussettes que de tiroirs, au moins un tiroir contiendra au moins deux chaussettes).

    Il faudra écrire la fonction de hachage de manière à ne pas avoir plus de collisions que nécessaires. Typiquement pour du texte, on a tendance pour chaque caractère à faire un décalage binaire de 5 ou 6 bits et ajouter le caractère.
    S'il y a zéro collision dans une table, chaque liste contient au plus un élément.

    Ensuite, le fonctionnement est assez simple:
    • En recherche:
      1. Hacher la clé de ce qu'on veut ajouter
      2. Choisir la liste correspondante dans la table de hachage
      3. Parcourir la liste en comparant à chaque fois la clé jusqu'à égalité ou fin de liste.
    • En ajout:
      • Faire une recherche de la clé.
      • Ajouter en fin de liste chaînée si on n'a pas trouvé.


    Ensuite, on peut faire des trucs plus techniques, comme utiliser des arbres binaires de recherche (ou des tables de hachage sur une clé différente) à la place des listes chaînées. Ça dépend de l'usage, en fait. Vu qu'un dictionnaire est immuable en mémoire, on pourrait probablement utiliser des tableaux triés...
    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.

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Voici deux discussion qui traitent de différentes fonctions de hachage:
    http://www.cse.yorku.ca/~oz/hash.html
    http://burtleburtle.net/bob/hash/doobs.html
    http://www.concentric.net/~Ttwang/tech/inthash.htm

    Dans un premier temps, la fonction djb2 donnée dans le premier de ces trois liens est sans doute un bon point de départ.

    Sinon, si ton projet t'autorise l'utilisation de bibliothèques externes, tu peux toujours considérer les structures de données que GLib a à t'offrir, ou t'inspirer de leur implantation.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. création d'une table de hachage
    Par étoile de mer dans le forum Débuter
    Réponses: 15
    Dernier message: 26/09/2009, 21h17
  2. [noob]création table
    Par ggnore dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/01/2005, 11h18
  3. création table
    Par lepierre dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 17/09/2004, 11h32
  4. [Conception] Table de hachage et doublons de clés
    Par mammou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/05/2004, 19h16
  5. Réponses: 2
    Dernier message: 05/02/2004, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo