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

SL & STL C++ Discussion :

accélérer les algorithm


Sujet :

SL & STL C++

  1. #21
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Il devrait etre possible de specialiser la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void
        iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
    pour appeler le swap avec mingw

  2. #22
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut
    mouais ça devrait etre le plus simple

  3. #23
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    namespace std
    {
    template<>
    inline void iter_swap<vector<A>::iterator,vector<A>::iterator> ( vector<A>::iterator a, vector<A>::iterator b )
    {
    	(*a).swap(*b);
    };
    }
    En faite c'est encore mieux que ce que je disait. Dans les compte, j'ai oublié le constructeur par recopie!!!

  4. #24
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par r0d Voir le message
    Il serait intéressant de faire des tests sur des gros conteneurs bien remplis. Et chronométrer, avec différentes méthodes, sur différentes plateformes, et avec une machine dédiée (je veux dire un machine où aucune appli ne tourne, pas même les démons/services réseau etc.)
    voila chef
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #include <algorithm>
    #include <iterator>
    #include <iostream>
    #include <vector>
    #include <ctime>
     
    //afficher les log de copi, egale et swap
    #define LOG 0
    //utilisation du swap de la class A
    #define USE_SWAP 1
    //specification pour mingw
    #define USE_MINGW 0
     
    //class qui contient la fonction swap pour éviter des recopie de memoire
    //trié par nb
    //contient un vector de 10000
    class A
    {
    public :
    	A(int a) :nb(a),myVector(10000){ };
     
    	A(const A& a)
    	{
    		*(this)=a;
    	}
     
    	A&  operator=(const A& a)
    	{
     
    		#if LOG
    			static int nbegale(0);
    			std::cout<<"= : "<<++nbegale<<std::endl;
    		#endif
    		nb = a.nb;
    		myVector=a.myVector;
    		return (*this);
    	}
     
    	bool operator<(const A& a)const {return nb<a.nb;}
     
    	void swap(A& a)
    	{
    		#if LOG
    			static int nbswap(0);
    			std::cout<<"swap : "<<++nbswap<<std::endl;
    		#endif
    		std::swap(nb,a.nb);
    		myVector.swap(a.myVector);
    	}		
     
    	int					 nb;
    	std::vector<double>  myVector;
     
     
    };
    //specialisation de la fonction swap pour la class A
    #if USE_SWAP
    	namespace std
    	{
     
    		template<>
    		inline void swap<A> ( A& a, A& b )
    		{
    			a.swap(b);
    		};
    		//specialisation de iter_swap pour utiliser swap dans l'implementation de mingw 
    		#if USE_MINGW
    			template<class T>
    			inline void iter_swap<> ( typename T::iterator a, typename T::iterator b )
    			{
    				(*a).swap(*b);
    			};
    		 #endif
    	}
     #endif
    int main(int argc, char** argv)
    {
     
    	//taille du vector de A à trier
    	for(int nb_vect = 10;nb_vect <1000;nb_vect+=100)
    	{
     
    		double somme(0);
    		clock_t t;
    		//moyenne sur 10 sort 
    		for(int a=0;a<10;++a)
    		{
    			//pour comparer les resultats on initialise la graine aléatoire 
    			//pour garantir la même suite aléatoire à chaque execution
    			srand(0);
     
    			//vecteur à trier
    			std::vector<A> vect(nb_vect);
    			for(int i=0;i<nb_vect;++i)
    			{
    				vect[i].nb=rand();
    			}
    			//on fait le trie
    			t=clock();
    				std::sort(vect.begin(),vect.end());
    			somme+=clock()-t;
    		}
     
    		std::cout<<nb_vect<<"  :  "<<somme/10<<std::endl;
    	}		
    	return 0;
    }
    résultat sans swap :
    10 : 0
    110 : 25
    210 : 50
    310 : 78.1
    410 : 129.6
    510 : 164.1
    610 : 217.3
    710 : 223.3
    810 : 274.7
    910 : 325.3
    résultat avec swap :
    10 : 0
    110 : 15.5
    210 : 28.2
    310 : 45.3
    410 : 57.7
    510 : 70.4
    610 : 98.5
    710 : 101.4
    810 : 123.4
    910 : 148.6
    [edit] petite modif sur l'init de vect pour qu'elle soit plus rapide[/edit]

  5. #25
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    en remplacant le sort par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int j=0;j<100;++j)
    			std::random_shuffle(vect.begin(),vect.end());
    avec swap :
    10 : 0
    110 : 1.6
    210 : 3
    310 : 3.2
    410 : 6.1
    510 : 1.5
    610 : 3.1
    710 : 3.2
    810 : 4.7
    910 : 4.6
    sans swap
    10 : 28.1
    110 : 924.8
    210 : 1906.5
    310 : 2904.4
    410 : 3960.9

  6. #26
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    en remplacant sort par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A aa(RAND_MAX/4);
    std::partition( vect.begin(),vect.end(),std::bind2nd( std::less<A>(), aa) );
    avec swap no mesurable avec clock
    10 : 0
    110 : 0
    210 : 0
    310 : 0
    410 : 0
    510 : 0
    610 : 0
    710 : 0
    810 : 1.6
    910 : 0
    sans swap
    10 : 0
    110 : 4.5
    210 : 3.2
    310 : 9.4
    410 : 8
    510 : 9.4
    610 : 13.9
    710 : 10.9
    810 : 15.5
    910 : 15.6

  7. #27
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le mieux ce sera quand les rvalue references seront dans le langage

  8. #28
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Le mieux ce sera quand les rvalue references seront dans le langage
    pourquoi?

  9. #29
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Parce que ce genre de choses sera pris en compte automatiquement ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #30
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Parce que ce genre de choses sera pris en compte automatiquement ?
    cool.
    Par contre le temps que ça ce mette en place....
    Tu aurais quelque doc dessus?
    je vais chercher en attendant.
    merci

  11. #31
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Parce que ce genre de choses sera pris en compte automatiquement ?
    j'ai regardé un peu les rvalue, mais je ne voit pas en quoi avoir la possibilité d'avoir une references sur un temporaire permet une prise en compte automatique de ce genre de chose ...

  12. #32
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Voir ma réponse dans la discussion que tu as entamée dans le forum C++
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  13. #33
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Voir ma réponse dans la discussion que tu as entamée dans le forum C++
    Merci. Je continuerais cette discution sur l'autre thread.
    http://www.developpez.net/forums/sho...d.php?t=547007

  14. #34
    screetch
    Invité(e)
    Par défaut
    list est plus rapide que vector dans ce cas je pense.

  15. #35
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par screetch Voir le message
    list est plus rapide que vector dans ce cas je pense.
    apparemment avec une list, il n'y as pas de changement de place des éléments. Juste un changement de valeur.
    http://www.developpez.net/forums/sho...d.php?t=545564

    Donc cela doit être kifkif.

  16. #36
    screetch
    Invité(e)
    Par défaut
    std::sort ne marche pas sur une liste, il faut utiliser list.sort(). et list.sort() va sans doute reordonner les cases sans toucher au contenu.

  17. #37
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par screetch Voir le message
    std::sort ne marche pas sur une liste, il faut utiliser list.sort(). et list.sort() va sans doute reordonner les cases sans toucher au contenu.
    ha oui je m'égare là. dsl

Discussions similaires

  1. la différence entre les algorithmes d'approximation et les algorithmes d'opptimisatio
    Par ch_hanen dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 29/06/2007, 10h52
  2. Un Pseudo-langage pour les algorithmes
    Par Terminator dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 24/02/2006, 10h28
  3. Les algorithmes génétiques
    Par fred9510 dans le forum Intelligence artificielle
    Réponses: 3
    Dernier message: 27/01/2005, 10h27
  4. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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