Spécialité NSI
Algorithme de tri
Complexité
1- Pourquoi trier des données ?
Trier des données consiste à les organiser selon un ordre (croissant, alphabétique, etc.). Nous considèrerons des
données présentes dans un tableau (généralement une liste en python).
C’est indispensable pour :
Rechercher rapidement dans un dictionnaire (tri alphabétique),
Afficher les produits du moins chers au plus cher sur un site e-commerce,
Analyser des données (statistiques, graphiques, classement),
Rendre les recherches plus efficaces.
2- La complexité d’un algorithme
Plusieurs stratégies existent pour trier des tableaux. On peut déterminer leur efficacité grâce au calcul de la
complexité. Cela correspond à la quantité de ressources nécessaires à l’exécution du programme.
Il se caractérise généralement par une fonction dépendant du nombre de valeurs présentes dans un tableau. :
constante, O(1), si le temps de calcul est toujours le même, quel que soit le nombre d’éléments
logarithmique, O(log n), si le temps de calcul est proportionnel au logarithme du nombre d’éléments
linéaire, O(n), si le temps de calcul est proportionnel au nombre d’éléments
linéarithmique, O(n log n), si le temps de calcul est proportionnel au nombre d’éléments multiplié par le logarithme du
nombre d’éléments.
quadratique, O(n²), si le temps de calcul et proportionnel au carré du nombre d’éléments
exponentielle, O(2^n), si le temps de calcul est proportionnel à 2 exposant le nombre d’éléments
factorielle, O(n!), si le temps de calcul et proportionnel à n!
Temps d'exécution en fonction de la complexité algorithmique
Complexité n n log₂ n n² 2ⁿ n!
n = 10 <1s <1s <1s <1s 4s
n = 30 <1s <1s <1s 18 min 10²⁵ ans
n = 50 <1s <1s <1s 36 ans ∞
n = 100 <1s <1s <1s 10¹⁷ ans ∞
n = 1000 <1s <1s 1s ∞ ∞
n = 10000 <1s <1s 2 min ∞ ∞
n = 100000 <1s 2s 3 heures ∞ ∞
n = 1000000 1 s 20 s 12 jours ∞ ∞
En l’état actuel des connaissances, les meilleurs algorithmes de tri ont une complexité O(n log n).
3- Travail proposé :
3.1 En vous aidant de l’application test algo tri.html : Exemple d’algorithme (HS ici)
Entrée : une liste T de n éléments
Inventer une méthode pour trier ces cartes. Sortie : la liste T triée en ordre croissant
En vous inspirant de l’exemple ci-contre, donner un
algorithme correspondant à la façon précise dont vous vous Pour i allant de 0 à n
Pour j allant de 0 à n
y êtes pris pour effectuer ce tri.
Si T[j] > T[j + 1] alors
échanger T[j] et T[j + 1]
Fin Si
Fin Pour
Fin Pour
3.2 Visualiser la vidéo sur la méthode du tri à bulle : https://www.youtube.com/watch?v=Iv3vgjM8Pv4
Youtube Bubble sort with Hungarian, folk dance
Cette méthode de tri consiste à inverser tous les couples de nombres non ordonnés. À la fin de la première
boucle, le plus grand élément du tableau sera forcément bien placé. Puis, l’algorithme recommence
jusqu’à la fin du tri.
3.3 Faites fonctionner le script python tri bulle.py.
Valider son fonctionnement avec différentes tailles de liste.
Ajouter des commentaires sur chacune des lignes de la fonction pour justifier leur action.
Tester le tri d’une liste contenant des chaines de caractères.
3.4 Faites fonctionner le script python tri bulle complexité.py.
Ajouter une variable permettant de compter le nombre de permutations lors d’un tri.
Démontrer que la complexité est quadratique (en n²). Expliquer votre démarche.
3.5 Prenez connaissance du fichier tri_selection.pdf.
Testez cet algorithme avec l’application test algo tri.html.
Rédiger un script python utilisant cet algorithme. Le tester et commenter les lignes du code.
Déterminer son type de complexité en reprenant la méthode vue à la question 3.4.
3.6 Aidez-vous du fichier tri_insertion.pdf pour rédiger un script python utilisant cet algorithme. Le tester et
commenter les lignes du code. Déterminer son type de complexité en reprenant la méthode vue à la
question 3.4