Professional Documents
Culture Documents
C(d )
En pratique, nous ne nous intresserons qu la complexit au pire et la complexit en moyenne. Dnition 2 (Efcacit). Un algorithme A est dit plus efcace, respectivement au pire ou en moyenne, quun algorithme B de sa classe, si la complexit de A, respectivement au pire ou en moyenne, est infrieure celle B. Dnition 3 (Optimalit). Un algorithme est dit optimal si sa complexit est la complexit minimale parmi tous les algorithmes de sa classe. Nous nous intresserons quasi exclusivement la complexit en temps des algorithmes. Il est parfois intressant de sintresser dautres caractristiques, comme la complexit en espace (taille de lespace mmoire utilis), la largeur de bande passante requise, etc. 1
1.1.2
Notations de Landau
Quand nous calculons la complexit dun algorithme, nous ne calculons gnralement pas sa complexit exacte, mais son ordre de grandeur. Pour ce faire, nous avons besoin de notations asymptotiques. O : o Exemples O : n = O(n), 2n = O(3n), n + 2 = O(n) (pour sen convaincre, prendre n0 = 2 et c = 2), O(n), n = O(n2 ). o : n = o(n), log(n) = o(n), n = o(n2 ), log(n) = o( n). : n + log(n) = (n + n). n = O(n), log(n) = : : : f = O(g) n0 , c 0, n n0 , f (n) c g(n) c 0, n0 , n n0 , f (n) c g(n) f = O(g) et g = O( f )
1.1.3
Modle de machine
Pour que le rsultat de lanalyse dun algorithme soit pertinent, il faut avoir un modle de la machine sur laquelle lalgorithme sera implment (sous forme de programme). On prendra comme rfrence un modle de machine accs alatoire (RAM) et processeur unique, o les instructions sont excutes lune aprs lautre, sans oprations simultanes (algorithmique squentielle).
1.2
1.2.1
Entre : une squence de n nombres, a1 , ..., an . Sortie : une permutation, a1 , ..., an , de la squence dentre, telle que a1 a2 ... an .
1.2.2
De manire rpte, on retire un nombre de la squence dentre et on linsre la bonne place dans la squence des nombres dj tris (ce principe est le mme que celui utilis pour trier une poigne de cartes).
1.2.3
Algorithme
T RI -I NSERTION Pour j 2 n faire cl A[ j] i j1 tant que i > 0 et A[i] > cl faire A[i + 1] A[i] i i1 A[i + 1] cl
On retire un nombre de la squence dentre Les j 1 premiers lments de A sont dj tris. Tant que lon nest pas arriv au dbut du tableau, et que llment courant est plus grand que celui insrer. On dcale llment courant (on le met dans la place vide). On sintresse llment prcdent. Finalement, on a trouv o insrer notre nombre.
1.2.4
Exemple
Les diffrentes tapes de lexcution de lalgorithme T RI -I NSERTION sur le tableau [5; 2; 4; 6; 1; 3] sont prsentes gure 1.1. 2
F IG . 1.1 Action de T RI -I NSERTION sur le tableau [5; 2; 4; 6; 1; 3] ; llment insrer est entour par un cercle.
1.2.5
Complexit
Nous passons en revue les diffrentes tapes de notre algorithme an dvaluer son temps dexcution. Pour ce faire, nous attribuons un cot en temps chaque instruction, et nous comptons le nombre dexcutions de chacune des instructions. Pour chaque valeur de j [2, n], nous notons t j le nombre dexcutions de la boucle tant que pour cette valeur de j. Il est noter que la valeur de t j dpend des donnes... T RI -I NSERTION Cot Nombre dexcutions Pour j 2 n faire c1 n cl A[ j] c2 n1 i j1 c3 n1 tant que i > 0 et A[i] > cl faire c4 n j=2 t j n A[i + 1] A[i] c5 j=2 (t j 1) c6 i i1 n j=2 (t j 1) c7 A[i + 1] cl n1 Le temps dexcution total de lalgorithme est alors : T (n) = c1 n + c2 (n 1) + c3 (n 1) + c4 t j + c5 (t j 1) + c6 (t j 1) + c7 (n 1)
j=2 j=2 j=2 n n n
Complexit au meilleur : le cas le plus favorable pour lalgorithme T RI -I NSERTION est quand le tableau est dj tri, comme le montre le cas j = 4 de la gure 1.1. Dans ce cas t j = 1 pour tout j. T (n) = c1 n + c2 (n 1) + c3 (n 1) + c4 (n 1) + c7 (n 1) = (c1 + c2 + c3 + c4 + c7 )n (c2 + c3 + c4 + c7 ). T (n) peut ici tre crit sous la forme T (n) = an + b, a et b tant des constantes indpendantes des entres, et T (n) est donc une fonction linaire de n. Le plus souvent, comme cest le cas ici, le temps dexcution dun algorithme est x pour une entre donne ; mais il existe des algorithmes alatoires intressants dont le comportement peut varier mme pour une entre xe. Nous verrons un algorithme de ce style au chapitre ?? : une version alatoire du tri rapide Complexit au pire : le cas le plus dfavorable pour lalgorithme T RI -I NSERTION est quand le tableau est dj tri dans lordre inverse, comme le montre le cas j = 5 de la gure 1.1. Dans ce cas t j = j pour tout j. Rappel : n j=1 j =
n(n+1) 2 .
Donc n j=2 j =
n(n+1) 2
1 et n j=2 ( j 1) =
n(n1) 2 .
T (n) = c1 n + c2 (n 1) + c3 (n 1) + c4 = c4 c5 c6 + + 2 2 2
T (n) peut ici tre crit sous la forme T (n) = an2 + bn + c, a, b et c tant des constantes, et T (n) est donc une fonction quadratique de n. 3
Complexit en moyenne : supposons que lon applique lalgorithme de tri par insertion n nombres choisis au hasard. Quelle sera la valeur de t j ? Cest--dire, o devra-t-on insrer A[ j] dans le sous-tableau A[1.. j 1] ? En moyenne, pour moiti les lments de A[1.. j 1] sont infrieurs A[ j], et pour moiti suprieurs. Donc t j = j/2. Si lon reporte cette valeur dans lquation dnissant T (n), on obtient, comme dans le pire cas, une fonction quadratique en n. Caveat : ce raisonnement est partiellement faux ; un raisonnement prcis doit bien videmment tenir compte des valeurs des lments dj tris. Pour un calcul prcis, voir K NUTH [?, p. 82]. C ORI et L VY [?, p. 26] font un autre raisonnement et trouve un autre rsultat (de mme ordre de grandeur). Les deux sont justes : tout dpend de lhypothse que lon prend sur les jeux de donnes. Ainsi [?] suppose que les permutations sont quiprobables, et [?] que les valeurs trier sont quiprobables... Ordre de grandeur Ce qui nous intresse vraiment, cest lordre de grandeur du temps dexcution. Seul le terme dominant de la formule exprimant la complexit nous importe, les termes dordres infrieurs ntant pas signicatifs quand n devient grand. On ignore galement le coefcient multiplicateur constant du terme dominant. On crira donc, propos de la complexit du tri par insertion : meilleur cas : (n). pire cas : (n2 ). en moyenne : (n2 ). En gnral, on considre quun algorithme est plus efcace quun autre si sa complexit dans le pire cas a un ordre de grandeur infrieur. Classes de complexit Les algorithmes usuels peuvent tre classs en un certain nombre de grandes classes de complexit : Les algorithmes sub-linaires dont la complexit est en gnral en O(log n). Les algorithmes linaires en complexit O(n) et ceux en complexit en O(n log n) sont considrs comme rapides. Les algorithmes polynomiaux en O(nk ) pour k > 3 sont considrs comme lents, sans parler des algorithmes exponentiels (dont la complexit est suprieure tout polynme en n) que lon saccorde dire impraticables ds que la taille des donnes est suprieure quelques dizaines dunits.