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 :

Trouver les ensembles contenant un élément


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut Trouver les ensembles contenant un élément
    Bonjour,

    Je bute actuellement sur un problème d'implémentation nouveau pour moi :
    J'ai un certain nombre d'éléments que je peux représenter par le type int ( environ une centaine d'entiers différents)
    et un certain nombre d'ensembles qui contiennent des éléments, les ensembles ne sont pas disjoints.

    Je recherche une représentation de ces ensembles et une fonction qui prend un élément en entrée et en sortie me donne tous les ensembles contenant cet élément.

    Quelle est la meilleure façon de coder cela en C ?

    Je vous remercie par avance pour toute aide apportée.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Bonsoir,

    Si un élément est un entier ou un décimal, alors un ensemble peut être un tableau d'entiers ou une liste chainée d'entiers.

    Si la taille de l'ensemble est amenée à beaucoup changer, il est plus facile d'utiliser une liste chainée. Si la taille de l'ensemble est bornée, alors un tableau d'entiers sera à choisir.

    Est-ce la taille du stockage des ensembles qui est important, pour ne pas avoir de redondance ?

    Pour chercher un élément dans tous les ensembles, on peut par exemple utiliser un tableau de tableau en C, le mieux est de trier chaque tableau puis effectuer une recherche binaire.

    Un exemple simple avec un tableau de tableaux statiques. Le trie se fait par qsort et la recherche par bsearch. Attention cependant si les ensembles sont déjà triés quicksort peut être lent sur de grands tableaux.

    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
     
    //Alloue statiquement N ensembles de 256 éléments
    int Ensembles[N][256];
    int i;
     
    //Remplir les Ensembles
    ...
     
    //Trie des tableaux
    for(i=0;i<N;i++)
        qsort(Ensembles[i],256,sizeof(int),compare);
     
     
    //fonction de comparaison d'entier pour quicksort
    int compare (const void *a, const void *b)
    {
        const int *ia = (const int *)a; // casting pointer types 
        const int *ib = (const int *)b;
        return *ia  - *ib; 
    }
     
    //fonction de recherche d'un entier dans les ensembles
    int *search_element(int Ens[][],int to_search,int N,int nbel){
        int e;
        int *result=calloc(N,sizeof(int));
        for(e=0;e<N;e++){
            if(bsearch(&to_search,Ens[e],nbel,sizeof(int),compare) != NULL)//C'est dans l'ensemble
                result[e] = 1;
        }
        return result;
    }

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut utilisation de l'indice
    Merci,

    Ce n'est pas la taille du stockage qui est importante, c'est la rapidité.

    J'ai eu depuis une autre idée avec des tableaux d'entier : c'est de représenter l'élément par l'indice.
    Chaque élément du tableau prend comme valeur 0 ou 1 ( si tableau1[n]==1 alors n est dans l'ensemble tableau1).
    J'ai une centaine d'entiers et également une centaine d'ensembles cela fait 10 000 tests, mais c'est un test très rapide, qu'en pensez_vous ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Oui c'est une solution.

    Le problème c'est que vous ne pouvez pas utiliser des ensembles qui contiennent des éléments dont la valeur est supérieure à 100.
    En contre partie la recherche est plus rapide puisque vous accédez directement aux valeurs (sans trie et sans recherche binaire), même si ces étapes sur peu d'entiers se font très rapidement, il n'y aura surement pas de différence en temps d'exécution.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    OK, mes ensembles sont bornés, je vais partir sur cette solution.
    Elle est très facile à implémenter en plus.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/12/2013, 00h17
  2. Trouver les fichiers contenant des annotations
    Par lahitsitely78 dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 18/02/2009, 11h52
  3. Trouver les éléments inutiles
    Par fbu78 dans le forum Access
    Réponses: 1
    Dernier message: 07/02/2008, 11h53
  4. générer toutes les permutations d'un ensemble fini d'éléments
    Par Didier77 dans le forum Algorithmes et structures de données
    Réponses: 17
    Dernier message: 25/09/2007, 07h34
  5. Trouver les fichiers contenant un mot avec FINDSTR
    Par soazig dans le forum Windows XP
    Réponses: 4
    Dernier message: 26/04/2007, 14h29

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