Vous êtes sur la page 1sur 4

Chapitre 1

Complexit et optimalit ; premier algorithme de tri


1.1 Dnition de la complexit
1.1.1 Complexit
Dnition 1 (Complexit). La complexit dun algorithme est la mesure du nombre doprations fondamentales quil effectue sur un jeu de donnes. La complexit est exprime comme une fonction de la taille du jeu de donnes. Nous notons Dn lensemble des donnes de taille n et T (d ) le cot de lalgorithme sur la donne d . Complexit au meilleur : Tmin (n) = mind Dn C(d ). Cest le plus petit nombre doprations quaura excuter lalgorithme sur un jeu de donnes de taille xe, ici n. Cest une borne infrieure de la complexit de lalgorithme sur un jeu de donnes de taille n. Complexit au pire : Tmax (n) = maxd Dn C(d ). Cest le plus grand nombre doprations quaura excuter lalgorithme sur un jeu de donnes de taille xe, ici n. Avantage : il sagit dun maximum, et lalgorithme nira donc toujours avant davoir effectu Tmax (n) oprations. Inconvnient : cette complexit peut ne pas reter le comportement usuel de lalgorithme, le pire cas ne pouvant se produire que rarement.
n . Cest lesprance mathmatique des complexits de lalgorithme Complexit en moyenne : Tmoy (n) = d |D Dn | sur des jeux de donnes de taille n o ces jeux de donnes sont exprims dans un espace probabilis (concrtement, on se donne la probabilit dapparition de chacun des jeux de donnes). Avantage : rete le comportement gnral de lalgorithme si les cas extrmes sont rares ou si la complexit varie peu en fonction des donnes. Inconvnient : la complexit en pratique sur un jeu de donnes particulier peut tre nettement plus importante que la complexit en moyenne, dans ce cas la complexit en moyenne ne donnera pas une bonne indication du comportement de lalgorithme.

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 )

f = (g) g = O( f ) f = o(g) f = (g)

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

Illustration : cas du tri par insertion


Problmatique du tri

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

Principe du tri par insertion

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

n(n+1) n(n1) n(n1) 1 + c5 + c6 + c7 (n 1) 2 2 2 c4 c5 c6 n2 + c1 + c2 + c3 + + c7 n (c2 + c3 + c4 + c7 ). 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.

Vous aimerez peut-être aussi