Pr. EL HADIQ Zouhair
Correction · Terminaison · Complexité — Tri rapide & Tri par fusion
Informatique CPGE — MP / PSI
1 / 16$$\text{Correction totale} = \text{Correction partielle} + \text{Terminaison}$$
| Objectif | Boucle (itératif) | Récursion |
|---|---|---|
| Correction | Invariant : init. + conservation + sortie | Récurrence bien fondée : base + hérédité |
| Terminaison | Variant $V \in \mathbb{N}$ décroissant (Floyd) | Mesure $\mu \in \mathbb{N}$ décroissante |
fusionfusionINVARIANTInitialisation. $C=[\,]$, $i=j=0$ : I₁, I₂, I₃ trivialement vraies.
Conservation. On ajoute $m=\min(A[i],B[j])$ ; par I₃, $C \leq m$ donc $C$ reste triée ; un compteur avance (I₂) ; le tri de $A,B$ rétablit I₃.
4 / 16fusion — sortieINVARIANTSortie. La boucle s'arrête quand $i=\text{len}(A)$ ou $j=\text{len}(B)$.
On renvoie $C + A[i{:}] + B[j{:}]$. Par I₂, $C$ contient $A[0{:}i]$ et $B[0{:}j]$ ; le reste (une seule liste non vide) est trié et $\geq$ tous les éléments de $C$ (I₃).
fusionVARIANTÀ chaque tour, $i$ ou $j$ augmente de 1 : $V$ décroît strictement. Tant que la boucle tourne, $V \geq 1 > 0$.
Nombre de tours $\leq \text{len}(A)+\text{len}(B)$ : fusion en $O(m+p)$.
6 / 16tri_fusionMESUREPour $n \geq 2$ : les appels portent sur des longueurs $\lfloor n/2 \rfloor < n$ et $\lceil n/2 \rceil \leq n-1 < n$. $\mu$ décroît strictement $\Rightarrow$ cas de base atteint en temps fini. $\blacksquare$
7 / 16tri_fusionRÉCURRENCEtri_fusion(L) renvoie une permutation triée de $L$. Récurrence forte sur $\mu(L)=\text{len}(L)$.Base ($\text{len}(L)\leq 1$) : $L$ déjà triée, renvoyée telle quelle. ✓
Hérédité. Pour $n \geq 2$, par hypothèse (longueurs $< n$), gauche et droite sont des permutations triées de $L[:m]$ et $L[m:]$. Par la correction de fusion, le résultat est trié et contient les éléments de $L$. ✓
tri_fusion est totalement correct.tri_fusionCOMPLEXITÉ$$T(n) = 2\,T(n/2) + O(n) \;\Longrightarrow\; O(n\log n)$$
tri_fusionCOMPLEXITÉOn déroule $T(n) = 2\,T(n/2) + c\,n$ :
Arrêt quand $n/2^k = 1$, soit $k = \log_2 n$ :
$$T(n) = n\,T(1) + (\log_2 n)\,cn = O(n\log n)$$
tri_rapideMESURELe pivot est retiré : $\text{len}(petits) + \text{len}(grands) = \text{len}(L) - 1$.
Donc $\text{len}(petits) \leq n-1 < n$ et $\text{len}(grands) \leq n-1 < n$ : $\mu$ décroît strictement à chaque appel $\Rightarrow$ tri_rapide termine pour toute entrée. $\blacksquare$
tri_rapideRÉCURRENCEtri_rapide(L) renvoie une permutation triée de $L$. Récurrence forte sur $\text{len}(L)$.Base : $\text{len}(L)\leq 1$, déjà triée. ✓
Hérédité : par hypothèse, $tri(petits)$ et $tri(grands)$ triés. La concaténation $tri(petits)+[pivot]+tri(grands)$ :
tri_rapideCOMPLEXITÉ| Cas | Récurrence | Résultat |
|---|---|---|
| Moyen / meilleur (équilibré) | $T(n)=2T(n/2)+O(n)$ | $O(n\log n)$ |
| Pire (pivot extrémal) | $T(n)=T(n-1)+O(n)$ | $O(n^2)$ |
tri_rapideCOMPLEXITÉPire cas ($T(n)=T(n-1)+cn$) :
Meilleur / moyen ($T(n)=2\,T(n/2)+cn$) : même déroulé que la fusion → $O(n\log n)$.
| Tri | Correction | Terminaison | Complexité |
|---|---|---|---|
| Fusion | Invariant de fusion + récurrence | Variant $(m{-}i){+}(p{-}j)$ ; mesure $\text{len}$ | $O(n\log n)$ garanti |
| Rapide | Lemme partition + récurrence | Mesure $\text{len}$ (pivot retiré) | $O(n\log n)$ / $O(n^2)$ |