DS 2 (1h15)
Lycée Buffon 2 / 6
! x >= L[j-1]: et x s’insère entre deux éléments inférieurs et
supérieurs, donc bien triée
! soit jatteint 0 et x est placé en tout début de liste car inférieur à tous
les éléments qui le précèdent.
Donc la sous-liste L[0:i+2]est triée, donc Inv(i+1) vrai.
• Terminaison : Un boucle for s’arrête forcement, et la boucle while s’arrête également
car j diminue à chaque passage, et donc va forcément atteindre 0, dans le pire des
cas.
• Bonne terminaison : Les itérations s’arrêtent pour i=n-1, donc Inv(n-1) vrai, soit la
sous-liste L[0:n] , c’est à dire la liste L est triée, CQFD.
Question 4 : (3 pt) Soit n, le nombre d’éléments dans la liste L. Donner, en le démontrant, et
en précisant à quelle forme de L cela correspond, la complexité algorithmique de la fonction
tri_mystere(L) dans le meilleur et le pire des cas :
Meilleur des cas :
- L est déjà triée
- Complexité (à démontrer):
Prennons comme critère de calcul de la complexité, le nombre de comparaisons.
Chaque test de la boucle while est faux, donc il n’y a globalement qu’une boucle for, il y a
donc n-1 itérations, donc 2(n-1) comparaisons, la complexité algorithmique est donc en O(n).
Pire des cas :
- L est triée par ordre décroissant
- Complexité (à démontrer):
Chaque test de la boucle while est vrai, jusqu’à ce que j atteigne 0.
Pour i= 1 : 1 passage dans les instructions de la boucle while (2 comparaisons)
Pour i= 2 : 2 passages dans les instructions de la boucle while (4 comparaisons)
…
Pour i = n-1 : n-1 passage dans les instructions de la boucle while (2(n-1) comparaisons)
Donc le nombre de passage total, noté Nit , dans les instructions de la boucle while est de :
𝑁!" =1+2+⋯+𝑛−1=𝑖
!!!
!!!
=(𝑛−1)𝑛
2
Il y a donc (𝑛−1)𝑛 comparaisons, donc une complexité algorithmique en O(n2).
Question 5 (question de cours) (3 pt): Pour les trois algorithmes de tri suivants, donner la
complexité temporelle pour les deux types de listes proposées.