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 émérite 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
    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 confirmé
    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 : 44
    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
    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 expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    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
    Par défaut
    C'est quoi le but du programme ?

  5. #5
    Membre émérite 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
    Par défaut
    C'était de trouver le plus petit nombre divisible par tout les nombres de 1 à 20

  6. #6
    Expert confirmé
    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 : 44
    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
    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 émérite 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
    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 confirmé
    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 : 44
    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
    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 émérite 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
    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 confirmé
    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 : 44
    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
    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