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 :

chercher le maximum d'une matrice 2D


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Par défaut chercher le maximum d'une matrice 2D
    Bonjour à tous et toutes,

    mon problème consiste à chercher le maximum dans une matrice de deux dimensions sauf avec une particularité. Cette dernière se représente comme suit :
    dans un premier temps je dois chercher le maximum dans toute la matrice et dans la suite je cherche toujours le maximum dans toute la matrice excepté de maximum trouvé dernièrement et ainsi de suite ... comme solution trier la matrice mais je veux dire ici que je tiens à retenir l'indice de ce maximum si je fais le tri les valeurs ne correspondent plus à leurs indices initiales dans la matrice !!!

    Comment je fais ??? AIdez moi SVP

    MERCI.

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu peux te baser sur un conteneur standard contenant les indices et qui préserve l'ordre dans lequel tu insères. A la fin, tu obtiens donc une séquence contenant les indices, allant du maximum de ta matrice jusqu'au minimum. (pour le choix du conteneur -> FAQ C++)

    Pour parcourir la matrice, je pense que tu as une idée...

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Le plus facile consistera sans doute à créer une structure qui soit en mesure de maintenir les coordonnées et la valeur dans la matrice, et de redéfinir l'opérateur < pour la structure

    Elle pourrait très bien prendre la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct Coordonee
    {
        /* j'utilise le type size_t car je sais par avance qu'aucun indice ne sera
         * négatif, et que cela me permet d'assurer le fait que la structure 
         * fonctionnera quelles que soient les dimensions de la matrice ;)
         */
        size_t ligne;
        size_t colonne;
        leTypedElementDeLaMatrice valeur;
        bool operator<(const Coordonee& c1, const Coordonee& c2) const
            {return c1.valeur<c2.valeur;}
    };
    Il faudra ensuite prévoir un moyen de contenir les différents éléments triés.

    Une liste semble être la structure la plus adaptée pour ce faire (à défaut d'en savoir plus sur ce que tu veux faire une fois que tu dispose des éléments triés).

    Je te conseillerais donc de te tourner vers la classe list fournie par le standard dans l'espace de noms std, et nécessitant l'inclusion du fichier <list>.

    La déclaration de ta collection de coordonnées pouvant alors prendre la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::list<Coordonee> triListe;
    il te sera alors loisible de remplir la collection avec un algorithme (je ne vais quand meme pas tout faire pour toi non plus ) proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Pour L = 0 à nombre_Ligne
        Pour C = 0 à  nombre_Colonne 
            Coordonne actuel
            actuel.ligne <-- L
            actuel.colonne <-- C
            actuel.valeur <-- laMatrice[L][C]
            insérer actuel dans triListe
        fin Pour
    Fin Pour
    Il ne te restera alors plus qu'à invoquer la méthode sort() sur ta liste pour obtenir la liste triée, mais, comme les valeurs seront placées dans l'ordre croissant, et que tu souhaite les avoir dans l'ordre décroissant, il faudra, au choix, utiliser les itérateurs inversé riterator, rbegin() et rend() soit demander à la liste d'inverser les éléments avec reverse()
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Une proposition:
    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
    35
    36
    #include <iostream>
    #include <set>
    #include <boost/multi_array.hpp>
     
    typedef boost::multi_array<int, 2> Array2;
     
    template <typename T>
    struct IndexedArrayValue {
       IndexedArrayValue( const T & val, int i = -1, int j = -1) : value(val), index1(i), index2(j) {}
       T value;
       size_t index1, index2;
    };
     
    struct CompIAV {
       bool operator () ( const IndexedArrayValue<int> & left, const IndexedArrayValue<int> & right ) {
          if ( left.value == right.value ) {
             if ( left.index1 < right.index1 ) return true;
             else return ( left.index2 < right.index2);
          }
          return ( left.value < right.value );
       }
    };
     
    int main()
    {
       Array2 array( boost::extents[3][3] );
       //... remplissage du tableau
     
       std::set<IndexedArrayValue<int>, CompIAV> indexedValues;
       for ( size_t i = 0; i < array.shape()[0]; i++)
          for ( size_t j = 0; j < array.shape()[1]; j++ )
             indexedValues.insert( IndexedArrayValue<int>(array[i][j], i, j ) );
     
       std::cin.get();
       return 0;
    }

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par poitou86 Voir le message
    Comme solution trier la matrice mais je veux dire ici que je tiens à retenir l'indice de ce maximum si je fais le tri les valeurs ne correspondent plus à leurs indices initiales dans la matrice !!!
    Il ne faut pas trier les valeurs... mais les indices par rapport à leur valeur...

Discussions similaires

  1. maximum d'une matrice
    Par headache77 dans le forum MATLAB
    Réponses: 11
    Dernier message: 06/08/2014, 07h38
  2. [SQLSERVER2008] chercher le min d'une matrice
    Par AJ_ing dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/03/2011, 10h54
  3. Recherche de maximums dans une matrice
    Par zizi_coin_coin dans le forum MATLAB
    Réponses: 12
    Dernier message: 22/12/2010, 16h07
  4. position d'un maximum dans une matrice
    Par oliv27400 dans le forum MATLAB
    Réponses: 2
    Dernier message: 23/11/2010, 14h20
  5. chercher un tableau dans une matrice
    Par devdébuto dans le forum C
    Réponses: 12
    Dernier message: 11/12/2005, 01h26

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