Exercice corrigé Complexité e moyee du MergeSort et du QuickSort Exercice 1. O rappelle que les complexités e pire cas de l algorithme de tri-fusio ( MergeSort, J. vo Neuma 1945) et de l algorithme de tri rapide ( QuickSort, C.A.R. Hoare 1960) sot respectivemet e O( log ) et e O( ) (tableau déjà trié). Motrer que leurs complexités e moyee sot e O( log ). Démostratio. MergeSort : l algorithme peut s écrire e pseudo-lagage : procedure MergeSort(premier,derier : etiers) est si premier < derier alors milieu : etier := (premier+derier)/; MergeSort(premier,milieu); -- trie T[premier..milieu] MergeSort(milieu+1,derier); -- trie T[milieu+1..derier] Fusio(premier,milieu,derier); fi procedure; avec procedure Fusio(premier,milieu,derier : etiers) est -- Idices de parcours des sous-tableaux : i : etier := premier; j : etier := milieu+1; -- Tableau auxiliaire et idice de parcours : Tprime : etier[premier..derier]; k : etier := premier; tat que (i <= milieu) ou (j <= derier) faire si (i > milieu) alors Tprime[k] := T[j]; j := j+1; sio si (j > derier) alors Tprime[k] := T[i]; sio -- i i i j e sot ecore au bout si (T[i] < T[j]) alors Tprime[k] := T[i]; sio Tprime[k] := T[j]; j := j+1; k := k+1; fi tat que; T[premier..derier] := Tprime[premier..derier]; fi procedure;
Notos le ombre d élémets du tableau : = derier premier + 1. Das la procédure Fusio(), il y a exactemet comparaisos etre élémets du tableau, car i ou j (forcémet l u des deux, mais uiquemet l u des deux) est icrémeté à chaque tour de la boucle tat que. Notos C moy () la complexité e moyee de l algorithme MergeSort pour u tableau à élémets. D après l écriture de la procédure MergeSort() ci-dessus, et puisque le coût de la fusio est, o a trivialemet C moy () = C moy ( ) + C moy( ) +. E supposat que est ue puissace de deux (sio, o peut faire u ecadremet : i < i+1 ), o obtiet l équatio de récurrece suivate : C moy () = C moy ( ) +. (1) O obtiet, e remplaçat par das cette équatio, C moy ( ) = C moy( 4 ) + + 1. et doc C moy () = 4C moy ( 4 ) + () +. E poursuivat le même raisoemet, o obtiet, pour tout k 1, O s arrête bie sûr quad k = 1, soit k = log : C moy () = k C moy ( k k ) + i ( i + 1). log C moy () = C moy (1) + i ( i + 1). La complexité moyee pour u tableau à u élémet est costate. Notos c sa valeur (peu importe ce que vaut c). O a doc log C moy () = c + (log ) + i. O coaît l expressio exacte de la série géométrique : O obtiet doc fialemet C moy () = (c + 1) + log + log +1 1. 1 C moy () = (c + 1) + log + 1 = log + (c + 3) 1. Le terme prépodérat asymptotiquemet est bie évidemmet le log, et o a doc : C moy () = O( log ) ()
QuickSort : l algorithme peut s écrire e pseudo-lagage : procedure QuickSort(premier,derier : etiers) est si premier < derier alors pivot : etier := premier; -- par exemple pivot := Partitio(premier,derier,pivot); QuickSort(premier,pivot-1); QuickSort(pivot+1,derier); fi procedure; avec foctio Partitio(premier, derier, pivot : etiers) retoure etier est -- Idices de parcours des sous-tableaux : i : etier := premier+1; j : etier := derier; Echage(T[premier],T[pivot]); tat que i <= j faire tat que (i <= j et T[i] < T[premier]) faire -- o avace i jusqu à ^etre sur u élémet plus grad que T[premier] fi tat que; tat que (i <= j et T[j] > T[premier]) faire -- o recule j jusqu à ^etre sur u élémet plus petit que T[premier] j := j-1; fi tat que; si i < j alors Echage(T[i],T[j]); j := j-1; -- o arr^ete quad i et j se croiset fi tat que; Echage(T[premier],T[j]); -- T[1..j-1] et T[j+1..derier] cotieet respectivemet -- les valeurs iférieures et supérieures à T[j] retourer j; fi foctio; Notos le ombre d élémets du tableau : = derier premier + 1. Das la foctio Partitio(), il y a exactemet comparaisos etre u élémet du tableau et T [premier], car o teste toutes les valeurs de i et de j exactemet ue fois jusqu à ce que i et j se croiset. La procédure QuickSort() état récursive, sa complexité e moyee peut doc s écrire : C moy () = + moyee 1 pivot (C moy (pivot 1) + C moy ( pivot)). E effet C moy (pivot 1) représete la complexité e moyee de l appel QuickSort(premier,pivot-1), et C moy ( pivot) celle de l appel QuickSort(premier,pivot-1). Faisos maiteat ue hypothèse d équiprobabilité : supposos que la procédure Partitio() revoie
de maière équiprobable importe quelle valeur etre premier et derier. Comme o a valeurs, chaque valeur a ue probabilité 1 d être revoyée. La moyee s écrit doc : moyee 1 pivot (C moy (pivot 1) + C moy ( pivot)) = 1 O a doc fialemet l équatio de récurrece suivate : avec les coditios iitiales : C moy () = 1 + 1 (C moy (p 1) + C moy ( p)). (C moy (p 1) + C moy ( p)), (3) C moy (1) = C moy (0) = 1. La fi de la démostratio est que du calcul! Afi d élimier la somme de l équatio, o peut chager de variable pour la secode moitié de la somme et réécrire : d où ou ecore et doc C moy () = + 1 C moy (p 1) + 1 C moy (q 1) C moy () = + C moy () = () + La soustractio des équatios (4) et (5) doe : d où q=1 C moy (p 1) C moy (p 1), (4) 1 ( 1)C moy ( 1) = ( 1) + C moy (p 1). (5) C moy () ( 1)C moy ( 1) = (() ( 1)) + C moy ( 1), ou ecore e divisat par () : C moy () = + ()C moy ( 1), C moy () = C moy( 1) +. (6) Cette ouvelle équatio de récurrece est beaucoup plus simple car o a plus de somme, et o peut e déduire : C moy ( 1) O a doc, e combiat les équatios (6) et (7) : = C moy( ) 1 +. (7) E cotiuat aisi, o obtiet C moy () C moy () = C moy( ) 1 = C moy(1) + +. +1 + k, k=3
c est-à-dire Comme k=1 1 k + log, o e déduit C moy () = 5 +1 + k. k=1 C moy () + log (8) Remarque. Même si das le pire cas le QuickSort est asymptotiquemet plus coûteux e temps de calcul que le MergeSort (O( ) cotre O( log )), o remarque qu e moyee les deux algorithmes ot u comportemet similaire (tout ceci, bie sûr, sous de boes coditios d équiprobabilité). E pratique, o costate même que le QuickSort est au mois fois plus rapide que le MergeSort (voir otammet [1]). Ceci est du au coût d opératios autres que les comparaisos etre élémets de tableau, par exemple la recopie de tableau du MergeSort. Les étudiats itéressés ou voulat s exercer au calcul de complexités sot fortemet icités à se référer à []. Remarque. L équatio 1 est classique pour u algorithme qui applique le pricipe Diviser pour Réger. Sa résolutio l est égalemet. Nous y reviedros à la fi du semestre. Bibliographie idicative [1] R. Sedgewick. Algorithmes e lagage C : cours et exercices. Duod, 000. [] R. Sedgewick, P. Flajolet. Itroductio à l aalyse des algorithmes. Iteratioal Thomso Publishig Compay, 1996. [1] est dispoible à la B.U. Scieces et à la bibliothèque MIS. [] est dispoible à la B.U. Scieces, et e aglais à la bibliothèque MIS.