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 :

supression des doublons d'un tableau trié


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut supression des doublons d'un tableau trié
    Bonjour à tous,

    Je souhaiterai supprimer les doublons d'un tableau. Pour se faire, j'ai utilisé une méthode empirique. Je parcoure le tableau trié en comptant son nombre d'éléments n sans les doublons. Je crée un autre tableau de taille n et je range les valeurs du tableau trié sans les doublons dans ce tableau.

    Voici le code que j'ai utilisé :
    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
     
    int nombre_doublon(double *tab, int size)
    { 
      register int i;
       int k=1;
       for(i=0;i<size-1;++i)
       {  
         if(tab[i]!=tab[i+1])
         { ++k;}
       }
       return(k);
    }
     
    int suprime_doublon(double **res,double *tab,int size)
    {  
       double *t;
       int i,j,n_nondoublon;
       j=0;
     
        n_nondoublon=nombre_doublon(tab,size);
        t=Malloc(n_nondoublon,double);
     
       t[j]=tab[0];
       for(i=0;i<size;++i)
       {
          if(t[j]!=tab[i])
          { ++j;
          	t[j]=tab[i]; 
          }
     
       }  
       *res=t; 
       return(n_nondoublon);    
     }
    j'aimerai savoir si mon code peut être optimisé, s'il n'existe pas en C des méthodes plus rapides. Car dans le cas d'un tableau trié de très grande taille ma méthode peut être très lente.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Pourquoi ne pas le faire sur place dans le même tableau ? C'est plus simple et plus rapide. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    size_t suprime_doublon(double * tab , size_t dim)
    {
      double *read = tab+1;
      double *write = tab;
      while( read <tab+dim)
      {
           if(*read != *write) *++write = *read;
           read++;
      }
      return write-tab+1;
    }
    qui renvoie le nombre d'éléments du tableau différents et élimine les doublons.

    Note : Attention à la comparaison entre double qui peut poser problèmes dans certains cas : on peut avoir à préférer une comparaison plus souple du genre la différence entre les deux double est supérieure à un seuil donné.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    Ah ok d'accord !
    Donc si j'appelle la fonction de cette façon sur mon tableau trié (n= suprime_doublon(tab , dim) ) il me faut parcourir tab de 0 à n-1 pour avoir tous les éléments sans doublons du tableau (c'est bien ça ?).
    Mais qu'est ce qui ce passe pour tous les éléments de tab qui se situent après le n ième élément ?

    Cordialement,
    Takout

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par takout Voir le message
    Ah ok d'accord !
    Donc si j'appelle la fonction de cette façon sur mon tableau trié (n= suprime_doublon(tab , dim) ) il me faut parcourir tab de 0 à n-1 pour avoir tous les éléments sans doublons du tableau (c'est bien ça ?).
    Oui
    Mais qu'est ce qui ce passe pour tous les éléments de tab qui se situent après le n ième élément ?
    Ils restent à leur place. Il suffit de les ignorer. Le tableau final est du coup surdimensionné, c'est tout. Ce n'est pas génant en soi.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

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

Discussions similaires

  1. supression des doublons
    Par pymouse dans le forum Langage
    Réponses: 4
    Dernier message: 04/07/2007, 14h11
  2. Supression des doublons les plus anciens
    Par jonkalak dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 30/05/2007, 08h42
  3. Supression de doublon dans un tableau
    Par Blo0d4x3 dans le forum C
    Réponses: 4
    Dernier message: 18/05/2007, 01h47
  4. [Tableaux] Retirer des doublons dans un tableau
    Par Xunil dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2006, 18h04
  5. Réponses: 13
    Dernier message: 12/01/2006, 10h45

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