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

Python Discussion :

[Performances]Python et sa vitesse


Sujet :

Python

  1. #1
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut [Performances]Python et sa vitesse
    Vous ne trouvez pas que Python est assez lent?

    Je suis novice en Python et je programme peut-être très très mal mais voilà par exemple ce code:

    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
    def nb():
              nbre,notFound=1,True
              while notFound:
                    print "bcl1 " , notFound
                    divStart,divEnd=1,20
                    divisible=True
                    while divisible and divStart <= divEnd:
                          print "  bcl2 ",divisible, "  -- nbre=",nbre, "  divStart=",divStart,"  - divEnd=",divEnd
                          if nbre % divStart == 0:
                             divStart += 1
                          else: 
                             divisible = False
                    print "     ---- after while ", divisible
                    if divisible == True:
                       notFound = False
                       print "  found ", nbre
                    else:
                         nbre+=1
          nb()
    ... va durer une éternité pour trouver la réponse!... Mais elle va sortir!

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    ce qui est lent, c'est l'éffichage à l'écran (mais ce n'est pas spécifique à Python)
    je tombe à 445 secondes sur mon ordi. Faut dire aussi que nbre arrive à 232 millions. Donc c'est normal que ce soit un peu long

    avec la librairie psyco ( http://python.developpez.com/outils/Librairies/ ), c'est beaucoup plus rapide: 22 secondes

    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
    import time
    try: import psyco; psyco.full() 
    except: pass
     
    def nb(): 
              nbre,notFound=1,True 
              while notFound: 
                    ##print "bcl1 " , notFound 
                    divStart,divEnd=1,20 
                    divisible=True 
                    while divisible and divStart <= divEnd: 
                          ##print "  bcl2 ",divisible, "  -- nbre=",nbre, "  divStart=",divStart,"  - divEnd=",divEnd 
                          if nbre % divStart == 0: 
                             divStart += 1 
                          else: 
                             divisible = False 
                    ##print "     ---- after while ", divisible
                    if divisible: 
                       notFound = False 
                       print "  found ", nbre 
                    else: 
                         nbre+=1
                         if nbre%1000000 == 0: print nbre
     
    a = time.clock()
    nb()
    b = time.clock()
     
    print b-a

  3. #3
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    Je veux juste ajouter quelque chose. Avec le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if divisible == True:
    remplace par
    je gagne environ 2 secondes. Au total j'obtiens le resultat dans 30 secs au lieu de 32

  4. #4
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    C'est quoi le but du programme ?

  5. #5
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    C'était de trouver le plus petit nombre divisible par tout les nombres de 1 à 20

  6. #6
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    En faisant une décomposition en facteur premier, tu aurais trouvé mathématiquement que c'était
    19*17*13*11*7*5*3^2*2^4 = 232792560
    (vu qu'il s'agit simplement de trouver le PPCM)

    Dans ton programme, tu aurais du faire commencer divstart à 2 (au lieu de 1) car tous les nombres sont divisibles par 1 (tu y aurais gagné quelques secondes précieuses)

  7. #7
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    non en commencant par 20 c'est encore mieux....

    et la multiplication de 20*19*18.... ne donne pas le plus petit

  8. #8
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Citation Envoyé par pollux007
    non en commencant par 20 c'est encore mieux....
    ca c'est pas bête

    Citation Envoyé par pollux007
    et la multiplication de 20*19*18.... ne donne pas le plus petit
    Of course, il faut multiplier simplement les facteurs premiers des nombres (en prenant à chaque fois le facteur premier avec la puissance la plus grande trouvé dans tous les nombres)

    => 19*17*13*11*7*5*3^2*2^4 = 232792560

  9. #9
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par Guigui_
    Of course, il faut multiplier simplement les facteurs premiers des nombres (en prenant à chaque fois le facteur premier avec la puissance la plus grande trouvé dans tous les nombres)

    => 19*17*13*11*7*5*3^2*2^4 = 232792560
    Wow puissant!!
    Tu sors ca d'où?

  10. #10
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Citation Envoyé par pollux007
    Citation Envoyé par Guigui_
    Of course, il faut multiplier simplement les facteurs premiers des nombres (en prenant à chaque fois le facteur premier avec la puissance la plus grande trouvé dans tous les nombres)

    => 19*17*13*11*7*5*3^2*2^4 = 232792560
    Wow puissant!!
    Tu sors ca d'où?
    ca fait simplement parti des bases de l'arithmétique sur les PGCD et PPCM (peut-être que cela se voit au lycée maintenant)

Discussions similaires

  1. Comparatif de vitesse php vs python.
    Par Snooky68 dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 08/10/2011, 22h34
  2. Python et vitesse d exploitation de variable
    Par rezuz dans le forum Général Python
    Réponses: 4
    Dernier message: 29/05/2010, 18h10
  3. Les performances de python
    Par jkalzsmu dans le forum Général Python
    Réponses: 1
    Dernier message: 18/08/2008, 10h37
  4. Python, 3D et performances
    Par ragnatron dans le forum 3D
    Réponses: 2
    Dernier message: 22/06/2008, 10h28
  5. [Performance]Comment optimiser la vitesse ?
    Par le Daoud dans le forum Général Java
    Réponses: 13
    Dernier message: 03/06/2005, 15h47

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