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 :

algo recherche c++


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 51
    Par défaut algo recherche c++
    Bonjour,

    Mon problème est + un problème d'algorithmique.

    Je dispose de 2 tableaux : 1/ {a,b,c,d,e,....} et un second qui peut être de cette forme {a,a,a,b,b,c,d,a,e,e,.....} et je souhaite pour chaque lettre dans le premier tableau récupérer le plus grand indice de la même lettre dans le second tableau. Par exemple pour a, je souhaite récupérer 'a' du second tableau qui se trouve entre "d" et "e".

    Avez-vous des idées pour un algorithme simple qui puisse faire cela ?
    je programme en c++.

    merci d'avance pour votre aide.

  2. #2
    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
    Est-ce que tout les indices du second tableau sont présent dans le premier tableau?

    Pour ton algorithme, je vois mal ce qui te bloque, il suffit juste de parcourir le second tableau "à l'envers", et d'utiliser un std::map pour stocker en fonction de tes indices la première position trouvée.

  3. #3
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    std::find_end peut répondre à ce besoin.

    Si tu bosses avec des string, find_last_of peut être utile.

    Ou comme dit Neckara, une simple recherche sur le tableau inversé (avec des reverse_iterator).

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    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
    #include <algorithm>
    #include <iterator>
    #include <iostream>
     
    // N'arrive qu'en C++14 ...
    // Je vous laisse rajouter ce qu'il manque pour les vecteurs...
    namespace std
    {
        template< class T, size_t N >
            std::reverse_iterator<T*> rbegin( T (&array)[N] ) { return std::reverse_iterator<T*>(&array[N]); }
     
        template< class T, size_t N >
            std::reverse_iterator<T*> rend( T (&array)[N] ) { return std::reverse_iterator<T*>(&array[0]); }
    }
     
    int main ()
    {
        char tab1[]={ 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
        char tab2[]={ 'f',  'a',  'e',  'a',  'b',  'b',  'c',  'd',  'a',  'e' };
     
        std::for_each(std::begin(tab1), std::end(tab1),
        [&tab2](char e) {
            auto wh = std::find(std::rbegin(tab2), std::rend(tab2), e);
            std::cout << e << " -> " << std::distance(wh, std::rend(tab2)) << "\n";
        });
    }
    // Vim: let $CXXFLAGS='-std=c++0x'
    PS: std::find_end ne m'a pas l'air très efficace vu qu'il opère sur des ForwardIterator.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 51
    Par défaut c++ 14
    Merci a vous pour vos réponses.

    J'essaye de compiler votre code. Mais je suis débutant en c++. Que faut-il spécifier à Qt pour lui dire que je travaille en c++ 14 ?

    Merci encore

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    En 2013 ça paraît tendu de travailler en c++14, non?

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Il faut être en avance sur son temps

    Le code de Luc fonctionne en C++11. Mais comme rbegin et rend n'arrive qu'en C++14, il les à ajouter dans le namespace std.
    Perso j'aurais ajouté un #if __plusplus > 201103L.

    @med.doc: c'est -il me semble- une question récurrente. En tout cas pour compiler en C++11. Fait une recherche .

Discussions similaires

  1. algo recherche mots ressemblant
    Par cleth dans le forum Mathématiques
    Réponses: 11
    Dernier message: 04/12/2008, 13h28
  2. algo recherche textuelle
    Par mapmip dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/09/2008, 18h20
  3. Modification d'un algo [recherche de chaine]
    Par bluecurve dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2007, 03h42
  4. Algo recherche de Pattern
    Par jemore dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 04/07/2006, 17h23
  5. Algos recherche Opérationnelle
    Par cilia dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 10/05/2006, 11h14

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