Vous êtes sur la page 1sur 1

Informatique CPGE

e
2 année Clemenceau

TAF : Étude des tris récursifs


À partir des programmes du cours

Visualisation de la complexité quasi-linéaire des tris rapide et fusion


Dans cette première partie, on va chercher à visualiser la complexité quasi-linéaire annoncée pour les tris fusion et
rapide.
Pour cela, on va utiliser le module time pour estimer la durée d’exécution des tris, et les modules numpy et
matplotlib.pyplot pour afficher un graphique qui montre l’évolution de la durée des deux tris pour des listes de
taille croissante, et la courbe représentative d’une évolution quasi-linéaire.
On donne la fonction suivante.
def t e s t ( f c t , T : l i s t ) −> f l o a t :
debut = time . time ( )
r e s = f c t (T)
f i n = time . time ( )
return ( f i n − debut )

Q 1. Ouvrir un nouveau fichier python, et copier les programmes du cours et du TD permettant d’exécuter le tri
fusion et le tri rapide. Importer dans ce fichier les modules time, numpy et matplotlib.pyplot. Importer également
le module random qui va permettre de créer une liste d’entiers à trier L avec la syntaxe suivante.
random . s h u f f l e (L)

Q 2. Écrire une fonction duree(fct, N : int, n = 1) -> list qui renvoie la durée mise par la fonction fct pour
trier n fois une liste de N éléments préalablement mélangée. Utiliser les indications précédentes fournies.
Q 3. Utiliser cette fonction pour estimer la durée du tri d’une liste de 100 éléments. Faire de même pour une liste de
5000 éléments.
Q 4. Estimer le nombre d’opérations effectuées par le tri fusion selon sa complexité. En déduire un ordre de grandeur
de la durée que met votre machine pour exécuter une opération. Déterminer n tel que cette durée soit majorée par
10−n secondes et minorée par 10−(n+1) secondes.
Q 5. Estimer la taille (notée N60s) de la liste qui nécessitera plus d’une minute à la fonction tri_fusion pour la trier.
Utiliser pour cela les programmes des versions impérative ou récursive de la méthode de résolution d’une équation
par dichotomie que nous avons écrits au TD2, que vous recopierez dans votre fichier. N60s sera déterminée avec trois
chiffres significatifs.
Q 6. Tracer un graphique montrant l’évolution de la durée prise par les fonctions tri_fusion et tri_rapide en
fonction de la taille des listes triées en respectant les contraintes suivantes.
— Donner un titre à votre graphique.
— Calculer les durées pour les tailles suivantes : N = list(range(1, 10000 + 1, 100).
— Tracer l’évolution de la durée prise par tri_fusion en vert.
— Tracer l’évolution de la durée prise par tri_rapide en rouge.
— Tracer la courbe représentative de la fonction n 7→ n × log(n) × 10−6 en bleu.
— Ajouter une légende en haut à gauche, l’étiquette des abscisses et des ordonnées.
— Enregistrer votre graphique au format png sous un nom au format suivant : TAF3_Nom_Prenom.png.
Exploiter pour cela le module html Tracés_courbes.zip disponible sur eLyco dans les ressources /Enseignement
/Tracés de fonction.

Tri rapide d’une liste de listes


Q 7. Écrire la fonction tri_rapide_etendu(t : list, i : int) -> list en modifiant a minima la fonction
tri_rapide pour que la fonction puisse trier une liste de listes t selon l’une de ses colonnes i.
Q 8. Tester votre fonction avec une matrice aléatoire à valeurs entières que vous pouvez créer avec la syntaxe suivante :
Test = np . random . r a n d i n t ( 0 , 1 0 0 , ( 7 , 4 ) )
T = Test . t o l i s t ( )

Vous pouvez à présent répondre au questionnaire eLyco du TD3.

Vous aimerez peut-être aussi