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
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    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 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    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 012
    Points : 23 136
    Points
    23 136
    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
    Expert confirmé
    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
    Points : 4 442
    Points
    4 442
    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 éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    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 279
    Points : 11 015
    Points
    11 015
    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.

  5. #5
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    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 expérimenté
    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
    Points : 1 475
    Points
    1 475
    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
    746
    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 : 746
    Points : 3 667
    Points
    3 667
    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