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

D�fis langages fonctionnels Discussion :

D�fi N�1 : G�n�ration des ensembles de nombre dont la somme est identique


Sujet :

D�fis langages fonctionnels

  1. #121
    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
    ha oui tien,
    en ajoutant l'optimization des 1+1+....+1, et en evitant plusieur app�le r�curssive, j'am�liore nettement les perf
    je passe pour 100 de 30s � 5-6s
    Code C++ : 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
     
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <ctime>
    #include <iterator>
     
    //#define AFFICHER
    int nbvalue(0);
    typedef unsigned int DecompType;
     
     
     
    inline void afficher(const std::vector<DecompType> & myVect,const DecompType & nb)
    {
        nbvalue++;
        #ifdef AFFICHER
    	if (nb==0) return;
        std::cout<<"[";
        std::copy(myVect.begin(),myVect.begin()+nb-1,std::ostream_iterator<int>(std::cout,", "));
        std::cout<<myVect[nb-1]<<"]\n";
        #endif
    }
     
    //fonction récussive
    inline void generate(std::vector<DecompType> & myVect,const DecompType & reste ,const  DecompType & nb_precedent,const DecompType & level)
    {
    if (reste ==1)
    	{
    	myVect[level]=1;
    	afficher(myVect,level+1);
    	}
    else
    	{
    	//on interdit que le chiffre que l'on va traiter puisse etre plus grand que le précédent
    		for (DecompType i=std::min(reste,nb_precedent);i>1 ;--i)
    		{
    		//on met le chii=ffre courant à i
    		myVect[level] = i;	    
    		//on traite le prochain chiffre avec le reste
    		//si reste ==i alors la somme des chiffres est bien ègale au chiffre de dépard
    		//sinon on passe au chiffre suivant
    		if (reste==i) 
    			afficher(myVect,level+1);
    		else
    			generate(myVect,reste-i,i,level+1);
    		}
    	//cas ou le nombre courant est mis à 1
    	//td::vector<int>::iterator it = myVect.begin()+level;
    	myVect[level]=1;
    	myVect[level+reste-1]=1;
    	afficher(myVect,level+reste);
    	}
     
    }
     
    int main()
    {
        clock_t t1=std::clock();
        DecompType n =100;
        std::vector<DecompType> myVect(n);
        DecompType level (0);
        generate(myVect,n,n,level);
        clock_t t2=std::clock();
        std::cout<<nbvalue<<std::endl;
        std::cout<<double(t2-t1)/CLOCKS_PER_SEC<<std::endl;
    return 0;
    }

  2. #122
    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
    j'ai compar� avec le code de Steki-kun:
    pour 100
    moi : 0m1.656s
    Steki-kun: 0m2.304s

    pour 130 :
    moi : 0m56.012s
    Steki-kun: 1m3.160s

  3. #123
    Membre exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Par d�faut
    Tu as pris ma version imp�rative compil�e avec ocamlopt ?
    En tout cas c'est int�ressant, la diff�rence augmente en proportion bien plus faible que le nombre de partitions donc les complexit�s sont sensiblement les m�mes. J'aimerais bien voir d'o� vient la diff�rence si la technique est la m�me : tu as le code de ta version l� ?

  4. #124
    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 Steki-kun Voir le message
    Tu as pris ma version imp�rative compil�e avec ocamlopt ?
    En tout cas c'est int�ressant, la diff�rence augmente en proportion bien plus faible que le nombre de partitions donc les complexit�s sont sensiblement les m�mes. J'aimerais bien voir d'o� vient la diff�rence si la technique est la m�me : tu as le code de ta version l� ?
    oui sous ubuntu. Par contre je ne sait pas si il faut ajouter des option a la compilation. je ne connait pas ocamlopt
    Pour le code je l'ai mis juste avant.
    [edit]
    les r�sultats ne sont pas les m�me car ce n'est pas le m�me PC.

  5. #125
    Membre exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Par d�faut
    OK ! Pour les options, rien � rajouter � ocamlopt -unsafe � la limite ca acc�lerera un chouia les acces tableaux...
    Edit : Je viens de changer un chouia en rempla�ant comme JMB le paquet de 1 dans l'impl�mentation imp�rative par leur nombre, je descends � 53s pour n=130, 2.1s pour n=100. A ce niveau l�, time ne permet plus de faire la comparaison raisonnablement, je crois qu'on peut dire ex aequo

    Les boucles � changer :
    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
    let visit a m q = 
      sol := add !sol one;
      let e = if m = q then q-1 else q in
        for i = 1 to e do
          Printf.printf "%d+" a.(i)
        done;
        if m = q then 
          print_endline (string_of_int a.(q))
        else
          (for i = 1 to m-q-1 do
    	 Printf.printf "1+"
           done;
           print_endline "1")
    
    let rec copy_loop a n m x =
      if n <= x then n, m
      else 
        (a.(m) <- x;
         copy_loop a (n-x) (m+1) x)
    
    let rec main_loop a n m q =
      if !debug then visit a m q;
      if a.(q) = 2 then
        main_loop a n (m+1) (q-1)
      else
        if q = 0 then ()
        else
          begin
    	let x = a.(q) - 1 in
    	  a.(q) <- x;
    	  let n,m = copy_loop a (m-q+1) (q+1) x in
    	    a.(m) <- n;
    	    main_loop a n m (if n = 1 then m-1 else m)
          end

  6. #126
    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
    j'ai r�ussi a diviser par 2.5/3 le temps

    Code C++ : 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 <iostream>
    #include <algorithm>
    #include <vector>
    #include <ctime>
    #include <iterator>
     
    //#define AFFICHER
    int nbvalue(0);
    typedef int DecompType;
     
    inline void afficher(const std::vector<DecompType> & myVect,const DecompType   & end)
    {
        nbvalue++;
     
        #ifdef AFFICHER
     
        std::cout<<"[";
        std::copy(myVect.begin(),myVect.begin()+end,std::ostream_iterator<int>(std::cout,", "));
        std::cout<<*(myVect.begin()+end)<<"]\n";
        #endif
    }
     
    template <DecompType debut >
    struct myFOR;
     
     
    //class template qui empêche que le chiffre courant soit suppèrieur au chiffre d'avant
    //et lance une boucle for pour décrementer le chiffre
    //traite le cas chiffre == 1
    template <DecompType reste >
    struct generate2
    {
        template<DecompType nb_precedent>
        static inline void faire(std::vector<DecompType> &myVect,const DecompType &   level)
            {
            //std::cout<<"generate2"<<std::endl;
            myFOR< reste<nb_precedent? reste:nb_precedent >::template faire<reste> (myVect,level);
            myVect[level]=1;
     
            myVect[level+reste-1]=1;
            afficher(myVect,level+reste-1);
            }
     
     
    };
    //SPECIALISATION
    // si  le reste vaut 0 on affiche le résultat
    template < >
    struct generate2<0>
        {
     
        template<DecompType nb_precedent>
        static inline void faire(std::vector<DecompType> &myVect,const DecompType  &  level)
            {
           //    std::cout<<"generate2<1>"<<std::endl;
            myVect[level]=1;
            afficher(myVect,level+1);
            }
        };
    //BOUCLE FOR "déroulé"
    //decremente le nombre courant et demande une generation pour le chiffre suivant
    // ou affiche quand le rest vaut 0
    template <DecompType Valeur >
    struct myFOR
    {
        template<DecompType    reste>
        static inline void faire(std::vector<DecompType> &myVect,const DecompType & level)
        {
            myVect[level] = Valeur;
            if (reste==Valeur)
                afficher(myVect,level);
            else
               generate2<reste-Valeur>::template faire<Valeur>(myVect,level+1);
     
     
            myFOR<Valeur-1>::template faire<reste>(myVect,level);
     
        };
     
    };
    //SPECIALISATION
    //quand Valeur vaut 1 la boucle est fini
    template < >
    struct myFOR<1>
    {
     template<DecompType    reste>
        static inline void faire(std::vector<DecompType> &myVect,const DecompType   & level)
        {
        };
    };
     
     
    int main(int argc,char ** argv)
    {
        const DecompType n =100;
        std::vector<DecompType> myVect(n);
        myVect[0]=n;
        nbvalue=0;
        clock_t t1=std::clock();
            generate2<n>::faire<n>(myVect,0);
        clock_t t2=std::clock();
        std::cout<<nbvalue<<std::endl;
        std::cout<<double(t2-t1)/CLOCKS_PER_SEC<<std::endl;
     
    return 0;
    }
    Mais bon c'est � cout de d�roulement de boucle (pseudo metaprog, je ne mis connait pas encore assez, c'est mon premier)... La je suis oblig� de connaitre le nombre avant le lancement...
    Mais cette m�thode peut acc�l�rer un morceau du calcul. Par exemple des qu'il reste 50, j'appel ce nouveau code
    Je ne sait pas si d'autre langages permettent de faire ca..
    surtout en fonctionnel

  7. #127
    Membre exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Par d�faut
    euh STOP je t'arr�te l�, avec les m�mes techniques je calcule la factorielle en O(1)... L� tu fais faire les calculs � ton compilo � la place de ton programme, alors �videmment il reste plus grand chose � faire en runtime. C'est pas le but de l'exercice

  8. #128
    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 Steki-kun Voir le message
    euh STOP je t'arr�te l�, avec les m�mes techniques je calcule la factorielle en O(1)... L� tu fais faire les calculs � ton compilo � la place de ton programme, alors �videmment il reste plus grand chose � faire en runtime. C'est pas le but de l'exercice
    Oui et non il donne et peut afficher toute les solution!!!
    Citation Envoy� par millie
    Les r�gles

    Il n'y a pas de r�gle particuli�re (�videmment, il faut que la solution propos�e fonctionne). Vous pouvez proposer des solutions aussi bien dans des langages fonctionnels (caml, haskell, scheme, lisp...) qu'imp�ratif. Le public pourra ainsi juger du code suivant divers crit�res :

    * la maintenabilit�
    * la simplicit�
    * le fait qu'il soit optimis�
    maintenabilit� = bof
    simplicit� = bof
    optimis� = beaucoup

    Ici la boucle for et les appelles r�cursive sont d�roul�.
    Il reste donc le plus couteux : l'acc�s en m�moire!!!
    Le but est juste de montrer ce que l'on peut faire en C++
    En faite, je me demande surtout si c'est possible de faire �a en langage fonctionnelle.

    Mais je suis d'accord que ce code n'apporte rien a part l'optimisation

  9. #129
    LLB
    LLB est d�connect�
    Membre �m�rite
    Inscrit en
    Mars 2002
    Messages
    968
    D�tails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par d�faut
    Citation Envoy� par Mongaulois Voir le message
    En faite, je me demande surtout si c'est possible de faire �a en langage fonctionnelle.
    Le syst�me de templates de C++ est un langage fonctionnel (et turing-complet).

    Common Lisp poss�de un syst�me de macros puissants, il est peut-�tre possible de faire �a aussi, � la compilation.

  10. #130
    Membre exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Par d�faut
    Reste que l'utilisation de trucs de ce genre ne rel�ve pas vraiment d'une opposition de style imp�ratif / fonctionnel. C'est assez rarement un bon design de programmation puisque �a ne marche pas pour tout n et que l'air de rien ca fait m�chamment grossir l'ex�cutable.
    Et au risque d'�tre cynique, je dirais que si vraiment on veut d�rouler des piles de 500 appels sans le faire "� la main", quel que soit le langage, on peut toujours �tant donn� un programme P qui fait un nombre constant de boucles et d'appels r�cursifs, faire un programme qui va �crire sur la sortie standard une version enti�rement d�roul�e du programme P... Que le compilateur t'offre la possibilit� de le faire pour toi -- moyennant incantations templatisantes de ton code original, c'est un autre probl�me

  11. #131
    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 Steki-kun Voir le message
    Reste que l'utilisation de trucs de ce genre ne rel�ve pas vraiment d'une opposition de style imp�ratif / fonctionnel. C'est assez rarement un bon design de programmation puisque �a ne marche pas pour tout n et que l'air de rien ca fait m�chamment grossir l'ex�cutable.
    C'est un style de programmation a part enti�re que te permet le C++. Apr�s il ne faut pas en abuser c'est sur. La c'est un gros abut de ma part, j'avoue. Mais je pourrai m'en servire pour optimiser qu'une partie du code. Par exemple des qu'un chiffre est � 5.
    Citation Envoy� par Steki-kun Voir le message
    Et au risque d'�tre cynique, je dirais que si vraiment on veut d�rouler des piles de 500 appels sans le faire "� la main", quel que soit le langage, on peut toujours �tant donn� un programme P qui fait un nombre constant de boucles et d'appels r�cursifs, faire un programme qui va �crire sur la sortie standard une version enti�rement d�roul�e du programme P... Que le compilateur t'offre la possibilit� de le faire pour toi -- moyennant incantations templatisantes de ton code original, c'est un autre probl�me
    Bien sur, mais je ne me voit pas d�rouler a la main les 190 569 292 solutions. Qu'un language le permet, ajouter beaucoup d'interet.
    Dans un code, il y as tr�s souvent des morceaux o� les variables sont connu. Mais le compilot ne va pas sp�cialement d�rouler les boucle.... mais avec ce style de programmation tu peut l'obliger. Dans le m�me style dans ce code :
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    myTab tabres,tab1,tab2,tab3;//tableau avec N element
    ....//init de tab1,tab2 et tab3
    tabres = tab1+tab2*tab3
    avec ce m�me style de programmation, on peut obliger le compilot a le traduire par :
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    tabres.resize(Tabtmp2.res());
    for (int i=0;i<tab1.res();++i)
    {
    tabres[i]  = tab1[i] + tab2[i] * tab3[i];
    }
    au lieu de

    Code C++ : 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
     
    //multiplication
    myTab Tabtmp1(tab2.size());
    for (int i=0;i<Tabtmp1.res();++i)
    {
    Tabtmp1[i]  = tab2[i] * tab3[i];
    }
    //addition
    myTab Tabtmp2(Tabtmp1.size());
    for (int i=0;i<Tabtmp2.res();++i)
    {
    Tabtmp2[i]  = tab1[i] + Tabtmp1[i];
    }
    //egale
    tabres.resize(Tabtmp2.res());
    for (int i=0;i<Tabres.res();++i)
    {
    tabres[i]  =  Tabtmp2[i];
    }

  12. #132
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    D�tails du profil
    Informations personnelles :
    �ge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par d�faut
    Citation Envoy� par LLB Voir le message
    [...]
    Common Lisp poss�de un syst�me de macros puissants, il est peut-�tre possible de faire �a aussi, � la compilation.
    C'est possible. Les macros r�cursives existent.
    Mais c'est tr�s peu recommand� d'en abuser.

    S�rieusement mongaulois, il va falloir faire un effort sur l'orthographe

    Vis-�-vis des tes optimisations, sais-tu que les performances sont rarement un probl�me sur des projets ? Et qu'il vaut mieux investir dans une bonne conception et une bonne documentation que dans une bonne performance ? Il me semble que tu n'as fait �a que pour le challenge cependant. Ce qui est fort bien dans ce cas. Mais la lisibilit� est tr�s basse aussi.

  13. #133
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par Garulfo Voir le message
    C'est possible. Les macros r�cursives existent.
    Mais c'est tr�s peu recommand� d'en abuser.
    L'abus serait moins grand que l'abus des templates...

    Et si on veut citer d'autres langages complets a la compilation, il y a aussi au moins Forth, PL/I, la plupart des macro-assembleurs. Meme les macros du C peuvent etre poussee a bout pour faire bien plus que ce que croient la plupart des gens (voir par exemple la section de boost sur le preprocesseur).

  14. #134
    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
    Pour ce que ca interesse:
    un petit bench sur un probl�me entre diff�rents language
    http://www.ffconsultancy.com/ocaml/r...languages.html

  15. #135
    R�dacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par d�faut
    Citation Envoy� par Mongaulois Voir le message
    Pour ce que ca interesse:
    un petit bench sur un probl�me entre diff�rents language
    http://www.ffconsultancy.com/ocaml/r...languages.html
    En m�me temps, les mini bench, �a montre tout et surtout n'importe quoi

  16. #136
    Expert confirm�
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par d�faut
    Citation Envoy� par Mongaulois Voir le message
    Pour ce que ca interesse:
    un petit bench sur un probl�me entre diff�rents language
    http://www.ffconsultancy.com/ocaml/r...languages.html
    D'un autre c�t� ce n'est pas non plus vraiment un "mini"-bench, c'est un moyen.

    Comparaison avec Haskell :
    http://augustss.blogspot.com/2007/11...askell-vs.html

    --
    Jeda�

  17. #137
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    D�tails du profil
    Informations personnelles :
    �ge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par d�faut
    Citation Envoy� par millie Voir le message
    En m�me temps, les mini bench, �a montre tout et surtout n'importe quoi
    C'est un tr�s bon exemple.
    Ce code montre qu'on peut avoir �l�gance et efficacit� avec un programme qui a besoin d'efficacit� (c'est un ray tracer). Et l'exemple qui suit en Haskell (cf. le message de Jedai) montre que ocaml n'est pas le seul dans ce cas.

    Je l'ai d�j� post�. Flying Frog Consultancy utilise ocaml pour du calcul scientifique.

  18. #138
    R�dacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par d�faut
    C'est un exemple sur un petit code... Je ne sais pas si �a vaut grand chose.

    Par exemple, Java va forcement avoir de mauvais statistiques car Hot Spot ne va pas �tre vraiment utilis� puisque l'ex�cution est courte donc le r�sultat est forcement biais� Et dans l'industrie, je ne suis pas s�r que des applications aussi courtes courent les rues.

    Si ce code �tait int�gr� � une vrai application et qu'il y aurait des milliers d'appels alors Hot Spot optimiserait/compilerait en natif le code donc les statistiques ne seraient plus les m�mes.

  19. #139
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par Jedai Voir le message
    D'un autre c�t� ce n'est pas non plus vraiment un "mini"-bench, c'est un moyen.
    200 lignes pour l'entr�e la plus longue, moyen? C'est pas un mini-bench, c'est micro-bench.

  20. #140
    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 Jean-Marc.Bourguet Voir le message
    200 lignes pour l'entr�e la plus longue, moyen? C'est pas un mini-bench, c'est micro-bench.
    Alors as tu un vrai bench??

    Pour moi un bench entre languagene peut montrer que la relation verbosit�-rapidit� d'un language par rapport � un probl�me. Et c'est en ca que le lien que je donne me semble un bon bench. Tous comme les codes cr�� dans ce thread

    Je pense que pour l'instant,
    il y as toujours une solution plus rapide en C et C++,mais souvent avec un code plus verbeux, car ces compilateur est plus evolu�,optimis�. Mais d'autre language seront toujours plus adapt� � un probl�me donn�, avec un code plus lissible et de tr�s bonne performance.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 23/07/2015, 07h26
  2. R�ponses: 8
    Dernier message: 20/03/2015, 15h21
  3. R�ponses: 9
    Dernier message: 03/11/2009, 16h39
  4. Rechercher les nombres dont la somme est donn�e
    Par TMuet dans le forum Intelligence artificielle
    R�ponses: 2
    Dernier message: 17/08/2009, 17h17
  5. Extraire lignes dont le debut est identique
    Par Raoul555 dans le forum Shell et commandes GNU
    R�ponses: 3
    Dernier message: 19/05/2007, 11h01

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