Aller au contenu

08bis Exos Listes performance

Comparaison de performance (ajouter des éléments à un tableau)⚓︎

L'objectif de cet exercice est de comparer la rapidité d'exécution des différentes méthodes d'ajout d'un élément à un tableau (= type list).

Étant donné un tableau (noté tab), nous avons différentes possibilités pour lui ajouter un élément (noté elt) :

🐍 Script Python
# Méthode 1 : égal plus
tab = tab + [elt]

# Remarque : elt doit être entre crochets pour éviter les erreurs de type
# vous pouvez tester sans les crochets pour vérifier

# Méthode 2 : plus égal (opérateur python +=) 
tab += [elt]

# Méthode 3 : la méthode append de Python pour le type list
tab.append(elt)
  1. Nous allons utiliser la fonction time() du module time de Python. Tester le code suivant dans le Shell, en important la fonction time, puis en l'appelant deux fois consécutives :

    🐍 Script Python
    >>> from time import time
    >>> time()
    1706801424.2100651
    >>> time()
    1706801434.9346704
    
    Que représentent les nombres obtenus ? Sont-ils différents ? Pourquoi ?
    On pourra utiliser l'aide Python dans le Shell avec help("time").

  2. Comment utiliser la fonction time pour chronométrer l'exécution d'un script ? Tester ce code pour comprendre :

    🐍 Script Python
    debut = time() # le chronomètre est lancé
    nombre = int(input("saisir un entier entre 1 et 9 : "))
    fin = time() # on arrête le chronomètre
    print("Vous avez mis ", fin-debut, "secondes pour répondre") # on affiche le temps écoulé
    

  3. On va à présent mesurer le temps qu'il faut à Python (et l'ordinateur que vous utilisez, ainsi que son système d'exploitation) pour créer un tableau rempli de \(10\,000\) zéros en partant d'un tableau vide et en ajoutant les éléments un par un, en utilisant une affectation similaire à celle de la méthode 1.
    Créer une fonction temps_egalplus() sans paramètre en écrivant son corps de la façon suivante :

    • Lancer le chronomètre ;
    • créer une variable tab de type list, vide ;
    • à l'intérieur d'une boucle pour se répétant \(10\,000\) fois, modifier la variable tab en lui ajoutant un élément égal à zéro en utilisant la méthode 1 ;
    • sortir du corps de la boucle et arrêter le chronomètre ;
    • renvoyer le temps écoulé à l'aide d'une différence.
  4. Créer sur le même modèle une fonction temps_plusegal() sans paramètre permettant de mesurer le temps écoulé pour la même tâche lorsqu'on utilise la méthode 2.

  5. Créer sur le même modèle une fonction temps_append() sans paramètre permettant de mesurer le temps écoulé pour la même tâche lorsqu'on utilise la méthode 3.

  6. Modifier les trois fonctions précédentes en ajoutant un paramètre entier \(n\). Les fonctions doivent renvoyer le temps écoulé pour bâtir un tableau rempli de \(10^n\) zéros en utilisant les différentes méthodes précédentes.

  7. Tester ces trois fonctions en les appelant pour \(n=5\). Quelle est la méthode la plus rapide ? Quelle est la méthode la plus lente ?

  8. Pour les deux méthodes les plus rapides, tester pour \(n=6\), puis \(n=7\), puis \(n=8\) afin de les départager.