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 :

meilleure complexité de recherche dans un matrice triée


Sujet :

C++

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Par défaut meilleure complexité de recherche dans un matrice triée
    Salut bon voila j'ai un probléme j'arrive pas a comprendre le principe de base de cete algorithme qui cherche un élement dans une matrice carrée triée.

    voila le code source:
    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
    bool Rechm(Matrice M,int n,int x)
    {
       i=n;
       while(M[i][1]>x&& i>=1) 
          i--;
     
       if(M[i][1]==x)
          return true;
     
       if(i==0)
          return false;
     
       j=1;
       while(M[i][j]<x && j<=n) 
          j++;
     
       if(M[i][j]==x)
          return true;
     
       if(j>n) return false;
     
       return false;
    }
    Merçi.

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    C'est quoi une matrice triée ? Elle est triée comment ?
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Si je comprend bien tu as une matrice (= tableau) à deux dimension triée par ordre croissant.
    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
     
       i=n;
       while(M[i][1]>x&& i>=1) 
          i--;
    //Si le premier élément de la ligne est plus grand que la valeur recherchée, en recherche dans la ligne précédente.
    //On continu tant qu'on arrive pas à la première ligne ou qu'on trouve la ligne où chercher
     
       if(M[i][1]==x)
          return true;
    // Si le premier élément de la ligne est égal à x, on retourne true (trouvé) inutile
     
       if(i==0)
          return false;
    // si on est à une ligne = 0 (ie ligne n'existant pas) on retourne false (= pas trouvé)
       j=1;
       while(M[i][j]<x && j<=n)
          j++;
    //(on parcours la ligne et on s'arrête au premier élément supérieur ou égal à x)
       if(M[i][j]==x)
          return true;// (si on trouve la valeur : return true)
     
       if(j>n) return false;// (inutile)
       return false;// si on a pas trouvé la valeur, on retourne false.
    }
    Pour simplifier :
    On recherche x
    1) On recherche la ligne où chercher (= première ligne en partant de la fin où le premier élément est inférieur à x.
    2) On parcours la ligne et dès qu'on trouve x, on renvoie true
    3) Si on trouve une valeur supérieur à x, on arrête car la matrice est triée.
    -> Si on n'a pas trouvé x, on renvois false.
    Mais le code a quelques défauts selon moi (déjà le 1er élément d'une ligne est 0 et non 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       i=n-1;
       while( i>=0 && M[i][0]>x) // tester si la ligne existe avant de regarder 
          i--; 
     
       if(i==-1) return false;
       j=0;
     
       while( j<n && M[i][j]<x) //idem avec la colonne
           j++;
     
       if(M[i][j]==x)   return true;
       return false;
    }

Discussions similaires

  1. recherche dans une matrice
    Par amal1410 dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 25/03/2013, 17h17
  2. [XL-2007] recherche dans pdf et trie du pdf
    Par meumeu73.1 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/10/2012, 23h16
  3. [XL-2010] Recherche dans une matrice avec doublons (formule ou VBA)
    Par Lucorah dans le forum Excel
    Réponses: 7
    Dernier message: 07/05/2012, 17h16
  4. [XL-2007] Recherche dans une Matrice dynamique
    Par Just-Soft dans le forum Excel
    Réponses: 20
    Dernier message: 12/07/2010, 17h53
  5. Recherche dans une matrice
    Par clodius dans le forum Excel
    Réponses: 3
    Dernier message: 05/08/2008, 08h33

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