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 :

Diminuer complexite pour la recherche de valeur dans un vector


Sujet :

C++

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 12
    Par défaut Diminuer complexite pour la recherche de valeur dans un vector
    Bonjour,

    Voila j'ai en fait un type vector qui peut atteindre une très grande taille n.
    A un moment je dois rechercher une valeur dans ce vector, et cela doit être effectue n fois.
    Ce que je fais en ce moment est quelque chose de ce genre ou t est de type vector avec des doublons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int a = 2;
    for(int i = 0 ; i < n ; i++)
        if(t[i] == a)
          return i;
    Cette recherche de valeur a une complexité O(n) et j'aimerais la baisser au mieux a un ordre O(1). J'ai vu qu'il y avait le type map mais je ne sais pas si c'est la solution optimale.

    Je souhaiterais connaitre votre avis la dessus avant de me lancer.
    Merci !

  2. #2
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Si les valeurs de ton vecteur ne sont pas ordonnancées d'une certaine façon je ne vois pas trop comment tu pourrais réduire la complexité.

  3. #3
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    J'imagine que tout le monde aimerait faire du O(1)...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Les set et multiset on une fonction find() en O(n*log(n)).
    Tu ne trouveras pas mieux.

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Tu peux obtenir une complexité d'accés moyenne en temps constant en utilisant une table de Hashage (unordered_set en C++2011 pas exemple). Il faut cependant qu'il existe une fonction de hashage pour tes objets.

    Sinon tu peux peut-etre réduire ce temps de recherche si tu t'assures que ton vecteur reste trié par exemple, en appliquant un dichotomie la complexité devrait dimunué (logarithmique peut-etre, calcul à faire). A voir si le coup pour assurer ce trie tout le long du programme n'est pas trop élévé par rapport à l'utilisation d'une recherche linéaire.

    Et enfin tu peux utiliser un conteneur associatif (typiquement set) qui t'assure un complexité logarithmique (et non quasi-linéaire, qui est moins bon que linéaire, comme l'a indiqué oodini). Et ca doit globalement revenir à utiliser un conteneur séquentiel en assurant en permanence qu'il est trié.

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 12
    Par défaut
    Je vous remercie pour vos conseils.
    Je vais en tester quelques-uns et je vous tiens au courant

Discussions similaires

  1. Réponses: 22
    Dernier message: 13/09/2013, 14h20
  2. [AC-2000] Optimisation de VBA pour la recherche de valeurs dans une table
    Par Tydher dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/07/2011, 09h17
  3. recherche de valeurs dans un tableur excel
    Par maxiut dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/05/2006, 07h25

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