Licence Informatique L3 Parcours : Informatique fondamentale année 2008-2009 TD 7 : Tri Rapide Description du tri rapide d’un tableau A[i…j] . Diviser : à partir du pivot q = A[i], partitionner A en deux sous tableaux non vides A[i…k1] et A[k+1…j] tels que tout élément de A[i…k-1] soit inférieur ou égal à q et tout élément de A[k+1…j] soit supérieur à q. A[k]= q. Régner : trier par la procédure de manière récursive A[i…k-1] et A[k+1…j]. Combiner : il n’y a rien à faire !!! D’où l’algorithme de tri rapide (pour un tableau d’entiers) : procedure Tri-rapide (var A : tableau d’entiers [1…n] ; i :entier ; j : entier) ; entier : k ; début si (i<j) alors début Placer(A,i,j, k) ; Tri-rapide(A,i,k-1) ; Tri-rapide(A,k+1,j) ; fin finsi fin procedure Placer(var A : tableau d’entiers [1…n] ; i :entier ; j : entier ; var k : entier) ; entier : l ; entier : q , x; début l := i+1 ; k := j ; tant que l ≤ k faire début tant que A[k] > A[i] faire k := k-1 ; {à la fin A[k] ≤ A[i] } tant que l ≤ j et A[l] ≤ A[i] faire l := l+1 ; {à la fin A[l] > A[i] } si l < k alors début x := A[l] ; A[l] := A[k] ; {échange de A[l] et A[k] } A[k] := x ; l :=l+1 ; k :=k-1 ; fin finsi fin q := A[i] ; A[i] := A[k] ; {échange de A[i] et A[k]} A[k] := q ; Fin 1 Le but de cet exercice est de trouver la complexité moyenne de l’algorithme de Tri-rapide en terme de comparaisons. Toutes les étapes de calcul sont décrites et les résultats donnés à chaque étape afin qu’indépendamment du temps consacré en TD, vous puissiez reprendre et comprendre la démarche. I Analyse de Placer en nombre de comparaisons 1.1 Faire dérouler l’algorithme Placer sur l’exemple [101, 213, 20, 123, 47, 79, 195]. 1.2 Analyser l’algorithme selon que le pivot q est un minimum du tableau, un maximum ou une valeur intermédiaire. 1.3 Montrer que le nombre de comparaisons pour un tableau de longueur n est égal à n-1 ou n+1. II Analyse de Tri-rapide en nombre de comparaisons On suppose que les valeurs de A sont toutes distinctes. 2.1 Complexité au pire : Le pire de cas correspond à un tableau de valeurs strictement croissantes. Calculer le nombre de comparaisons effectuées dans ce cas pour un tableau de taille n. En déduire que la complexité au pire Max(n) vérifie : Max (n) = θ (n 2 ) 2.2 On suppose que le pivot q peut se placer de manière équiprobable sur n’importe quelle place k du tableau de taille n. On a donc une probabilité 1/n d’avoir le pivot à la kième place, et donc d’avoir deux sous tableaux de taille respective k-1 et n-k. Si on note Moy(n) la complexité en moyenne de l’algorithme du tri rapide, en utilisant 1.3, comprendre que l’encadrement de Moy(n) par récurrence : 1 n 1 n ( Moy (k − 1) + Moy (n − k )) ≤ Moy (n) ≤ n + 1 + ∑ ( Moy (k − 1) + Moy (n − k )), n ≥ 2 ∑ n k =1 n k =1 Moy (0) = Moy (1) = 0 Suit la démonstration pour calculer cette Moyenne donnée par récurrence. n −1+ 2.3 On pose : 1 n An = n − 1 + ∑ ( Ak −1 + An − k ) n k =1 1 n Bn = n + 1 + ∑ ( Bk −1 + Bn − k ), n ≥ 2 , n k =1 A0 = A1 = 0 ; B0 = B1 = 0 An = n − 1 + 2 n −1 ∑ Ak n k =1 Bn = n + 1 + 2 n −1 ∑ Bk , n ≥ 2 n k =1 Montrer que alors An ≤ Moy (n) ≤ Bn 2 2.4 On utilisera ici la méthode par soustraction pour trouver Bn : n −1 a) On a : n( Bn − n − 1) = 2∑ Bk , n ≥ 2 . Montrer que par soustraction on k =1 obtient : nBn = (n + 1) Bn −1 + 2n . b) Après division par n(n+1) et en utilisant le changement de domaine v n = que la suite (vn) vérifie v n = v n −1 + 2 , n +1 Bn , montrer n +1 n≥3 n +1 1 1 1 = 1 + 2( H n +1 − 1 − − ) où Hn est la série harmonique. 2 3 k =4 k 8n + 2 . On obtient de même An = 2(n + 1) H n − 4n . d) En déduire que : Bn = 2(n + 1) H n − 3 c) En déduire que v n = 1 + 2∑ e) Conclusion : en utilisant le résultat vu en cours (Chapitre Approximations asymptotiques), à savoir que la série harmonique Hn vérifie H n ≈ Log (n) , montrer que : Moy(n) ≈ 2nLog (n) 3