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

Algorithmes et structures de données Discussion :

algo de hashtable trés rapide...voire même ULTRA RAPIDE...


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Points : 7
    Points
    7
    Par défaut algo de hashtable trés rapide...voire même ULTRA RAPIDE...
    bonjour,

    je voudrais coder (en C) un tableau qui contiendrait
    -des chaines de caracteres (identifiants)
    -la structure qui correspond

    et il faudrait que les accés en lecture et en ecriture soient les plus rapides possibles.

    quelqu'un a une idée ?

  2. #2
    Membre du Club Avatar de Ecclesiaste Dworkin
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 64
    Points
    64
    Par défaut
    Si tu veux juste l'algo, c'est cool... si tu le veux en c, tu t'es trompé de forum....


    Maintenant, ce que je ne comprends pas c'est "la structure qui correspond" .... tu veux dire quoi ??

    Edité par Gael.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    oui en fait mon algo que je veux (mais si mais si, c'est français comme phrase ! ) c'est une méthode qui permette d'entrer et de sortir des infos dans cette table de la façon la plus rapide possible. parce que si à chaque fois que je veux un objet, je dois parcourir la table séquentiellement et comparer l'identificateur avec celui que je recherche, mon code va mettre une éternité à s'executer.
    j'ai voulu m'inspirer des methodes de direct mapping utilisées par les memoires caches pour retrouver des valeurs, mais j'ai rien trouvé de vraiment efficace.

    j'espère que j'ai été clair maintenant (je ferais un bien mauvais prof, je suis nul pour expliquer qqchose )

  4. #4
    Membre du Club Avatar de Ecclesiaste Dworkin
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 64
    Points
    64
    Par défaut
    Ok... alors après ca dépend fortement du nombre d'entrée de ta table... mais tu peux faire un tableau a coté avec les numéros de cellule de chaque lettre de l'alphabet par exemple, comme ca tu ne "compareras" que des chaines potentielles...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    ouais, c'est une idée qu'il faudrait creuser, je t'explique l'utilité du truc:

    je code un compilateur PASCAL, et ce fameux tableau constitue la pile de données qui sera utilisée pour la génération du code de bas niveau.
    l'identifiant dont je parlais n'est autre que le nom de la variable (la structure contient quelque conneries utiles pour la suite du proj).
    et si je tombe sur un code PASCAL, genre avec tous les noms de variables començant par "var", je gagnerai pas de temps par rapport à du sequentiel..., et même j'en perdrais puisque je stockerai des trucs dans les tableau d'index de chaque lettre de l'alphabet.

    Edité par Gael.

  6. #6
    Membre du Club Avatar de Ecclesiaste Dworkin
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 64
    Points
    64
    Par défaut
    ouaip.... peut etre dirrectement une fonction qui te rend la structure (barbare, comme méthode, mais efficace)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    je vois pas bien ce que tu veux dire... elles seraient stockées où les données : plus de tableau ?

  8. #8
    Membre du Club Avatar de Ecclesiaste Dworkin
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 64
    Points
    64
    Par défaut
    ds les paramètres de ta fonction..... lol.....

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Puisque les chaînes de charactères sont uniques pourquoi ne pas utiliser simplement un arbre binaire? En attendant de trouver mieux.

    Sinon, Ecclesiaste Dworkin, pourquoi tu voulais mettre tes données dans les paramètres de ta fonction? Il faudrait les copier à la sortie de la fonction en dehors de la pile... En fait je ne te suis plus vraiment, là...

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Je viens de faire du ménage dans ce topic hautement instructif. Merci de clore ce débat et de revenir au sujet originel.

  11. #11
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Est-ce que la liste des chaînes de caractères (des identifiants je suppose) est intégralement connue avant d'avoir à créer ta hashtable, ou celle-ci est-elle remplie au fur et à mesure ?

    J'attire aussi ton attention sur un point important : ce n'est pas la peine de mettre 10 s à créer une hashtable qui te ferait gagner 1 s au total. Une hashtable ne sert à rien si tu as 100 enregistrements que tu vas lire 50 fois, car dans ce cas une lecture séquentielle en mémoire est largement assez performante.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    ben en fait, je lis le programme pascal et au fur et à mesure que je tombe sur des déclarations de variables, je les ajoute à la pile de données avec le nom de la variable (qui pourrait servir de clé), et la classe de la variable, ainsi que quelque broutilles sans interêt.
    donc le contenu de la liste est inconnu au début, je la remplis au fur et à mesure de la compilation.

    si je garde du sequentiel, je suis d'accord avec toi pour dire que ce sera efficace sur un programme d'ampleur restreinte. mais il faut aussi que mon compilateur soit performant pour compiler de trés gros programmes (beaucoup de données, et beaucoup d'accés)

  13. #13
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Est-ce que ton compilo est multi-passe ?
    Une première passe permettant de vérifier un minimum de syntaxe et de stocker l'ensemble des noms de variables, puis de faire la table de hashage (donc en connaissant toutes les variables).

    Sinon, tu peux espérer une distribution aléatoire des noms de variables avec quelques astuces : partir de la fin, ou du milieu (un coup en avant, puis un coup en arrière...).

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    en fait c'est parfait, je pense que j'ai trouvé.
    j'ai établi bien précisément mes besoins, et j'ai conclus qu'il me fallait tout simplement un algorithme de hachage dont la clé générée est au moins de 16 bits (possibilité de déclarer 65 000 variables dans le code pascal, ça me semble assez confortable )
    j'ai pas encore fini de lire le truc mais je crois que cette page répond à ma question:
    http://www.enseignement.polytechnique.fr/profs/informatique/Jean-Jacques.Levy/poly/main1/node17.html

    dans tous les cas merci à tous de vous être penché sur mon problème, ça m'a vachement aidé quand même !

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Un petit Résolu ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sin/cos/exp/log SSE ultra rapides : erreurs
    Par ionone dans le forum Langage
    Réponses: 1
    Dernier message: 02/09/2013, 11h03
  2. Réponses: 0
    Dernier message: 17/04/2012, 13h16
  3. [Compilateur] Un compilateur C ultra léger et ultra rapide : TCC
    Par Hibou57 dans le forum Choisir un environnement de développement
    Réponses: 4
    Dernier message: 08/10/2007, 22h43
  4. Parcours très rapide d'une arborescence ?
    Par Invité dans le forum C++Builder
    Réponses: 7
    Dernier message: 06/05/2005, 09h24

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