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 :

hashtable K7R second E page 144


Sujet :

C

  1. #1
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut hashtable K7R second E page 144
    Bonjour à tous,


    C'est une question plutôt mathématique.............. J'ai tenté de multiplier par 3 5 7 11.
    Toujours , j'ai des doublons pour 10 appels sur 11, 8 appels sur 11, 5 appels sur 11..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #define HASHSIZE 11
    #include <stdio.h>
     
    static struct nlist *hashtab[HASHSIZE] ;  /*   pointer table */
    unsigned hash (char *s);
     
    int main(void)
    {
    	printf("%u\t= Hello, world\n", hash ("Hello, world"));
    	printf("%u\t= hello, world\n", hash ("hello, world"));
    	printf("%u\t= Helo, world\n", hash ("Helo, world"));
    	printf("%u\t= Hella, world\n", hash ("Hella, world"));
    	printf("%u\t= Hello, World\n", hash ("Hello, World"));
    	printf("%u\t= Hello, WOrld\n", hash ("Hello, WOrld"));
    	printf("%u\t= Hello, worldd\n", hash ("Hello, worldd"));
    	printf("%u\t= Hello, wfrld\n", hash ("Hello, wfrld"));
    	printf("%u\t= Hello, worf\n", hash ("Hello, worf"));
    	printf("%u\t= Hlo, world\n", hash ("Hlo, world"));
    	return 0;
    }
     
     
    unsigned hash (char *s)
    {
      unsigned hashval;
      for (hashval = 0; *s != '\0' ; s++ )
        {
        hashval += *s + 5 * hashval;
        }
      return hashval % HASHSIZE;
    }
     
    /*   
    8       = Hello, world
    1       = hello, world
    8       = Helo, world
    6       = Hella, world
    6       = Hello, World
    2       = Hello, WOrld
    0       = Hello, worldd
    0       = Hello, wfrld
    5       = Hello, worf
    3       = Hlo, world
     */
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    bonjour,
    bah avec un hashsize a 11 tu ne peux pas non plus t'attendre à des merveilles !
    Pourquoi ne pas choisir une fonction de hash plus évoluée genre CRC32, et une liste plutôt qu'un tableau à taille fixe ?

  3. #3
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut
    CRC32

    Ça me semble un peu avancé...
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    bah ça marche bien sur les chaînes, mais bon ... une hashtable avec 11 positions c;est court ; tu auras forcément beaucoup de collisions, et ce quelle que soit la hashfunction.

Discussions similaires

  1. Actualiser div toutes les X secondes sans page externe
    Par Alexcontact dans le forum jQuery
    Réponses: 8
    Dernier message: 26/04/2014, 14h57
  2. Renvoi de page après x secondes
    Par Him dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/10/2006, 17h54
  3. [JSP]page de redirection de 5 seconde
    Par mamiberkof dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 01/05/2006, 19h50
  4. [Javascript] Réactualisez une page toutes les X secondes...
    Par funktastique dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 20/01/2006, 15h52
  5. Pb 6500 verouillages de pages par seconde
    Par Laurent MALAVASI dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/07/2003, 15h03

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