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éer un tableau à partir d'une table de hachage


Sujet :

C

  1. #21
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Celle-là, non.

    CreerTableMotsCompacts() doit être modifiée, par contre.
    Oui, mais là CreerTableauLigne requiert 2 parametres , or nous on a
    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
    int * CreerTableauLigne(ChainonMot const*pc)
    {
        size_t taille = GetNbLignes(pc);
        ChainonCoord const *pcCoord;
        int * tableauLigne=malloc(taille*sizeof(int));
        if(tableauLigne!=NULL)
        {
            size_t i=0;
     
                int annex=-1;
                for(pcCoord=coord_GetPremierC(GetPtrCoordC(pc));pcCoord!=NULL;pcCoord= coord_GetNextC(pcCoord))
                {
                    if( GetLigne(pcCoord)!=annex)
                    {
                       tableauLigne[i]=GetLigne(pcCoord);
                        annex=GetLigne(pcCoord);
                        i++;
                    }
                }
                assert(i==taille);
     
        }
     
         return tableauLigne;
     
    }

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Ah c'est vrai. Supprime le second paramètre dans l'appel, il est inutile.

  3. #23
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    c(est faux comme idée n'est ce pas
    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
    MotCompact* CreerTableMotsCompacts(TableHachageMot *DblTableHash1fr)
    {
     
       MotCompact *pRet=malloc(TAILLEHASH * TAILLEHASH *sizeof*pRet);
     
        int i=0,j,k;
        if(pRet!=NULL)
        {
            for(j=0;j<TAILLEHASH;j++)
            {
                for(k=0;k<TAILLEHASH;k++)
                {
                  //  n=nombreLigne(&DblTableHash1fr[j][k]);
                  InitialiserMotCompact(pRet[i],&DblTableHash1fr[j][k]);
                    i++;
                }
             }
        }
     
        return  pRet;
    }

  4. #24
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    C'est bien la modif que je prévoyais de faire, mais ce n'est que le début, en fait.

    Déjà, on est d'accord: C'est la table des 1-mots, en théorie elle est supposée être diagonale, non?

  5. #25
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est bien la modif que je prévoyais de faire, mais ce n'est que le début, en fait.

    Déjà, on est d'accord: C'est la table des 1-mots, en théorie elle est supposée être diagonale, non?
    Oui,

  6. #26
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Dans ce cas, on va commencer par se faire un tableau de TAILLEHASH structures de ce type:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct tableauMotsCompacts
    {
    	size_t nbMotsCompacts;
    	MotCompact *pMotsCompacts;
    } TableauMotsCompacts;
    Essaie de trouver ce qu'on va en faire.

  7. #27
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci, mais j'ai pas bien saisi les champs de la strucuture

  8. #28
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    N'oublie pas que la table de hachage est un tableau de listes chaînées. Nous, on va en faire un tableau de tableaux.

    Un truc de ce genre-ci:
    Code C : 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
    TableauMotsCompacts* CreerTableMotsCompacts(TableHachageMot *DblTableHash1fr)
    {
    	TableauMotsCompacts *pRet = malloc(TAILLEHASH * sizeof*pRet);
     
    	size_t iHash=0;
    	if(pRet!=NULL)
    	{
    	        for(iHash=0 ; iHash<TAILLEHASH ; iHash++)
    	        {
    			ChainonMot const *pc;
    			size_t nTab=0, iTab=0;
     
    			/*Premier parcours: Comptage*/
    			for(pc=GetPremierC(&DblTableHash1fr[iHash][iHash]) ; pc!=NULL ; pc=GetNextC(pc))
    				nTab++;
     
    			pRet[iHash].nbMotsCompacts = nTab;
    			pRet[iHash].pMotsCompacts = malloc(nTab * sizeof(MotCompact));
    			if(pRet[iHash].pMotsCompacts != NULL)
    			{
    				/*Second parcours: Copie/Initialisation*/
    				for(pc=GetPremierC(&DblTableHash1fr[iHash][iHash]) ; pc!=NULL ; pc=GetNextC(pc))
    				{
    					InitialiserMotCompact(&pRet[iHash].pMotsCompacts[iTab], pc);
    					iTab++;
    				}
    			}
    		}
    	}
    	return pRet;
    }
    On peut faire encore mieux question localité, mais pour l'instant on va attendre d'avoir un truc qui marche.

  9. #29
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Plutôt dans un fichier .h, genre le même que celui où est définie la structure MotCompact.

  10. #30
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Là ya plus d'erreurs avec cette fonction,
    mais là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MotCompact* RechercherMot(MotCompact const  pc[],char*  mot)
    {
        int i;
        for(i=0;i<TAILLEHASH;i++)
        {
            if(strcmp(GetMotCompact(&pc[i]), mot ) == 0)
            return (&pc[i]);
        }
        return NULL;
    }
    ya une erreur se/main.c|2023|attention : return discards qualifiers from pointer target type|

  11. #31
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Toujours const vs. non-const.
    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
    MotCompact* RechercherMot(MotCompact p[], char const * mot)
    {
        size_t i;
        for(i=0 ; i<TAILLEHASH ; i++)
        {
            if(strcmp(GetMotCompact(&p[i]), mot ) == 0)
            return (&p[i]);
        }
        return NULL;
    }
    MotCompact const* RechercherMot(MotCompact const pc[], char const * mot)
    {
        size_t i;
        for(i=0 ; i<TAILLEHASH ; i++)
        {
            if(strcmp(GetMotCompact(&pc[i]), mot ) == 0)
            return (&pc[i]);
        }
        return NULL;
    }

  12. #32
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    donc là il me reste de trier le tableau c'est ça?

  13. #33
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Pour une recherche linéaire, tu n'en as pas besoin.
    Mais si tu as besoin de performance, tu dois:
    1. Trier le tableau juste après l'avoir créé (par exemple, dans la fonction CreerTableMotsCompacts(), juste avant la fin du deuxième if()).
      • Pour ça, tu peux utiliser la fonction qsort().
    2. Modifier le code de RechercherMot() pour employer bsearch() au lieu d'une recherche linéaire.

  14. #34
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    dance ce cas , je vais donc trier le tableau pour augmenter la performances

  15. #35
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Sais-tu toujours faire une fonction callback pour qsort() ?

  16. #36
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Sais-tu toujours faire une fonction callback pour qsort() ?
    non

  17. #37
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    int MotCompact_qsort_callback(const void *pcvA, const void *pcvB)
    {
    	const MotCompare * pcA = pcvA;
    	const MotCompare * pcB = pcvB;
    	return strcmp(GetMotCompact(pcA), GetMotCompact(pcB));
    }
     
    /*Pour bsearch, on passera directement la chaîne en paramètre:
      Pas besoin de créer un faux MotCompact pour ça...*/
    int MotCompact_bsearch_callback(cont void *pcvKey, const void *pcvTest)
    {
    	const char * pcKey = pcvKey;
    	const MotCompare * pcTest = pcvTest;
    	return strcmp(pcKey, GetMotCompact(pcTest));
    }

  18. #38
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    MErci Médinoc,
    donc si j'ai bien compri pour chercher le mot "bonjour ", je fais MotCompact_bsearch_callback("bonjour")?
    c'est ca?

  19. #39
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Tu n'as pas bien compris le concept de callback, n'est-ce pas?

  20. #40
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Tu n'as pas bien compris le concept de callback, n'est-ce pas?
    oui

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

Discussions similaires

  1. [MySQL] Créer un tableau à partir d'une base de données
    Par barakobama95 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 30/09/2013, 16h58
  2. Créer un array à partir d'une table
    Par FanFan44 dans le forum Débutez
    Réponses: 4
    Dernier message: 14/06/2013, 17h50
  3. [MySQL] Créer un tableau à partir d'une requete SQL
    Par extream dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 02/06/2013, 20h11
  4. Réponses: 1
    Dernier message: 17/04/2013, 20h00
  5. [MySQL] créer un tableau à partir d'une base de donnée
    Par bastien dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/01/2009, 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